mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
ASoC: Updates for v5.4
Quite a big update this time around, particularly in the core where we've had a lot of cleanups from Morimoto-san - there's not much functional change but quite a bit of modernization going on. We've also seen a lot of driver work, a lot of it cleanups but also some particular drivers. - Lots and lots of cleanups from Morimoto-san and Yue Haibing. - Lots of cleanups and enhancements to the Freescale, sunxi dnd Intel rivers. - Initial Sound Open Firmware suppot for i.MX8. - Removal of w90x900 and nuc900 drivers as the platforms are being removed. - New support for Cirrus Logic CS47L15 and CS47L92, Freescale i.MX 7ULP and 8MQ, Meson G12A and NXP UDA1334 -----BEGIN PGP SIGNATURE----- iQFHBAABCgAxFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAl13cr4THGJyb29uaWVA a2VybmVsLm9yZwAKCRAk1otyXVSH0NKuB/9fvRIh6bJ4pUA26Bc7+shJQ1BtC/MN jo1G4maN+hY5ZUwE5hvg04S6W6Unm1iNotQecKcF43Vh/4SZNiLtfSEM4b/6IBWw IFUU6xDz8Q4HbF4HJMotpKQKMABpfds5flH2e1YrrNoMH+KlkC9kJOR26B2W36xW TZclfquCDICxr8M7eYGM7N5hOqSrlugyWBZqTTnTDnsMrW4SAaH2HYwFhaeayd+I ECyaXIoUHvo4FX5ueZv/mzBiMl0z4rgXn3tuqI6a8LoWJdRZTkcSQabtuIC+wmxb P734RY6vjSUYZrv03cAtxHDrSVoC/RYedOzhT+iFF6y/NHzdu701lsJb =aD0T -----END PGP SIGNATURE----- Merge tag 'asoc-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next ASoC: Updates for v5.4 Quite a big update this time around, particularly in the core where we've had a lot of cleanups from Morimoto-san - there's not much functional change but quite a bit of modernization going on. We've also seen a lot of driver work, a lot of it cleanups but also some particular drivers. - Lots and lots of cleanups from Morimoto-san and Yue Haibing. - Lots of cleanups and enhancements to the Freescale, sunxi dnd Intel rivers. - Initial Sound Open Firmware suppot for i.MX8. - Removal of w90x900 and nuc900 drivers as the platforms are being removed. - New support for Cirrus Logic CS47L15 and CS47L92, Freescale i.MX 7ULP and 8MQ, Meson G12A and NXP UDA1334
This commit is contained in:
commit
7711fb7dac
@ -107,10 +107,13 @@ ForEachMacros:
|
|||||||
- 'css_for_each_descendant_post'
|
- 'css_for_each_descendant_post'
|
||||||
- 'css_for_each_descendant_pre'
|
- 'css_for_each_descendant_pre'
|
||||||
- 'device_for_each_child_node'
|
- 'device_for_each_child_node'
|
||||||
|
- 'dma_fence_chain_for_each'
|
||||||
- 'drm_atomic_crtc_for_each_plane'
|
- 'drm_atomic_crtc_for_each_plane'
|
||||||
- 'drm_atomic_crtc_state_for_each_plane'
|
- 'drm_atomic_crtc_state_for_each_plane'
|
||||||
- 'drm_atomic_crtc_state_for_each_plane_state'
|
- 'drm_atomic_crtc_state_for_each_plane_state'
|
||||||
- 'drm_atomic_for_each_plane_damage'
|
- 'drm_atomic_for_each_plane_damage'
|
||||||
|
- 'drm_client_for_each_connector_iter'
|
||||||
|
- 'drm_client_for_each_modeset'
|
||||||
- 'drm_connector_for_each_possible_encoder'
|
- 'drm_connector_for_each_possible_encoder'
|
||||||
- 'drm_for_each_connector_iter'
|
- 'drm_for_each_connector_iter'
|
||||||
- 'drm_for_each_crtc'
|
- 'drm_for_each_crtc'
|
||||||
@ -126,6 +129,7 @@ ForEachMacros:
|
|||||||
- 'drm_mm_for_each_node_in_range'
|
- 'drm_mm_for_each_node_in_range'
|
||||||
- 'drm_mm_for_each_node_safe'
|
- 'drm_mm_for_each_node_safe'
|
||||||
- 'flow_action_for_each'
|
- 'flow_action_for_each'
|
||||||
|
- 'for_each_active_dev_scope'
|
||||||
- 'for_each_active_drhd_unit'
|
- 'for_each_active_drhd_unit'
|
||||||
- 'for_each_active_iommu'
|
- 'for_each_active_iommu'
|
||||||
- 'for_each_available_child_of_node'
|
- 'for_each_available_child_of_node'
|
||||||
@ -153,6 +157,8 @@ ForEachMacros:
|
|||||||
- 'for_each_cpu_not'
|
- 'for_each_cpu_not'
|
||||||
- 'for_each_cpu_wrap'
|
- 'for_each_cpu_wrap'
|
||||||
- 'for_each_dev_addr'
|
- 'for_each_dev_addr'
|
||||||
|
- 'for_each_dev_scope'
|
||||||
|
- 'for_each_displayid_db'
|
||||||
- 'for_each_dma_cap_mask'
|
- 'for_each_dma_cap_mask'
|
||||||
- 'for_each_dpcm_be'
|
- 'for_each_dpcm_be'
|
||||||
- 'for_each_dpcm_be_rollback'
|
- 'for_each_dpcm_be_rollback'
|
||||||
@ -169,6 +175,8 @@ ForEachMacros:
|
|||||||
- 'for_each_evictable_lru'
|
- 'for_each_evictable_lru'
|
||||||
- 'for_each_fib6_node_rt_rcu'
|
- 'for_each_fib6_node_rt_rcu'
|
||||||
- 'for_each_fib6_walker_rt'
|
- 'for_each_fib6_walker_rt'
|
||||||
|
- 'for_each_free_mem_pfn_range_in_zone'
|
||||||
|
- 'for_each_free_mem_pfn_range_in_zone_from'
|
||||||
- 'for_each_free_mem_range'
|
- 'for_each_free_mem_range'
|
||||||
- 'for_each_free_mem_range_reverse'
|
- 'for_each_free_mem_range_reverse'
|
||||||
- 'for_each_func_rsrc'
|
- 'for_each_func_rsrc'
|
||||||
@ -178,6 +186,7 @@ ForEachMacros:
|
|||||||
- 'for_each_ip_tunnel_rcu'
|
- 'for_each_ip_tunnel_rcu'
|
||||||
- 'for_each_irq_nr'
|
- 'for_each_irq_nr'
|
||||||
- 'for_each_link_codecs'
|
- 'for_each_link_codecs'
|
||||||
|
- 'for_each_link_platforms'
|
||||||
- 'for_each_lru'
|
- 'for_each_lru'
|
||||||
- 'for_each_matching_node'
|
- 'for_each_matching_node'
|
||||||
- 'for_each_matching_node_and_match'
|
- 'for_each_matching_node_and_match'
|
||||||
@ -302,7 +311,10 @@ ForEachMacros:
|
|||||||
- 'ide_port_for_each_present_dev'
|
- 'ide_port_for_each_present_dev'
|
||||||
- 'idr_for_each_entry'
|
- 'idr_for_each_entry'
|
||||||
- 'idr_for_each_entry_continue'
|
- 'idr_for_each_entry_continue'
|
||||||
|
- 'idr_for_each_entry_continue_ul'
|
||||||
- 'idr_for_each_entry_ul'
|
- 'idr_for_each_entry_ul'
|
||||||
|
- 'in_dev_for_each_ifa_rcu'
|
||||||
|
- 'in_dev_for_each_ifa_rtnl'
|
||||||
- 'inet_bind_bucket_for_each'
|
- 'inet_bind_bucket_for_each'
|
||||||
- 'inet_lhash2_for_each_icsk_rcu'
|
- 'inet_lhash2_for_each_icsk_rcu'
|
||||||
- 'key_for_each'
|
- 'key_for_each'
|
||||||
@ -343,8 +355,6 @@ ForEachMacros:
|
|||||||
- 'media_device_for_each_intf'
|
- 'media_device_for_each_intf'
|
||||||
- 'media_device_for_each_link'
|
- 'media_device_for_each_link'
|
||||||
- 'media_device_for_each_pad'
|
- 'media_device_for_each_pad'
|
||||||
- 'mp_bvec_for_each_page'
|
|
||||||
- 'mp_bvec_for_each_segment'
|
|
||||||
- 'nanddev_io_for_each_page'
|
- 'nanddev_io_for_each_page'
|
||||||
- 'netdev_for_each_lower_dev'
|
- 'netdev_for_each_lower_dev'
|
||||||
- 'netdev_for_each_lower_private'
|
- 'netdev_for_each_lower_private'
|
||||||
@ -381,18 +391,19 @@ ForEachMacros:
|
|||||||
- 'radix_tree_for_each_slot'
|
- 'radix_tree_for_each_slot'
|
||||||
- 'radix_tree_for_each_tagged'
|
- 'radix_tree_for_each_tagged'
|
||||||
- 'rbtree_postorder_for_each_entry_safe'
|
- 'rbtree_postorder_for_each_entry_safe'
|
||||||
|
- 'rdma_for_each_block'
|
||||||
- 'rdma_for_each_port'
|
- 'rdma_for_each_port'
|
||||||
- 'resource_list_for_each_entry'
|
- 'resource_list_for_each_entry'
|
||||||
- 'resource_list_for_each_entry_safe'
|
- 'resource_list_for_each_entry_safe'
|
||||||
- 'rhl_for_each_entry_rcu'
|
- 'rhl_for_each_entry_rcu'
|
||||||
- 'rhl_for_each_rcu'
|
- 'rhl_for_each_rcu'
|
||||||
- 'rht_for_each'
|
- 'rht_for_each'
|
||||||
- 'rht_for_each_from'
|
|
||||||
- 'rht_for_each_entry'
|
- 'rht_for_each_entry'
|
||||||
- 'rht_for_each_entry_from'
|
- 'rht_for_each_entry_from'
|
||||||
- 'rht_for_each_entry_rcu'
|
- 'rht_for_each_entry_rcu'
|
||||||
- 'rht_for_each_entry_rcu_from'
|
- 'rht_for_each_entry_rcu_from'
|
||||||
- 'rht_for_each_entry_safe'
|
- 'rht_for_each_entry_safe'
|
||||||
|
- 'rht_for_each_from'
|
||||||
- 'rht_for_each_rcu'
|
- 'rht_for_each_rcu'
|
||||||
- 'rht_for_each_rcu_from'
|
- 'rht_for_each_rcu_from'
|
||||||
- '__rq_for_each_bio'
|
- '__rq_for_each_bio'
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -142,3 +142,6 @@ x509.genkey
|
|||||||
|
|
||||||
# Kdevelop4
|
# Kdevelop4
|
||||||
*.kdev4
|
*.kdev4
|
||||||
|
|
||||||
|
# Clang's compilation database file
|
||||||
|
/compile_commands.json
|
||||||
|
8
.mailmap
8
.mailmap
@ -64,6 +64,9 @@ Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@imgtec.com>
|
|||||||
Dengcheng Zhu <dzhu@wavecomp.com> <dczhu@mips.com>
|
Dengcheng Zhu <dzhu@wavecomp.com> <dczhu@mips.com>
|
||||||
Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@gmail.com>
|
Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@gmail.com>
|
||||||
Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
||||||
|
Dmitry Safonov <0x7f454c46@gmail.com> <dsafonov@virtuozzo.com>
|
||||||
|
Dmitry Safonov <0x7f454c46@gmail.com> <d.safonov@partner.samsung.com>
|
||||||
|
Dmitry Safonov <0x7f454c46@gmail.com> <dima@arista.com>
|
||||||
Domen Puncer <domen@coderock.org>
|
Domen Puncer <domen@coderock.org>
|
||||||
Douglas Gilbert <dougg@torque.net>
|
Douglas Gilbert <dougg@torque.net>
|
||||||
Ed L. Cashin <ecashin@coraid.com>
|
Ed L. Cashin <ecashin@coraid.com>
|
||||||
@ -98,6 +101,7 @@ Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com>
|
|||||||
Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>
|
Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>
|
||||||
<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
|
<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
|
||||||
Jean Tourrilhes <jt@hpl.hp.com>
|
Jean Tourrilhes <jt@hpl.hp.com>
|
||||||
|
<jean-philippe@linaro.org> <jean-philippe.brucker@arm.com>
|
||||||
Jeff Garzik <jgarzik@pretzel.yyz.us>
|
Jeff Garzik <jgarzik@pretzel.yyz.us>
|
||||||
Jeff Layton <jlayton@kernel.org> <jlayton@redhat.com>
|
Jeff Layton <jlayton@kernel.org> <jlayton@redhat.com>
|
||||||
Jeff Layton <jlayton@kernel.org> <jlayton@poochiereds.net>
|
Jeff Layton <jlayton@kernel.org> <jlayton@poochiereds.net>
|
||||||
@ -116,6 +120,7 @@ John Stultz <johnstul@us.ibm.com>
|
|||||||
Juha Yrjola <at solidboot.com>
|
Juha Yrjola <at solidboot.com>
|
||||||
Juha Yrjola <juha.yrjola@nokia.com>
|
Juha Yrjola <juha.yrjola@nokia.com>
|
||||||
Juha Yrjola <juha.yrjola@solidboot.com>
|
Juha Yrjola <juha.yrjola@solidboot.com>
|
||||||
|
Julien Thierry <julien.thierry.kdev@gmail.com> <julien.thierry@arm.com>
|
||||||
Kay Sievers <kay.sievers@vrfy.org>
|
Kay Sievers <kay.sievers@vrfy.org>
|
||||||
Kenneth W Chen <kenneth.w.chen@intel.com>
|
Kenneth W Chen <kenneth.w.chen@intel.com>
|
||||||
Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
|
Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
|
||||||
@ -132,6 +137,7 @@ Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch>
|
|||||||
Li Yang <leoyang.li@nxp.com> <leo@zh-kernel.org>
|
Li Yang <leoyang.li@nxp.com> <leo@zh-kernel.org>
|
||||||
Li Yang <leoyang.li@nxp.com> <leoli@freescale.com>
|
Li Yang <leoyang.li@nxp.com> <leoli@freescale.com>
|
||||||
Maciej W. Rozycki <macro@mips.com> <macro@imgtec.com>
|
Maciej W. Rozycki <macro@mips.com> <macro@imgtec.com>
|
||||||
|
Marc Zyngier <maz@kernel.org> <marc.zyngier@arm.com>
|
||||||
Marcin Nowakowski <marcin.nowakowski@mips.com> <marcin.nowakowski@imgtec.com>
|
Marcin Nowakowski <marcin.nowakowski@mips.com> <marcin.nowakowski@imgtec.com>
|
||||||
Mark Brown <broonie@sirena.org.uk>
|
Mark Brown <broonie@sirena.org.uk>
|
||||||
Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com>
|
Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com>
|
||||||
@ -157,6 +163,8 @@ Matt Ranostay <mranostay@gmail.com> Matthew Ranostay <mranostay@embeddedalley.co
|
|||||||
Matt Ranostay <mranostay@gmail.com> <matt.ranostay@intel.com>
|
Matt Ranostay <mranostay@gmail.com> <matt.ranostay@intel.com>
|
||||||
Matt Ranostay <matt.ranostay@konsulko.com> <matt@ranostay.consulting>
|
Matt Ranostay <matt.ranostay@konsulko.com> <matt@ranostay.consulting>
|
||||||
Matt Redfearn <matt.redfearn@mips.com> <matt.redfearn@imgtec.com>
|
Matt Redfearn <matt.redfearn@mips.com> <matt.redfearn@imgtec.com>
|
||||||
|
Maxime Ripard <mripard@kernel.org> <maxime.ripard@bootlin.com>
|
||||||
|
Maxime Ripard <mripard@kernel.org> <maxime.ripard@free-electrons.com>
|
||||||
Mayuresh Janorkar <mayur@ti.com>
|
Mayuresh Janorkar <mayur@ti.com>
|
||||||
Michael Buesch <m@bues.ch>
|
Michael Buesch <m@bues.ch>
|
||||||
Michel Dänzer <michel@tungstengraphics.com>
|
Michel Dänzer <michel@tungstengraphics.com>
|
||||||
|
@ -9,7 +9,7 @@ Linux PCI Bus Subsystem
|
|||||||
:numbered:
|
:numbered:
|
||||||
|
|
||||||
pci
|
pci
|
||||||
picebus-howto
|
pciebus-howto
|
||||||
pci-iov-howto
|
pci-iov-howto
|
||||||
msi-howto
|
msi-howto
|
||||||
acpi-info
|
acpi-info
|
||||||
|
@ -403,7 +403,7 @@ That is, the recovery API only requires that:
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Implementation details for the powerpc platform are discussed in
|
Implementation details for the powerpc platform are discussed in
|
||||||
the file Documentation/powerpc/eeh-pci-error-recovery.txt
|
the file Documentation/powerpc/eeh-pci-error-recovery.rst
|
||||||
|
|
||||||
As of this writing, there is a growing list of device drivers with
|
As of this writing, there is a growing list of device drivers with
|
||||||
patches implementing error recovery. Not all of these patches are in
|
patches implementing error recovery. Not all of these patches are in
|
||||||
@ -422,3 +422,6 @@ That is, the recovery API only requires that:
|
|||||||
- drivers/net/cxgb3
|
- drivers/net/cxgb3
|
||||||
- drivers/net/s2io.c
|
- drivers/net/s2io.c
|
||||||
- drivers/net/qlge
|
- drivers/net/qlge
|
||||||
|
|
||||||
|
The End
|
||||||
|
-------
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Using hlist_nulls to protect read-mostly linked lists and
|
Using hlist_nulls to protect read-mostly linked lists and
|
||||||
objects using SLAB_TYPESAFE_BY_RCU allocations.
|
objects using SLAB_TYPESAFE_BY_RCU allocations.
|
||||||
|
|
||||||
Please read the basics in Documentation/RCU/listRCU.txt
|
Please read the basics in Documentation/RCU/listRCU.rst
|
||||||
|
|
||||||
Using special makers (called 'nulls') is a convenient way
|
Using special makers (called 'nulls') is a convenient way
|
||||||
to solve following problem :
|
to solve following problem :
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = 'Linux Kernel User Documentation'
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'linux-user.tex', 'Linux Kernel User Documentation',
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -41,10 +41,11 @@ Related CVEs
|
|||||||
|
|
||||||
The following CVE entries describe Spectre variants:
|
The following CVE entries describe Spectre variants:
|
||||||
|
|
||||||
============= ======================= =================
|
============= ======================= ==========================
|
||||||
CVE-2017-5753 Bounds check bypass Spectre variant 1
|
CVE-2017-5753 Bounds check bypass Spectre variant 1
|
||||||
CVE-2017-5715 Branch target injection Spectre variant 2
|
CVE-2017-5715 Branch target injection Spectre variant 2
|
||||||
============= ======================= =================
|
CVE-2019-1125 Spectre v1 swapgs Spectre variant 1 (swapgs)
|
||||||
|
============= ======================= ==========================
|
||||||
|
|
||||||
Problem
|
Problem
|
||||||
-------
|
-------
|
||||||
@ -78,6 +79,13 @@ There are some extensions of Spectre variant 1 attacks for reading data
|
|||||||
over the network, see :ref:`[12] <spec_ref12>`. However such attacks
|
over the network, see :ref:`[12] <spec_ref12>`. However such attacks
|
||||||
are difficult, low bandwidth, fragile, and are considered low risk.
|
are difficult, low bandwidth, fragile, and are considered low risk.
|
||||||
|
|
||||||
|
Note that, despite "Bounds Check Bypass" name, Spectre variant 1 is not
|
||||||
|
only about user-controlled array bounds checks. It can affect any
|
||||||
|
conditional checks. The kernel entry code interrupt, exception, and NMI
|
||||||
|
handlers all have conditional swapgs checks. Those may be problematic
|
||||||
|
in the context of Spectre v1, as kernel code can speculatively run with
|
||||||
|
a user GS.
|
||||||
|
|
||||||
Spectre variant 2 (Branch Target Injection)
|
Spectre variant 2 (Branch Target Injection)
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
@ -132,6 +140,9 @@ not cover all possible attack vectors.
|
|||||||
1. A user process attacking the kernel
|
1. A user process attacking the kernel
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Spectre variant 1
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The attacker passes a parameter to the kernel via a register or
|
The attacker passes a parameter to the kernel via a register or
|
||||||
via a known address in memory during a syscall. Such parameter may
|
via a known address in memory during a syscall. Such parameter may
|
||||||
be used later by the kernel as an index to an array or to derive
|
be used later by the kernel as an index to an array or to derive
|
||||||
@ -144,7 +155,40 @@ not cover all possible attack vectors.
|
|||||||
potentially be influenced for Spectre attacks, new "nospec" accessor
|
potentially be influenced for Spectre attacks, new "nospec" accessor
|
||||||
macros are used to prevent speculative loading of data.
|
macros are used to prevent speculative loading of data.
|
||||||
|
|
||||||
Spectre variant 2 attacker can :ref:`poison <poison_btb>` the branch
|
Spectre variant 1 (swapgs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
An attacker can train the branch predictor to speculatively skip the
|
||||||
|
swapgs path for an interrupt or exception. If they initialize
|
||||||
|
the GS register to a user-space value, if the swapgs is speculatively
|
||||||
|
skipped, subsequent GS-related percpu accesses in the speculation
|
||||||
|
window will be done with the attacker-controlled GS value. This
|
||||||
|
could cause privileged memory to be accessed and leaked.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
if (coming from user space)
|
||||||
|
swapgs
|
||||||
|
mov %gs:<percpu_offset>, %reg
|
||||||
|
mov (%reg), %reg1
|
||||||
|
|
||||||
|
When coming from user space, the CPU can speculatively skip the
|
||||||
|
swapgs, and then do a speculative percpu load using the user GS
|
||||||
|
value. So the user can speculatively force a read of any kernel
|
||||||
|
value. If a gadget exists which uses the percpu value as an address
|
||||||
|
in another load/store, then the contents of the kernel value may
|
||||||
|
become visible via an L1 side channel attack.
|
||||||
|
|
||||||
|
A similar attack exists when coming from kernel space. The CPU can
|
||||||
|
speculatively do the swapgs, causing the user GS to get used for the
|
||||||
|
rest of the speculative window.
|
||||||
|
|
||||||
|
Spectre variant 2
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
A spectre variant 2 attacker can :ref:`poison <poison_btb>` the branch
|
||||||
target buffer (BTB) before issuing syscall to launch an attack.
|
target buffer (BTB) before issuing syscall to launch an attack.
|
||||||
After entering the kernel, the kernel could use the poisoned branch
|
After entering the kernel, the kernel could use the poisoned branch
|
||||||
target buffer on indirect jump and jump to gadget code in speculative
|
target buffer on indirect jump and jump to gadget code in speculative
|
||||||
@ -280,11 +324,18 @@ The sysfs file showing Spectre variant 1 mitigation status is:
|
|||||||
|
|
||||||
The possible values in this file are:
|
The possible values in this file are:
|
||||||
|
|
||||||
======================================= =================================
|
.. list-table::
|
||||||
'Mitigation: __user pointer sanitation' Protection in kernel on a case by
|
|
||||||
case base with explicit pointer
|
* - 'Not affected'
|
||||||
sanitation.
|
- The processor is not vulnerable.
|
||||||
======================================= =================================
|
* - 'Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers'
|
||||||
|
- The swapgs protections are disabled; otherwise it has
|
||||||
|
protection in the kernel on a case by case base with explicit
|
||||||
|
pointer sanitation and usercopy LFENCE barriers.
|
||||||
|
* - 'Mitigation: usercopy/swapgs barriers and __user pointer sanitization'
|
||||||
|
- Protection in the kernel on a case by case base with explicit
|
||||||
|
pointer sanitation, usercopy LFENCE barriers, and swapgs LFENCE
|
||||||
|
barriers.
|
||||||
|
|
||||||
However, the protections are put in place on a case by case basis,
|
However, the protections are put in place on a case by case basis,
|
||||||
and there is no guarantee that all possible attack vectors for Spectre
|
and there is no guarantee that all possible attack vectors for Spectre
|
||||||
@ -366,12 +417,27 @@ Turning on mitigation for Spectre variant 1 and Spectre variant 2
|
|||||||
1. Kernel mitigation
|
1. Kernel mitigation
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Spectre variant 1
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
For the Spectre variant 1, vulnerable kernel code (as determined
|
For the Spectre variant 1, vulnerable kernel code (as determined
|
||||||
by code audit or scanning tools) is annotated on a case by case
|
by code audit or scanning tools) is annotated on a case by case
|
||||||
basis to use nospec accessor macros for bounds clipping :ref:`[2]
|
basis to use nospec accessor macros for bounds clipping :ref:`[2]
|
||||||
<spec_ref2>` to avoid any usable disclosure gadgets. However, it may
|
<spec_ref2>` to avoid any usable disclosure gadgets. However, it may
|
||||||
not cover all attack vectors for Spectre variant 1.
|
not cover all attack vectors for Spectre variant 1.
|
||||||
|
|
||||||
|
Copy-from-user code has an LFENCE barrier to prevent the access_ok()
|
||||||
|
check from being mis-speculated. The barrier is done by the
|
||||||
|
barrier_nospec() macro.
|
||||||
|
|
||||||
|
For the swapgs variant of Spectre variant 1, LFENCE barriers are
|
||||||
|
added to interrupt, exception and NMI entry where needed. These
|
||||||
|
barriers are done by the FENCE_SWAPGS_KERNEL_ENTRY and
|
||||||
|
FENCE_SWAPGS_USER_ENTRY macros.
|
||||||
|
|
||||||
|
Spectre variant 2
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
For Spectre variant 2 mitigation, the compiler turns indirect calls or
|
For Spectre variant 2 mitigation, the compiler turns indirect calls or
|
||||||
jumps in the kernel into equivalent return trampolines (retpolines)
|
jumps in the kernel into equivalent return trampolines (retpolines)
|
||||||
:ref:`[3] <spec_ref3>` :ref:`[9] <spec_ref9>` to go to the target
|
:ref:`[3] <spec_ref3>` :ref:`[9] <spec_ref9>` to go to the target
|
||||||
@ -473,6 +539,12 @@ Mitigation control on the kernel command line
|
|||||||
Spectre variant 2 mitigation can be disabled or force enabled at the
|
Spectre variant 2 mitigation can be disabled or force enabled at the
|
||||||
kernel command line.
|
kernel command line.
|
||||||
|
|
||||||
|
nospectre_v1
|
||||||
|
|
||||||
|
[X86,PPC] Disable mitigations for Spectre Variant 1
|
||||||
|
(bounds check bypass). With this option data leaks are
|
||||||
|
possible in the system.
|
||||||
|
|
||||||
nospectre_v2
|
nospectre_v2
|
||||||
|
|
||||||
[X86] Disable all mitigations for the Spectre variant 2
|
[X86] Disable all mitigations for the Spectre variant 2
|
||||||
|
@ -2545,7 +2545,7 @@
|
|||||||
mem_encrypt=on: Activate SME
|
mem_encrypt=on: Activate SME
|
||||||
mem_encrypt=off: Do not activate SME
|
mem_encrypt=off: Do not activate SME
|
||||||
|
|
||||||
Refer to Documentation/virtual/kvm/amd-memory-encryption.rst
|
Refer to Documentation/virt/kvm/amd-memory-encryption.rst
|
||||||
for details on when memory encryption can be activated.
|
for details on when memory encryption can be activated.
|
||||||
|
|
||||||
mem_sleep_default= [SUSPEND] Default system suspend mode:
|
mem_sleep_default= [SUSPEND] Default system suspend mode:
|
||||||
@ -2604,7 +2604,7 @@
|
|||||||
expose users to several CPU vulnerabilities.
|
expose users to several CPU vulnerabilities.
|
||||||
Equivalent to: nopti [X86,PPC]
|
Equivalent to: nopti [X86,PPC]
|
||||||
kpti=0 [ARM64]
|
kpti=0 [ARM64]
|
||||||
nospectre_v1 [PPC]
|
nospectre_v1 [X86,PPC]
|
||||||
nobp=0 [S390]
|
nobp=0 [S390]
|
||||||
nospectre_v2 [X86,PPC,S390,ARM64]
|
nospectre_v2 [X86,PPC,S390,ARM64]
|
||||||
spectre_v2_user=off [X86]
|
spectre_v2_user=off [X86]
|
||||||
@ -2965,9 +2965,9 @@
|
|||||||
nosmt=force: Force disable SMT, cannot be undone
|
nosmt=force: Force disable SMT, cannot be undone
|
||||||
via the sysfs control file.
|
via the sysfs control file.
|
||||||
|
|
||||||
nospectre_v1 [PPC] Disable mitigations for Spectre Variant 1 (bounds
|
nospectre_v1 [X86,PPC] Disable mitigations for Spectre Variant 1
|
||||||
check bypass). With this option data leaks are possible
|
(bounds check bypass). With this option data leaks are
|
||||||
in the system.
|
possible in the system.
|
||||||
|
|
||||||
nospectre_v2 [X86,PPC_FSL_BOOK3E,ARM64] Disable all mitigations for
|
nospectre_v2 [X86,PPC_FSL_BOOK3E,ARM64] Disable all mitigations for
|
||||||
the Spectre variant 2 (indirect branch prediction)
|
the Spectre variant 2 (indirect branch prediction)
|
||||||
@ -4090,6 +4090,13 @@
|
|||||||
Run specified binary instead of /init from the ramdisk,
|
Run specified binary instead of /init from the ramdisk,
|
||||||
used for early userspace startup. See initrd.
|
used for early userspace startup. See initrd.
|
||||||
|
|
||||||
|
rdrand= [X86]
|
||||||
|
force - Override the decision by the kernel to hide the
|
||||||
|
advertisement of RDRAND support (this affects
|
||||||
|
certain AMD processors because of buggy BIOS
|
||||||
|
support, specifically around the suspend/resume
|
||||||
|
path).
|
||||||
|
|
||||||
rdt= [HW,X86,RDT]
|
rdt= [HW,X86,RDT]
|
||||||
Turn on/off individual RDT features. List is:
|
Turn on/off individual RDT features. List is:
|
||||||
cmt, mbmtotal, mbmlocal, l3cat, l3cdp, l2cat, l2cdp,
|
cmt, mbmtotal, mbmlocal, l3cat, l3cdp, l2cat, l2cdp,
|
||||||
|
@ -53,7 +53,7 @@ disabled, there is ``khugepaged`` daemon that scans memory and
|
|||||||
collapses sequences of basic pages into huge pages.
|
collapses sequences of basic pages into huge pages.
|
||||||
|
|
||||||
The THP behaviour is controlled via :ref:`sysfs <thp_sysfs>`
|
The THP behaviour is controlled via :ref:`sysfs <thp_sysfs>`
|
||||||
interface and using madivse(2) and prctl(2) system calls.
|
interface and using madvise(2) and prctl(2) system calls.
|
||||||
|
|
||||||
Transparent Hugepage Support maximizes the usefulness of free memory
|
Transparent Hugepage Support maximizes the usefulness of free memory
|
||||||
if compared to the reservation approach of hugetlbfs by allowing all
|
if compared to the reservation approach of hugetlbfs by allowing all
|
||||||
|
@ -39,7 +39,6 @@ Table : Subdirectories in /proc/sys/net
|
|||||||
802 E802 protocol ax25 AX25
|
802 E802 protocol ax25 AX25
|
||||||
ethernet Ethernet protocol rose X.25 PLP layer
|
ethernet Ethernet protocol rose X.25 PLP layer
|
||||||
ipv4 IP version 4 x25 X.25 protocol
|
ipv4 IP version 4 x25 X.25 protocol
|
||||||
ipx IPX token-ring IBM token ring
|
|
||||||
bridge Bridging decnet DEC net
|
bridge Bridging decnet DEC net
|
||||||
ipv6 IP version 6 tipc TIPC
|
ipv6 IP version 6 tipc TIPC
|
||||||
========= =================== = ========== ==================
|
========= =================== = ========== ==================
|
||||||
@ -401,33 +400,7 @@ interface.
|
|||||||
(network) that the route leads to, the router (may be directly connected), the
|
(network) that the route leads to, the router (may be directly connected), the
|
||||||
route flags, and the device the route is using.
|
route flags, and the device the route is using.
|
||||||
|
|
||||||
|
5. TIPC
|
||||||
5. IPX
|
|
||||||
------
|
|
||||||
|
|
||||||
The IPX protocol has no tunable values in proc/sys/net.
|
|
||||||
|
|
||||||
The IPX protocol does, however, provide proc/net/ipx. This lists each IPX
|
|
||||||
socket giving the local and remote addresses in Novell format (that is
|
|
||||||
network:node:port). In accordance with the strange Novell tradition,
|
|
||||||
everything but the port is in hex. Not_Connected is displayed for sockets that
|
|
||||||
are not tied to a specific remote address. The Tx and Rx queue sizes indicate
|
|
||||||
the number of bytes pending for transmission and reception. The state
|
|
||||||
indicates the state the socket is in and the uid is the owning uid of the
|
|
||||||
socket.
|
|
||||||
|
|
||||||
The /proc/net/ipx_interface file lists all IPX interfaces. For each interface
|
|
||||||
it gives the network number, the node number, and indicates if the network is
|
|
||||||
the primary network. It also indicates which device it is bound to (or
|
|
||||||
Internal for internal networks) and the Frame Type if appropriate. Linux
|
|
||||||
supports 802.3, 802.2, 802.2 SNAP and DIX (Blue Book) ethernet framing for
|
|
||||||
IPX.
|
|
||||||
|
|
||||||
The /proc/net/ipx_route table holds a list of IPX routes. For each route it
|
|
||||||
gives the destination network, the router node (or Directly) and the network
|
|
||||||
address of the router (or Connected) for internal networks.
|
|
||||||
|
|
||||||
6. TIPC
|
|
||||||
-------
|
-------
|
||||||
|
|
||||||
tipc_rmem
|
tipc_rmem
|
||||||
|
@ -16,6 +16,8 @@ import sys
|
|||||||
import os
|
import os
|
||||||
import sphinx
|
import sphinx
|
||||||
|
|
||||||
|
from subprocess import check_output
|
||||||
|
|
||||||
# Get Sphinx version
|
# Get Sphinx version
|
||||||
major, minor, patch = sphinx.version_info[:3]
|
major, minor, patch = sphinx.version_info[:3]
|
||||||
|
|
||||||
@ -276,10 +278,21 @@ latex_elements = {
|
|||||||
\\setsansfont{DejaVu Sans}
|
\\setsansfont{DejaVu Sans}
|
||||||
\\setromanfont{DejaVu Serif}
|
\\setromanfont{DejaVu Serif}
|
||||||
\\setmonofont{DejaVu Sans Mono}
|
\\setmonofont{DejaVu Sans Mono}
|
||||||
|
|
||||||
'''
|
'''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# At least one book (translations) may have Asian characters
|
||||||
|
# with are only displayed if xeCJK is used
|
||||||
|
|
||||||
|
cjk_cmd = check_output(['fc-list', '--format="%{family[0]}\n"']).decode('utf-8', 'ignore')
|
||||||
|
if cjk_cmd.find("Noto Sans CJK SC") >= 0:
|
||||||
|
print ("enabling CJK for LaTeX builder")
|
||||||
|
latex_elements['preamble'] += '''
|
||||||
|
% This is needed for translations
|
||||||
|
\\usepackage{xeCJK}
|
||||||
|
\\setCJKmainfont{Noto Sans CJK SC}
|
||||||
|
'''
|
||||||
|
|
||||||
# Fix reference escape troubles with Sphinx 1.4.x
|
# Fix reference escape troubles with Sphinx 1.4.x
|
||||||
if major == 1 and minor > 3:
|
if major == 1 and minor > 3:
|
||||||
latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
|
latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
|
||||||
@ -410,6 +423,21 @@ latex_documents = [
|
|||||||
'The kernel development community', 'manual'),
|
'The kernel development community', 'manual'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Add all other index files from Documentation/ subdirectories
|
||||||
|
for fn in os.listdir('.'):
|
||||||
|
doc = os.path.join(fn, "index")
|
||||||
|
if os.path.exists(doc + ".rst"):
|
||||||
|
has = False
|
||||||
|
for l in latex_documents:
|
||||||
|
if l[0] == doc:
|
||||||
|
has = True
|
||||||
|
break
|
||||||
|
if not has:
|
||||||
|
latex_documents.append((doc, fn + '.tex',
|
||||||
|
'Linux %s Documentation' % fn.capitalize(),
|
||||||
|
'The kernel development community',
|
||||||
|
'manual'))
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
# the title page.
|
# the title page.
|
||||||
#latex_logo = None
|
#latex_logo = None
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "Core-API Documentation"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'core-api.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = 'Linux Kernel Crypto API'
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'crypto-api.tex', 'Linux Kernel Crypto API manual',
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "Development tools for the kernel"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'dev-tools.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -19,7 +19,9 @@ quiet_cmd_mk_schema = SCHEMA $@
|
|||||||
|
|
||||||
DT_DOCS = $(shell \
|
DT_DOCS = $(shell \
|
||||||
cd $(srctree)/$(src) && \
|
cd $(srctree)/$(src) && \
|
||||||
find * \( -name '*.yaml' ! -name $(DT_TMP_SCHEMA) \) \
|
find * \( -name '*.yaml' ! \
|
||||||
|
-name $(DT_TMP_SCHEMA) ! \
|
||||||
|
-name '*.example.dt.yaml' \) \
|
||||||
)
|
)
|
||||||
|
|
||||||
DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
|
DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
|
||||||
|
@ -703,4 +703,4 @@ cpus {
|
|||||||
https://www.devicetree.org/specifications/
|
https://www.devicetree.org/specifications/
|
||||||
|
|
||||||
[6] ARM Linux Kernel documentation - Booting AArch64 Linux
|
[6] ARM Linux Kernel documentation - Booting AArch64 Linux
|
||||||
Documentation/arm64/booting.txt
|
Documentation/arm64/booting.rst
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/arm/shmobile.yaml#
|
$id: http://devicetree.org/schemas/arm/renesas.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Renesas SH-Mobile, R-Mobile, and R-Car Platform Device Tree Bindings
|
title: Renesas SH-Mobile, R-Mobile, and R-Car Platform Device Tree Bindings
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/arm/milbeaut.yaml#
|
$id: http://devicetree.org/schemas/arm/socionext/milbeaut.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Milbeaut platforms device tree bindings
|
title: Milbeaut platforms device tree bindings
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/arm/ti/davinci.yaml#
|
$id: http://devicetree.org/schemas/arm/ti/ti,davinci.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Texas Instruments DaVinci Platforms Device Tree Bindings
|
title: Texas Instruments DaVinci Platforms Device Tree Bindings
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/phy/allwinner,sun4i-a10-ccu.yaml#
|
$id: http://devicetree.org/schemas/clock/allwinner,sun4i-a10-ccu.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Allwinner Clock Control Unit Device Tree Bindings
|
title: Allwinner Clock Control Unit Device Tree Bindings
|
||||||
|
88
Documentation/devicetree/bindings/dsp/fsl,dsp.yaml
Normal file
88
Documentation/devicetree/bindings/dsp/fsl,dsp.yaml
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/dsp/fsl,dsp.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: NXP i.MX8 DSP core
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Daniel Baluta <daniel.baluta@nxp.com>
|
||||||
|
|
||||||
|
description: |
|
||||||
|
Some boards from i.MX8 family contain a DSP core used for
|
||||||
|
advanced pre- and post- audio processing.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- fsl,imx8qxp-dsp
|
||||||
|
|
||||||
|
reg:
|
||||||
|
description: Should contain register location and length
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
items:
|
||||||
|
- description: ipg clock
|
||||||
|
- description: ocram clock
|
||||||
|
- description: core clock
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: ipg
|
||||||
|
- const: ocram
|
||||||
|
- const: core
|
||||||
|
|
||||||
|
power-domains:
|
||||||
|
description:
|
||||||
|
List of phandle and PM domain specifier as documented in
|
||||||
|
Documentation/devicetree/bindings/power/power_domain.txt
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
mboxes:
|
||||||
|
description:
|
||||||
|
List of <&phandle type channel> - 2 channels for TXDB, 2 channels for RXDB
|
||||||
|
(see mailbox/fsl,mu.txt)
|
||||||
|
maxItems: 4
|
||||||
|
|
||||||
|
mbox-names:
|
||||||
|
items:
|
||||||
|
- const: txdb0
|
||||||
|
- const: txdb1
|
||||||
|
- const: rxdb0
|
||||||
|
- const: rxdb1
|
||||||
|
|
||||||
|
memory-region:
|
||||||
|
description:
|
||||||
|
phandle to a node describing reserved memory (System RAM memory)
|
||||||
|
used by DSP (see bindings/reserved-memory/reserved-memory.txt)
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- power-domains
|
||||||
|
- mboxes
|
||||||
|
- mbox-names
|
||||||
|
- memory-region
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/firmware/imx/rsrc.h>
|
||||||
|
#include <dt-bindings/clock/imx8-clock.h>
|
||||||
|
dsp@596e8000 {
|
||||||
|
compatible = "fsl,imx8qxp-dsp";
|
||||||
|
reg = <0x596e8000 0x88000>;
|
||||||
|
clocks = <&adma_lpcg IMX_ADMA_LPCG_DSP_IPG_CLK>,
|
||||||
|
<&adma_lpcg IMX_ADMA_LPCG_OCRAM_IPG_CLK>,
|
||||||
|
<&adma_lpcg IMX_ADMA_LPCG_DSP_CORE_CLK>;
|
||||||
|
clock-names = "ipg", "ocram", "core";
|
||||||
|
power-domains = <&pd IMX_SC_R_MU_13A>,
|
||||||
|
<&pd IMX_SC_R_MU_13B>,
|
||||||
|
<&pd IMX_SC_R_DSP>,
|
||||||
|
<&pd IMX_SC_R_DSP_RAM>;
|
||||||
|
mbox-names = "txdb0", "txdb1", "rxdb0", "rxdb1";
|
||||||
|
mboxes = <&lsio_mu13 2 0>, <&lsio_mu13 2 1>, <&lsio_mu13 3 0>, <&lsio_mu13 3 1>;
|
||||||
|
};
|
@ -2,7 +2,7 @@
|
|||||||
# Copyright 2019 Linaro Ltd.
|
# Copyright 2019 Linaro Ltd.
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: "http://devicetree.org/schemas/firmware/intel-ixp4xx-network-processing-engine.yaml#"
|
$id: "http://devicetree.org/schemas/firmware/intel,ixp4xx-network-processing-engine.yaml#"
|
||||||
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||||
|
|
||||||
title: Intel IXP4xx Network Processing Engine
|
title: Intel IXP4xx Network Processing Engine
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/iio/accelerometers/adi,adxl345.yaml#
|
$id: http://devicetree.org/schemas/iio/accel/adi,adxl345.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Analog Devices ADXL345/ADXL375 3-Axis Digital Accelerometers
|
title: Analog Devices ADXL345/ADXL375 3-Axis Digital Accelerometers
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/iio/accelerometers/adi,adxl372.yaml#
|
$id: http://devicetree.org/schemas/iio/accel/adi,adxl372.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Analog Devices ADXL372 3-Axis, +/-(200g) Digital Accelerometer
|
title: Analog Devices ADXL372 3-Axis, +/-(200g) Digital Accelerometer
|
||||||
|
@ -5,21 +5,19 @@ Required properties:
|
|||||||
- compatible: should be "amazon,al-fic"
|
- compatible: should be "amazon,al-fic"
|
||||||
- reg: physical base address and size of the registers
|
- reg: physical base address and size of the registers
|
||||||
- interrupt-controller: identifies the node as an interrupt controller
|
- interrupt-controller: identifies the node as an interrupt controller
|
||||||
- #interrupt-cells: must be 2.
|
- #interrupt-cells : must be 2. Specifies the number of cells needed to encode
|
||||||
First cell defines the index of the interrupt within the controller.
|
an interrupt source. Supported trigger types are low-to-high edge
|
||||||
Second cell is used to specify the trigger type and must be one of the
|
triggered and active high level-sensitive.
|
||||||
following:
|
|
||||||
- bits[3:0] trigger type and level flags
|
|
||||||
1 = low-to-high edge triggered
|
|
||||||
4 = active high level-sensitive
|
|
||||||
- interrupt-parent: specifies the parent interrupt controller.
|
|
||||||
- interrupts: describes which input line in the interrupt parent, this
|
- interrupts: describes which input line in the interrupt parent, this
|
||||||
fic's output is connected to. This field property depends on the parent's
|
fic's output is connected to. This field property depends on the parent's
|
||||||
binding
|
binding
|
||||||
|
|
||||||
|
Please refer to interrupts.txt in this directory for details of the common
|
||||||
|
Interrupt Controllers bindings used by client devices.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
amazon_fic: interrupt-controller@0xfd8a8500 {
|
amazon_fic: interrupt-controller@fd8a8500 {
|
||||||
compatible = "amazon,al-fic";
|
compatible = "amazon,al-fic";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Copyright 2018 Linaro Ltd.
|
# Copyright 2018 Linaro Ltd.
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: "http://devicetree.org/schemas/interrupt/intel-ixp4xx-interrupt.yaml#"
|
$id: "http://devicetree.org/schemas/interrupt-controller/intel,ixp4xx-interrupt.yaml#"
|
||||||
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||||
|
|
||||||
title: Intel IXP4xx XScale Networking Processors Interrupt Controller
|
title: Intel IXP4xx XScale Networking Processors Interrupt Controller
|
||||||
|
@ -1,20 +1,30 @@
|
|||||||
* ARC-HS Interrupt Distribution Unit
|
* ARC-HS Interrupt Distribution Unit
|
||||||
|
|
||||||
This optional 2nd level interrupt controller can be used in SMP configurations for
|
This optional 2nd level interrupt controller can be used in SMP configurations
|
||||||
dynamic IRQ routing, load balancing of common/external IRQs towards core intc.
|
for dynamic IRQ routing, load balancing of common/external IRQs towards core
|
||||||
|
intc.
|
||||||
|
|
||||||
Properties:
|
Properties:
|
||||||
|
|
||||||
- compatible: "snps,archs-idu-intc"
|
- compatible: "snps,archs-idu-intc"
|
||||||
- interrupt-controller: This is an interrupt controller.
|
- interrupt-controller: This is an interrupt controller.
|
||||||
- #interrupt-cells: Must be <1>.
|
- #interrupt-cells: Must be <1> or <2>.
|
||||||
|
|
||||||
Value of the cell specifies the "common" IRQ from peripheral to IDU. Number N
|
Value of the first cell specifies the "common" IRQ from peripheral to IDU.
|
||||||
of the particular interrupt line of IDU corresponds to the line N+24 of the
|
Number N of the particular interrupt line of IDU corresponds to the line N+24
|
||||||
core interrupt controller.
|
of the core interrupt controller.
|
||||||
|
|
||||||
intc accessed via the special ARC AUX register interface, hence "reg" property
|
The (optional) second cell specifies any of the following flags:
|
||||||
is not specified.
|
- bits[3:0] trigger type and level flags
|
||||||
|
1 = low-to-high edge triggered
|
||||||
|
2 = NOT SUPPORTED (high-to-low edge triggered)
|
||||||
|
4 = active high level-sensitive <<< DEFAULT
|
||||||
|
8 = NOT SUPPORTED (active low level-sensitive)
|
||||||
|
When no second cell is specified, the interrupt is assumed to be level
|
||||||
|
sensitive.
|
||||||
|
|
||||||
|
The interrupt controller is accessed via the special ARC AUX register
|
||||||
|
interface, hence "reg" property is not specified.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
core_intc: core-interrupt-controller {
|
core_intc: core-interrupt-controller {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Copyright 2019 Linaro Ltd.
|
# Copyright 2019 Linaro Ltd.
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: "http://devicetree.org/schemas/misc/intel-ixp4xx-ahb-queue-manager.yaml#"
|
$id: "http://devicetree.org/schemas/misc/intel,ixp4xx-ahb-queue-manager.yaml#"
|
||||||
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||||
|
|
||||||
title: Intel IXP4xx AHB Queue Manager
|
title: Intel IXP4xx AHB Queue Manager
|
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/net/allwinner,sun8i-a83t-gmac.yaml#
|
$id: http://devicetree.org/schemas/net/allwinner,sun8i-a83t-emac.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Allwinner A83t EMAC Device Tree Bindings
|
title: Allwinner A83t EMAC Device Tree Bindings
|
||||||
|
@ -12,6 +12,7 @@ Required properties:
|
|||||||
- "microchip,ksz8565"
|
- "microchip,ksz8565"
|
||||||
- "microchip,ksz9893"
|
- "microchip,ksz9893"
|
||||||
- "microchip,ksz9563"
|
- "microchip,ksz9563"
|
||||||
|
- "microchip,ksz8563"
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
|
|
||||||
|
@ -7,18 +7,6 @@ Required properties:
|
|||||||
- phy-mode : See ethernet.txt file in the same directory
|
- phy-mode : See ethernet.txt file in the same directory
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- phy-reset-gpios : Should specify the gpio for phy reset
|
|
||||||
- phy-reset-duration : Reset duration in milliseconds. Should present
|
|
||||||
only if property "phy-reset-gpios" is available. Missing the property
|
|
||||||
will have the duration be 1 millisecond. Numbers greater than 1000 are
|
|
||||||
invalid and 1 millisecond will be used instead.
|
|
||||||
- phy-reset-active-high : If present then the reset sequence using the GPIO
|
|
||||||
specified in the "phy-reset-gpios" property is reversed (H=reset state,
|
|
||||||
L=operation state).
|
|
||||||
- phy-reset-post-delay : Post reset delay in milliseconds. If present then
|
|
||||||
a delay of phy-reset-post-delay milliseconds will be observed after the
|
|
||||||
phy-reset-gpios has been toggled. Can be omitted thus no delay is
|
|
||||||
observed. Delay is in range of 1ms to 1000ms. Other delays are invalid.
|
|
||||||
- phy-supply : regulator that powers the Ethernet PHY.
|
- phy-supply : regulator that powers the Ethernet PHY.
|
||||||
- phy-handle : phandle to the PHY device connected to this device.
|
- phy-handle : phandle to the PHY device connected to this device.
|
||||||
- fixed-link : Assume a fixed link. See fixed-link.txt in the same directory.
|
- fixed-link : Assume a fixed link. See fixed-link.txt in the same directory.
|
||||||
@ -47,11 +35,27 @@ Optional properties:
|
|||||||
For imx6sx, "int0" handles all 3 queues and ENET_MII. "pps" is for the pulse
|
For imx6sx, "int0" handles all 3 queues and ENET_MII. "pps" is for the pulse
|
||||||
per second interrupt associated with 1588 precision time protocol(PTP).
|
per second interrupt associated with 1588 precision time protocol(PTP).
|
||||||
|
|
||||||
|
|
||||||
Optional subnodes:
|
Optional subnodes:
|
||||||
- mdio : specifies the mdio bus in the FEC, used as a container for phy nodes
|
- mdio : specifies the mdio bus in the FEC, used as a container for phy nodes
|
||||||
according to phy.txt in the same directory
|
according to phy.txt in the same directory
|
||||||
|
|
||||||
|
Deprecated optional properties:
|
||||||
|
To avoid these, create a phy node according to phy.txt in the same
|
||||||
|
directory, and point the fec's "phy-handle" property to it. Then use
|
||||||
|
the phy's reset binding, again described by phy.txt.
|
||||||
|
- phy-reset-gpios : Should specify the gpio for phy reset
|
||||||
|
- phy-reset-duration : Reset duration in milliseconds. Should present
|
||||||
|
only if property "phy-reset-gpios" is available. Missing the property
|
||||||
|
will have the duration be 1 millisecond. Numbers greater than 1000 are
|
||||||
|
invalid and 1 millisecond will be used instead.
|
||||||
|
- phy-reset-active-high : If present then the reset sequence using the GPIO
|
||||||
|
specified in the "phy-reset-gpios" property is reversed (H=reset state,
|
||||||
|
L=operation state).
|
||||||
|
- phy-reset-post-delay : Post reset delay in milliseconds. If present then
|
||||||
|
a delay of phy-reset-post-delay milliseconds will be observed after the
|
||||||
|
phy-reset-gpios has been toggled. Can be omitted thus no delay is
|
||||||
|
observed. Delay is in range of 1ms to 1000ms. Other delays are invalid.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
ethernet@83fec000 {
|
ethernet@83fec000 {
|
||||||
|
@ -15,10 +15,10 @@ Required properties:
|
|||||||
Use "atmel,sama5d4-gem" for the GEM IP (10/100) available on Atmel sama5d4 SoCs.
|
Use "atmel,sama5d4-gem" for the GEM IP (10/100) available on Atmel sama5d4 SoCs.
|
||||||
Use "cdns,zynq-gem" Xilinx Zynq-7xxx SoC.
|
Use "cdns,zynq-gem" Xilinx Zynq-7xxx SoC.
|
||||||
Use "cdns,zynqmp-gem" for Zynq Ultrascale+ MPSoC.
|
Use "cdns,zynqmp-gem" for Zynq Ultrascale+ MPSoC.
|
||||||
Use "sifive,fu540-macb" for SiFive FU540-C000 SoC.
|
Use "sifive,fu540-c000-gem" for SiFive FU540-C000 SoC.
|
||||||
Or the generic form: "cdns,emac".
|
Or the generic form: "cdns,emac".
|
||||||
- reg: Address and length of the register set for the device
|
- reg: Address and length of the register set for the device
|
||||||
For "sifive,fu540-macb", second range is required to specify the
|
For "sifive,fu540-c000-gem", second range is required to specify the
|
||||||
address and length of the registers for GEMGXL Management block.
|
address and length of the registers for GEMGXL Management block.
|
||||||
- interrupts: Should contain macb interrupt
|
- interrupts: Should contain macb interrupt
|
||||||
- phy-mode: See ethernet.txt file in the same directory.
|
- phy-mode: See ethernet.txt file in the same directory.
|
||||||
|
@ -37,13 +37,13 @@ required:
|
|||||||
|
|
||||||
examples:
|
examples:
|
||||||
- |
|
- |
|
||||||
sid@1c23800 {
|
efuse@1c23800 {
|
||||||
compatible = "allwinner,sun4i-a10-sid";
|
compatible = "allwinner,sun4i-a10-sid";
|
||||||
reg = <0x01c23800 0x10>;
|
reg = <0x01c23800 0x10>;
|
||||||
};
|
};
|
||||||
|
|
||||||
- |
|
- |
|
||||||
sid@1c23800 {
|
efuse@1c23800 {
|
||||||
compatible = "allwinner,sun7i-a20-sid";
|
compatible = "allwinner,sun7i-a20-sid";
|
||||||
reg = <0x01c23800 0x200>;
|
reg = <0x01c23800 0x200>;
|
||||||
};
|
};
|
||||||
|
45
Documentation/devicetree/bindings/nvmem/nvmem-consumer.yaml
Normal file
45
Documentation/devicetree/bindings/nvmem/nvmem-consumer.yaml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/nvmem/nvmem-consumer.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: NVMEM (Non Volatile Memory) Consumer Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
|
||||||
|
select: true
|
||||||
|
|
||||||
|
properties:
|
||||||
|
nvmem:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||||
|
description:
|
||||||
|
List of phandle to the nvmem providers.
|
||||||
|
|
||||||
|
nvmem-cells:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||||
|
description:
|
||||||
|
List of phandle to the nvmem data cells.
|
||||||
|
|
||||||
|
nvmem-names:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/string-array
|
||||||
|
description:
|
||||||
|
Names for the each nvmem provider.
|
||||||
|
|
||||||
|
nvmem-cell-names:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/string-array
|
||||||
|
description:
|
||||||
|
Names for each nvmem-cells specified.
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
nvmem-names: [ nvmem ]
|
||||||
|
nvmem-cell-names: [ nvmem-cells ]
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
tsens {
|
||||||
|
/* ... */
|
||||||
|
nvmem-cells = <&tsens_calibration>;
|
||||||
|
nvmem-cell-names = "calibration";
|
||||||
|
};
|
@ -1,80 +1 @@
|
|||||||
= NVMEM(Non Volatile Memory) Data Device Tree Bindings =
|
This file has been moved to nvmem.yaml and nvmem-consumer.yaml.
|
||||||
|
|
||||||
This binding is intended to represent the location of hardware
|
|
||||||
configuration data stored in NVMEMs like eeprom, efuses and so on.
|
|
||||||
|
|
||||||
On a significant proportion of boards, the manufacturer has stored
|
|
||||||
some data on NVMEM, for the OS to be able to retrieve these information
|
|
||||||
and act upon it. Obviously, the OS has to know about where to retrieve
|
|
||||||
these data from, and where they are stored on the storage device.
|
|
||||||
|
|
||||||
This document is here to document this.
|
|
||||||
|
|
||||||
= Data providers =
|
|
||||||
Contains bindings specific to provider drivers and data cells as children
|
|
||||||
of this node.
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
read-only: Mark the provider as read only.
|
|
||||||
|
|
||||||
= Data cells =
|
|
||||||
These are the child nodes of the provider which contain data cell
|
|
||||||
information like offset and size in nvmem provider.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
reg: specifies the offset in byte within the storage device.
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
|
|
||||||
bits: Is pair of bit location and number of bits, which specifies offset
|
|
||||||
in bit and number of bits within the address range specified by reg property.
|
|
||||||
Offset takes values from 0-7.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
/* Provider */
|
|
||||||
qfprom: qfprom@700000 {
|
|
||||||
...
|
|
||||||
|
|
||||||
/* Data cells */
|
|
||||||
tsens_calibration: calib@404 {
|
|
||||||
reg = <0x404 0x10>;
|
|
||||||
};
|
|
||||||
|
|
||||||
tsens_calibration_bckp: calib_bckp@504 {
|
|
||||||
reg = <0x504 0x11>;
|
|
||||||
bits = <6 128>
|
|
||||||
};
|
|
||||||
|
|
||||||
pvs_version: pvs-version@6 {
|
|
||||||
reg = <0x6 0x2>
|
|
||||||
bits = <7 2>
|
|
||||||
};
|
|
||||||
|
|
||||||
speed_bin: speed-bin@c{
|
|
||||||
reg = <0xc 0x1>;
|
|
||||||
bits = <2 3>;
|
|
||||||
|
|
||||||
};
|
|
||||||
...
|
|
||||||
};
|
|
||||||
|
|
||||||
= Data consumers =
|
|
||||||
Are device nodes which consume nvmem data cells/providers.
|
|
||||||
|
|
||||||
Required-properties:
|
|
||||||
nvmem-cells: list of phandle to the nvmem data cells.
|
|
||||||
nvmem-cell-names: names for the each nvmem-cells specified. Required if
|
|
||||||
nvmem-cells is used.
|
|
||||||
|
|
||||||
Optional-properties:
|
|
||||||
nvmem : list of phandles to nvmem providers.
|
|
||||||
nvmem-names: names for the each nvmem provider. required if nvmem is used.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
tsens {
|
|
||||||
...
|
|
||||||
nvmem-cells = <&tsens_calibration>;
|
|
||||||
nvmem-cell-names = "calibration";
|
|
||||||
};
|
|
||||||
|
93
Documentation/devicetree/bindings/nvmem/nvmem.yaml
Normal file
93
Documentation/devicetree/bindings/nvmem/nvmem.yaml
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/nvmem/nvmem.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: NVMEM (Non Volatile Memory) Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||||
|
|
||||||
|
description: |
|
||||||
|
This binding is intended to represent the location of hardware
|
||||||
|
configuration data stored in NVMEMs like eeprom, efuses and so on.
|
||||||
|
|
||||||
|
On a significant proportion of boards, the manufacturer has stored
|
||||||
|
some data on NVMEM, for the OS to be able to retrieve these
|
||||||
|
information and act upon it. Obviously, the OS has to know about
|
||||||
|
where to retrieve these data from, and where they are stored on the
|
||||||
|
storage device.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
$nodename:
|
||||||
|
pattern: "^(eeprom|efuse|nvram)(@.*|-[0-9a-f])*$"
|
||||||
|
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
"#size-cells":
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
read-only:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/flag
|
||||||
|
description:
|
||||||
|
Mark the provider as read only.
|
||||||
|
|
||||||
|
patternProperties:
|
||||||
|
"^.*@[0-9a-f]+$":
|
||||||
|
type: object
|
||||||
|
|
||||||
|
properties:
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
Offset and size in bytes within the storage device.
|
||||||
|
|
||||||
|
bits:
|
||||||
|
maxItems: 1
|
||||||
|
items:
|
||||||
|
items:
|
||||||
|
- minimum: 0
|
||||||
|
maximum: 7
|
||||||
|
description:
|
||||||
|
Offset in bit within the address range specified by reg.
|
||||||
|
- minimum: 1
|
||||||
|
description:
|
||||||
|
Size in bit within the address range specified by reg.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- reg
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
qfprom: eeprom@700000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
/* ... */
|
||||||
|
|
||||||
|
/* Data cells */
|
||||||
|
tsens_calibration: calib@404 {
|
||||||
|
reg = <0x404 0x10>;
|
||||||
|
};
|
||||||
|
|
||||||
|
tsens_calibration_bckp: calib_bckp@504 {
|
||||||
|
reg = <0x504 0x11>;
|
||||||
|
bits = <6 128>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pvs_version: pvs-version@6 {
|
||||||
|
reg = <0x6 0x2>;
|
||||||
|
bits = <7 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
speed_bin: speed-bin@c{
|
||||||
|
reg = <0xc 0x1>;
|
||||||
|
bits = <2 3>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
...
|
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://devicetree.org/schemas/display/allwinner,sun6i-a31-mipi-dphy.yaml#
|
$id: http://devicetree.org/schemas/phy/allwinner,sun6i-a31-mipi-dphy.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Allwinner A31 MIPI D-PHY Controller Device Tree Bindings
|
title: Allwinner A31 MIPI D-PHY Controller Device Tree Bindings
|
||||||
|
@ -37,7 +37,8 @@ properties:
|
|||||||
hwlocks: true
|
hwlocks: true
|
||||||
|
|
||||||
st,syscfg:
|
st,syscfg:
|
||||||
$ref: "/schemas/types.yaml#/definitions/phandle-array"
|
allOf:
|
||||||
|
- $ref: "/schemas/types.yaml#/definitions/phandle-array"
|
||||||
description: Should be phandle/offset/mask
|
description: Should be phandle/offset/mask
|
||||||
items:
|
items:
|
||||||
- description: Phandle to the syscon node which includes IRQ mux selection.
|
- description: Phandle to the syscon node which includes IRQ mux selection.
|
||||||
|
@ -1,162 +0,0 @@
|
|||||||
===================
|
|
||||||
RISC-V CPU Bindings
|
|
||||||
===================
|
|
||||||
|
|
||||||
The device tree allows to describe the layout of CPUs in a system through
|
|
||||||
the "cpus" node, which in turn contains a number of subnodes (ie "cpu")
|
|
||||||
defining properties for every cpu.
|
|
||||||
|
|
||||||
Bindings for CPU nodes follow the Devicetree Specification, available from:
|
|
||||||
|
|
||||||
https://www.devicetree.org/specifications/
|
|
||||||
|
|
||||||
with updates for 32-bit and 64-bit RISC-V systems provided in this document.
|
|
||||||
|
|
||||||
===========
|
|
||||||
Terminology
|
|
||||||
===========
|
|
||||||
|
|
||||||
This document uses some terminology common to the RISC-V community that is not
|
|
||||||
widely used, the definitions of which are listed here:
|
|
||||||
|
|
||||||
* hart: A hardware execution context, which contains all the state mandated by
|
|
||||||
the RISC-V ISA: a PC and some registers. This terminology is designed to
|
|
||||||
disambiguate software's view of execution contexts from any particular
|
|
||||||
microarchitectural implementation strategy. For example, my Intel laptop is
|
|
||||||
described as having one socket with two cores, each of which has two hyper
|
|
||||||
threads. Therefore this system has four harts.
|
|
||||||
|
|
||||||
=====================================
|
|
||||||
cpus and cpu node bindings definition
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
The RISC-V architecture, in accordance with the Devicetree Specification,
|
|
||||||
requires the cpus and cpu nodes to be present and contain the properties
|
|
||||||
described below.
|
|
||||||
|
|
||||||
- cpus node
|
|
||||||
|
|
||||||
Description: Container of cpu nodes
|
|
||||||
|
|
||||||
The node name must be "cpus".
|
|
||||||
|
|
||||||
A cpus node must define the following properties:
|
|
||||||
|
|
||||||
- #address-cells
|
|
||||||
Usage: required
|
|
||||||
Value type: <u32>
|
|
||||||
Definition: must be set to 1
|
|
||||||
- #size-cells
|
|
||||||
Usage: required
|
|
||||||
Value type: <u32>
|
|
||||||
Definition: must be set to 0
|
|
||||||
|
|
||||||
- cpu node
|
|
||||||
|
|
||||||
Description: Describes a hart context
|
|
||||||
|
|
||||||
PROPERTIES
|
|
||||||
|
|
||||||
- device_type
|
|
||||||
Usage: required
|
|
||||||
Value type: <string>
|
|
||||||
Definition: must be "cpu"
|
|
||||||
- reg
|
|
||||||
Usage: required
|
|
||||||
Value type: <u32>
|
|
||||||
Definition: The hart ID of this CPU node
|
|
||||||
- compatible:
|
|
||||||
Usage: required
|
|
||||||
Value type: <stringlist>
|
|
||||||
Definition: must contain "riscv", may contain one of
|
|
||||||
"sifive,rocket0"
|
|
||||||
- mmu-type:
|
|
||||||
Usage: optional
|
|
||||||
Value type: <string>
|
|
||||||
Definition: Specifies the CPU's MMU type. Possible values are
|
|
||||||
"riscv,sv32"
|
|
||||||
"riscv,sv39"
|
|
||||||
"riscv,sv48"
|
|
||||||
- riscv,isa:
|
|
||||||
Usage: required
|
|
||||||
Value type: <string>
|
|
||||||
Definition: Contains the RISC-V ISA string of this hart. These
|
|
||||||
ISA strings are defined by the RISC-V ISA manual.
|
|
||||||
|
|
||||||
Example: SiFive Freedom U540G Development Kit
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
This system contains two harts: a hart marked as disabled that's used for
|
|
||||||
low-level system tasks and should be ignored by Linux, and a second hart that
|
|
||||||
Linux is allowed to run on.
|
|
||||||
|
|
||||||
cpus {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
timebase-frequency = <1000000>;
|
|
||||||
cpu@0 {
|
|
||||||
clock-frequency = <1600000000>;
|
|
||||||
compatible = "sifive,rocket0", "riscv";
|
|
||||||
device_type = "cpu";
|
|
||||||
i-cache-block-size = <64>;
|
|
||||||
i-cache-sets = <128>;
|
|
||||||
i-cache-size = <16384>;
|
|
||||||
next-level-cache = <&L15 &L0>;
|
|
||||||
reg = <0>;
|
|
||||||
riscv,isa = "rv64imac";
|
|
||||||
status = "disabled";
|
|
||||||
L10: interrupt-controller {
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
compatible = "riscv,cpu-intc";
|
|
||||||
interrupt-controller;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
cpu@1 {
|
|
||||||
clock-frequency = <1600000000>;
|
|
||||||
compatible = "sifive,rocket0", "riscv";
|
|
||||||
d-cache-block-size = <64>;
|
|
||||||
d-cache-sets = <64>;
|
|
||||||
d-cache-size = <32768>;
|
|
||||||
d-tlb-sets = <1>;
|
|
||||||
d-tlb-size = <32>;
|
|
||||||
device_type = "cpu";
|
|
||||||
i-cache-block-size = <64>;
|
|
||||||
i-cache-sets = <64>;
|
|
||||||
i-cache-size = <32768>;
|
|
||||||
i-tlb-sets = <1>;
|
|
||||||
i-tlb-size = <32>;
|
|
||||||
mmu-type = "riscv,sv39";
|
|
||||||
next-level-cache = <&L15 &L0>;
|
|
||||||
reg = <1>;
|
|
||||||
riscv,isa = "rv64imafdc";
|
|
||||||
status = "okay";
|
|
||||||
tlb-split;
|
|
||||||
L13: interrupt-controller {
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
compatible = "riscv,cpu-intc";
|
|
||||||
interrupt-controller;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
Example: Spike ISA Simulator with 1 Hart
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
This device tree matches the Spike ISA golden model as run with `spike -p1`.
|
|
||||||
|
|
||||||
cpus {
|
|
||||||
cpu@0 {
|
|
||||||
device_type = "cpu";
|
|
||||||
reg = <0x00000000>;
|
|
||||||
status = "okay";
|
|
||||||
compatible = "riscv";
|
|
||||||
riscv,isa = "rv64imafdc";
|
|
||||||
mmu-type = "riscv,sv48";
|
|
||||||
clock-frequency = <0x3b9aca00>;
|
|
||||||
interrupt-controller {
|
|
||||||
#interrupt-cells = <0x00000001>;
|
|
||||||
interrupt-controller;
|
|
||||||
compatible = "riscv,cpu-intc";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,18 @@ maintainers:
|
|||||||
- Paul Walmsley <paul.walmsley@sifive.com>
|
- Paul Walmsley <paul.walmsley@sifive.com>
|
||||||
- Palmer Dabbelt <palmer@sifive.com>
|
- Palmer Dabbelt <palmer@sifive.com>
|
||||||
|
|
||||||
|
description: |
|
||||||
|
This document uses some terminology common to the RISC-V community
|
||||||
|
that is not widely used, the definitions of which are listed here:
|
||||||
|
|
||||||
|
hart: A hardware execution context, which contains all the state
|
||||||
|
mandated by the RISC-V ISA: a PC and some registers. This
|
||||||
|
terminology is designed to disambiguate software's view of execution
|
||||||
|
contexts from any particular microarchitectural implementation
|
||||||
|
strategy. For example, an Intel laptop containing one socket with
|
||||||
|
two cores, each of which has two hyperthreads, could be described as
|
||||||
|
having four harts.
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
items:
|
items:
|
||||||
@ -50,6 +62,10 @@ properties:
|
|||||||
User-Level ISA document, available from
|
User-Level ISA document, available from
|
||||||
https://riscv.org/specifications/
|
https://riscv.org/specifications/
|
||||||
|
|
||||||
|
While the isa strings in ISA specification are case
|
||||||
|
insensitive, letters in the riscv,isa string must be all
|
||||||
|
lowercase to simplify parsing.
|
||||||
|
|
||||||
timebase-frequency:
|
timebase-frequency:
|
||||||
type: integer
|
type: integer
|
||||||
minimum: 1
|
minimum: 1
|
||||||
|
@ -19,7 +19,7 @@ properties:
|
|||||||
compatible:
|
compatible:
|
||||||
items:
|
items:
|
||||||
- enum:
|
- enum:
|
||||||
- sifive,freedom-unleashed-a00
|
- sifive,hifive-unleashed-a00
|
||||||
- const: sifive,fu540-c000
|
- const: sifive,fu540-c000
|
||||||
- const: sifive,fu540
|
- const: sifive,fu540
|
||||||
...
|
...
|
||||||
|
@ -70,7 +70,9 @@ allOf:
|
|||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
contains:
|
contains:
|
||||||
const: allwinner,sun8i-h3-spdif
|
enum:
|
||||||
|
- allwinner,sun8i-h3-spdif
|
||||||
|
- allwinner,sun50i-h6-spdif
|
||||||
|
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/sound/allwinner,sun50i-a64-codec-analog.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Allwinner A64 Analog Codec Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Chen-Yu Tsai <wens@csie.org>
|
||||||
|
- Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun50i-a64-codec-analog
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
cpvdd-supply:
|
||||||
|
description:
|
||||||
|
Regulator for the headphone amplifier
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- cpvdd-supply
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
codec_analog: codec-analog@1f015c0 {
|
||||||
|
compatible = "allwinner,sun50i-a64-codec-analog";
|
||||||
|
reg = <0x01f015c0 0x4>;
|
||||||
|
cpvdd-supply = <®_eldo1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
...
|
@ -0,0 +1,57 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/sound/allwinner,sun8i-a33-codec.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Allwinner A33 Codec Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Chen-Yu Tsai <wens@csie.org>
|
||||||
|
- Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
"#sound-dai-cells":
|
||||||
|
const: 0
|
||||||
|
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun8i-a33-codec
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
items:
|
||||||
|
- description: Bus Clock
|
||||||
|
- description: Module Clock
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: bus
|
||||||
|
- const: mod
|
||||||
|
|
||||||
|
required:
|
||||||
|
- "#sound-dai-cells"
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
audio-codec@1c22e00 {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "allwinner,sun8i-a33-codec";
|
||||||
|
reg = <0x01c22e00 0x400>;
|
||||||
|
interrupts = <0 29 4>;
|
||||||
|
clocks = <&ccu 47>, <&ccu 92>;
|
||||||
|
clock-names = "bus", "mod";
|
||||||
|
};
|
||||||
|
|
||||||
|
...
|
@ -4,13 +4,18 @@ Required properties:
|
|||||||
- compatible: 'amlogic,axg-toddr' or
|
- compatible: 'amlogic,axg-toddr' or
|
||||||
'amlogic,axg-toddr' or
|
'amlogic,axg-toddr' or
|
||||||
'amlogic,g12a-frddr' or
|
'amlogic,g12a-frddr' or
|
||||||
'amlogic,g12a-toddr'
|
'amlogic,g12a-toddr' or
|
||||||
|
'amlogic,sm1-frddr' or
|
||||||
|
'amlogic,sm1-toddr'
|
||||||
- reg: physical base address of the controller and length of memory
|
- reg: physical base address of the controller and length of memory
|
||||||
mapped region.
|
mapped region.
|
||||||
- interrupts: interrupt specifier for the fifo.
|
- interrupts: interrupt specifier for the fifo.
|
||||||
- clocks: phandle to the fifo peripheral clock provided by the audio
|
- clocks: phandle to the fifo peripheral clock provided by the audio
|
||||||
clock controller.
|
clock controller.
|
||||||
- resets: phandle to memory ARB line provided by the arb reset controller.
|
- resets: list of reset phandle, one for each entry reset-names.
|
||||||
|
- reset-names: should contain the following:
|
||||||
|
* "arb" : memory ARB line (required)
|
||||||
|
* "rst" : dedicated device reset line (optional)
|
||||||
- #sound-dai-cells: must be 0.
|
- #sound-dai-cells: must be 0.
|
||||||
|
|
||||||
Example of FRDDR A on the A113 SoC:
|
Example of FRDDR A on the A113 SoC:
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: 'amlogic,axg-pdm' or
|
- compatible: 'amlogic,axg-pdm' or
|
||||||
'amlogic,g12a-pdm'
|
'amlogic,g12a-pdm' or
|
||||||
|
'amlogic,sm1-pdm'
|
||||||
- reg: physical base address of the controller and length of memory
|
- reg: physical base address of the controller and length of memory
|
||||||
mapped region.
|
mapped region.
|
||||||
- clocks: list of clock phandle, one for each entry clock-names.
|
- clocks: list of clock phandle, one for each entry clock-names.
|
||||||
@ -12,6 +13,9 @@ Required properties:
|
|||||||
* "sysclk" : dsp system clock
|
* "sysclk" : dsp system clock
|
||||||
- #sound-dai-cells: must be 0.
|
- #sound-dai-cells: must be 0.
|
||||||
|
|
||||||
|
Optional property:
|
||||||
|
- resets: phandle to the dedicated reset line of the pdm input.
|
||||||
|
|
||||||
Example of PDM on the A113 SoC:
|
Example of PDM on the A113 SoC:
|
||||||
|
|
||||||
pdm: audio-controller@ff632000 {
|
pdm: audio-controller@ff632000 {
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: 'amlogic,axg-spdifin' or
|
- compatible: 'amlogic,axg-spdifin' or
|
||||||
'amlogic,g12a-spdifin'
|
'amlogic,g12a-spdifin' or
|
||||||
|
'amlogic,sm1-spdifin'
|
||||||
- interrupts: interrupt specifier for the spdif input.
|
- interrupts: interrupt specifier for the spdif input.
|
||||||
- clocks: list of clock phandle, one for each entry clock-names.
|
- clocks: list of clock phandle, one for each entry clock-names.
|
||||||
- clock-names: should contain the following:
|
- clock-names: should contain the following:
|
||||||
@ -10,6 +11,9 @@ Required properties:
|
|||||||
* "refclk" : spdif input reference clock
|
* "refclk" : spdif input reference clock
|
||||||
- #sound-dai-cells: must be 0.
|
- #sound-dai-cells: must be 0.
|
||||||
|
|
||||||
|
Optional property:
|
||||||
|
- resets: phandle to the dedicated reset line of the spdif input.
|
||||||
|
|
||||||
Example on the A113 SoC:
|
Example on the A113 SoC:
|
||||||
|
|
||||||
spdifin: audio-controller@400 {
|
spdifin: audio-controller@400 {
|
||||||
|
@ -2,13 +2,17 @@
|
|||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: 'amlogic,axg-spdifout' or
|
- compatible: 'amlogic,axg-spdifout' or
|
||||||
'amlogic,g12a-spdifout'
|
'amlogic,g12a-spdifout' or
|
||||||
|
'amlogic,sm1-spdifout'
|
||||||
- clocks: list of clock phandle, one for each entry clock-names.
|
- clocks: list of clock phandle, one for each entry clock-names.
|
||||||
- clock-names: should contain the following:
|
- clock-names: should contain the following:
|
||||||
* "pclk" : peripheral clock.
|
* "pclk" : peripheral clock.
|
||||||
* "mclk" : master clock
|
* "mclk" : master clock
|
||||||
- #sound-dai-cells: must be 0.
|
- #sound-dai-cells: must be 0.
|
||||||
|
|
||||||
|
Optional property:
|
||||||
|
- resets: phandle to the dedicated reset line of the spdif output.
|
||||||
|
|
||||||
Example on the A113 SoC:
|
Example on the A113 SoC:
|
||||||
|
|
||||||
spdifout: audio-controller@480 {
|
spdifout: audio-controller@480 {
|
||||||
|
@ -4,7 +4,9 @@ Required properties:
|
|||||||
- compatible: 'amlogic,axg-tdmin' or
|
- compatible: 'amlogic,axg-tdmin' or
|
||||||
'amlogic,axg-tdmout' or
|
'amlogic,axg-tdmout' or
|
||||||
'amlogic,g12a-tdmin' or
|
'amlogic,g12a-tdmin' or
|
||||||
'amlogic,g12a-tdmout'
|
'amlogic,g12a-tdmout' or
|
||||||
|
'amlogic,sm1-tdmin' or
|
||||||
|
'amlogic,sm1-tdmout
|
||||||
- reg: physical base address of the controller and length of memory
|
- reg: physical base address of the controller and length of memory
|
||||||
mapped region.
|
mapped region.
|
||||||
- clocks: list of clock phandle, one for each entry clock-names.
|
- clocks: list of clock phandle, one for each entry clock-names.
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
* Amlogic HDMI Tx control glue
|
* Amlogic HDMI Tx control glue
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: "amlogic,g12a-tohdmitx"
|
- compatible: "amlogic,g12a-tohdmitx" or
|
||||||
|
"amlogic,sm1-tohdmitx"
|
||||||
- reg: physical base address of the controller and length of memory
|
- reg: physical base address of the controller and length of memory
|
||||||
mapped region.
|
mapped region.
|
||||||
- #sound-dai-cells: should be 1.
|
- #sound-dai-cells: should be 1.
|
||||||
|
- resets: phandle to the dedicated reset line of the hdmitx glue.
|
||||||
|
|
||||||
Example on the S905X2 SoC:
|
Example on the S905X2 SoC:
|
||||||
|
|
||||||
@ -12,6 +14,7 @@ tohdmitx: audio-controller@744 {
|
|||||||
compatible = "amlogic,g12a-tohdmitx";
|
compatible = "amlogic,g12a-tohdmitx";
|
||||||
reg = <0x0 0x744 0x0 0x4>;
|
reg = <0x0 0x744 0x0 0x4>;
|
||||||
#sound-dai-cells = <1>;
|
#sound-dai-cells = <1>;
|
||||||
|
resets = <&clkc_audio AUD_RESET_TOHDMITX>;
|
||||||
};
|
};
|
||||||
|
|
||||||
Example of an 'amlogic,axg-sound-card':
|
Example of an 'amlogic,axg-sound-card':
|
||||||
|
23
Documentation/devicetree/bindings/sound/everest,es8316.txt
Normal file
23
Documentation/devicetree/bindings/sound/everest,es8316.txt
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
Everest ES8316 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : should be "everest,es8316"
|
||||||
|
- reg : the I2C address of the device for I2C
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
|
||||||
|
- clocks : a list of phandle, should contain entries for clock-names
|
||||||
|
- clock-names : should include as follows:
|
||||||
|
"mclk" : master clock (MCLK) of the device
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
es8316: codec@11 {
|
||||||
|
compatible = "everest,es8316";
|
||||||
|
reg = <0x11>;
|
||||||
|
clocks = <&clks 10>;
|
||||||
|
clock-names = "mclk";
|
||||||
|
};
|
@ -7,8 +7,11 @@ other DSPs. It has up to six transmitters and four receivers.
|
|||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
|
|
||||||
- compatible : Compatible list, must contain "fsl,imx35-esai" or
|
- compatible : Compatible list, should contain one of the following
|
||||||
"fsl,vf610-esai"
|
compatibles:
|
||||||
|
"fsl,imx35-esai",
|
||||||
|
"fsl,vf610-esai",
|
||||||
|
"fsl,imx6ull-esai",
|
||||||
|
|
||||||
- reg : Offset and length of the register set for the device.
|
- reg : Offset and length of the register set for the device.
|
||||||
|
|
||||||
|
@ -8,7 +8,9 @@ codec/DSP interfaces.
|
|||||||
Required properties:
|
Required properties:
|
||||||
|
|
||||||
- compatible : Compatible list, contains "fsl,vf610-sai",
|
- compatible : Compatible list, contains "fsl,vf610-sai",
|
||||||
"fsl,imx6sx-sai" or "fsl,imx6ul-sai"
|
"fsl,imx6sx-sai", "fsl,imx6ul-sai",
|
||||||
|
"fsl,imx7ulp-sai", "fsl,imx8mq-sai" or
|
||||||
|
"fsl,imx8qm-sai".
|
||||||
|
|
||||||
- reg : Offset and length of the register set for the device.
|
- reg : Offset and length of the register set for the device.
|
||||||
|
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
* Allwinner A64 Codec Analog Controls
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: must be one of the following compatibles:
|
|
||||||
- "allwinner,sun50i-a64-codec-analog"
|
|
||||||
- reg: must contain the registers location and length
|
|
||||||
- cpvdd-supply: Regulator supply for the headphone amplifier
|
|
||||||
|
|
||||||
Example:
|
|
||||||
codec_analog: codec-analog@1f015c0 {
|
|
||||||
compatible = "allwinner,sun50i-a64-codec-analog";
|
|
||||||
reg = <0x01f015c0 0x4>;
|
|
||||||
cpvdd-supply = <®_eldo1>;
|
|
||||||
};
|
|
@ -1,63 +0,0 @@
|
|||||||
Allwinner SUN8I audio codec
|
|
||||||
------------------------------------
|
|
||||||
|
|
||||||
On Sun8i-A33 SoCs, the audio is separated in different parts:
|
|
||||||
- A DAI driver. It uses the "sun4i-i2s" driver which is
|
|
||||||
documented here:
|
|
||||||
Documentation/devicetree/bindings/sound/sun4i-i2s.txt
|
|
||||||
- An analog part of the codec which is handled as PRCM registers.
|
|
||||||
See Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
|
|
||||||
- An digital part of the codec which is documented in this current
|
|
||||||
binding documentation.
|
|
||||||
- And finally, an audio card which links all the above components.
|
|
||||||
The simple-audio card will be used.
|
|
||||||
See Documentation/devicetree/bindings/sound/simple-card.txt
|
|
||||||
|
|
||||||
This bindings documentation exposes Sun8i codec (digital part).
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: must be "allwinner,sun8i-a33-codec"
|
|
||||||
- reg: must contain the registers location and length
|
|
||||||
- interrupts: must contain the codec interrupt
|
|
||||||
- clocks: a list of phandle + clock-specifer pairs, one for each entry
|
|
||||||
in clock-names.
|
|
||||||
- clock-names: should contain followings:
|
|
||||||
- "bus": the parent APB clock for this controller
|
|
||||||
- "mod": the parent module clock
|
|
||||||
|
|
||||||
Here is an example to add a sound card and the codec binding on sun8i SoCs that
|
|
||||||
are similar to A33 using simple-card:
|
|
||||||
|
|
||||||
sound {
|
|
||||||
compatible = "simple-audio-card";
|
|
||||||
simple-audio-card,name = "sun8i-a33-audio";
|
|
||||||
simple-audio-card,format = "i2s";
|
|
||||||
simple-audio-card,frame-master = <&link_codec>;
|
|
||||||
simple-audio-card,bitclock-master = <&link_codec>;
|
|
||||||
simple-audio-card,mclk-fs = <512>;
|
|
||||||
simple-audio-card,aux-devs = <&codec_analog>;
|
|
||||||
simple-audio-card,routing =
|
|
||||||
"Left DAC", "Digital Left DAC",
|
|
||||||
"Right DAC", "Digital Right DAC";
|
|
||||||
|
|
||||||
simple-audio-card,cpu {
|
|
||||||
sound-dai = <&dai>;
|
|
||||||
};
|
|
||||||
|
|
||||||
link_codec: simple-audio-card,codec {
|
|
||||||
sound-dai = <&codec>;
|
|
||||||
};
|
|
||||||
|
|
||||||
soc@1c00000 {
|
|
||||||
[...]
|
|
||||||
|
|
||||||
audio-codec@1c22e00 {
|
|
||||||
#sound-dai-cells = <0>;
|
|
||||||
compatible = "allwinner,sun8i-a33-codec";
|
|
||||||
reg = <0x01c22e00 0x400>;
|
|
||||||
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
|
|
||||||
clock-names = "bus", "mod";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
17
Documentation/devicetree/bindings/sound/uda1334.txt
Normal file
17
Documentation/devicetree/bindings/sound/uda1334.txt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
UDA1334 audio CODEC
|
||||||
|
|
||||||
|
This device uses simple GPIO pins for controlling codec settings.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "nxp,uda1334"
|
||||||
|
- nxp,mute-gpios: a GPIO spec for the MUTE pin.
|
||||||
|
- nxp,deemph-gpios: a GPIO spec for the De-emphasis pin
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
uda1334: audio-codec {
|
||||||
|
compatible = "nxp,uda1334";
|
||||||
|
nxp,mute-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
|
||||||
|
nxp,deemph-gpios = <&gpio3 3 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
@ -73,7 +73,6 @@ patternProperties:
|
|||||||
Compatible of the SPI device.
|
Compatible of the SPI device.
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
|
||||||
minimum: 0
|
minimum: 0
|
||||||
maximum: 256
|
maximum: 256
|
||||||
description:
|
description:
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Copyright 2018 Linaro Ltd.
|
# Copyright 2018 Linaro Ltd.
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: "http://devicetree.org/schemas/timer/intel-ixp4xx-timer.yaml#"
|
$id: "http://devicetree.org/schemas/timer/intel,ixp4xx-timer.yaml#"
|
||||||
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||||
|
|
||||||
title: Intel IXP4xx XScale Networking Processors Timers
|
title: Intel IXP4xx XScale Networking Processors Timers
|
||||||
|
@ -64,10 +64,8 @@ Optional properties :
|
|||||||
- power-on-time-ms : Specifies the time it takes from the time the host
|
- power-on-time-ms : Specifies the time it takes from the time the host
|
||||||
initiates the power-on sequence to a port until the port has adequate
|
initiates the power-on sequence to a port until the port has adequate
|
||||||
power. The value is given in ms in a 0 - 510 range (default is 100ms).
|
power. The value is given in ms in a 0 - 510 range (default is 100ms).
|
||||||
- swap-dx-lanes : Specifies the downstream ports which will swap the
|
- swap-dx-lanes : Specifies the ports which will swap the differential-pair
|
||||||
differential-pair (D+/D-), default is not-swapped.
|
(D+/D-), default is not-swapped.
|
||||||
- swap-us-lanes : Selects the upstream port differential-pair (D+/D-)
|
|
||||||
swapping (boolean, default is not-swapped)
|
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
usb2512b@2c {
|
usb2512b@2c {
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = 'Linux Kernel Documentation Guide'
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'kernel-doc-guide.tex', 'Linux Kernel Documentation Guide',
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "Linux 802.11 Driver Developer's Guide"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', '80211.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "The Linux driver implementer's API guide"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'driver-api.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -233,7 +233,7 @@ Userspace Interface
|
|||||||
Several sysfs attributes are generated by the Generic Counter interface,
|
Several sysfs attributes are generated by the Generic Counter interface,
|
||||||
and reside under the /sys/bus/counter/devices/counterX directory, where
|
and reside under the /sys/bus/counter/devices/counterX directory, where
|
||||||
counterX refers to the respective counter device. Please see
|
counterX refers to the respective counter device. Please see
|
||||||
Documentation/ABI/testing/sys-bus-counter-generic-sysfs for detailed
|
Documentation/ABI/testing/sysfs-bus-counter for detailed
|
||||||
information on each Generic Counter interface sysfs attribute.
|
information on each Generic Counter interface sysfs attribute.
|
||||||
|
|
||||||
Through these sysfs attributes, programs and scripts may interact with
|
Through these sysfs attributes, programs and scripts may interact with
|
||||||
@ -325,7 +325,7 @@ sysfs attributes, where Y is the unique ID of the respective Count:
|
|||||||
|
|
||||||
For a more detailed breakdown of the available Generic Counter interface
|
For a more detailed breakdown of the available Generic Counter interface
|
||||||
sysfs attributes, please refer to the
|
sysfs attributes, please refer to the
|
||||||
Documentation/ABI/testing/sys-bus-counter file.
|
Documentation/ABI/testing/sysfs-bus-counter file.
|
||||||
|
|
||||||
The Signals and Counts associated with the Counter device are registered
|
The Signals and Counts associated with the Counter device are registered
|
||||||
to the system as well by the counter_register function. The
|
to the system as well by the counter_register function. The
|
||||||
|
@ -179,8 +179,8 @@ PHY Mappings
|
|||||||
|
|
||||||
In order to get reference to a PHY without help from DeviceTree, the framework
|
In order to get reference to a PHY without help from DeviceTree, the framework
|
||||||
offers lookups which can be compared to clkdev that allow clk structures to be
|
offers lookups which can be compared to clkdev that allow clk structures to be
|
||||||
bound to devices. A lookup can be made be made during runtime when a handle to
|
bound to devices. A lookup can be made during runtime when a handle to the
|
||||||
the struct phy already exists.
|
struct phy already exists.
|
||||||
|
|
||||||
The framework offers the following API for registering and unregistering the
|
The framework offers the following API for registering and unregistering the
|
||||||
lookups::
|
lookups::
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "Device Power Management"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'pm.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -13,7 +13,8 @@ a) SMB3 (and SMB3.1.1) missing optional features:
|
|||||||
- T10 copy offload ie "ODX" (copy chunk, and "Duplicate Extents" ioctl
|
- T10 copy offload ie "ODX" (copy chunk, and "Duplicate Extents" ioctl
|
||||||
currently the only two server side copy mechanisms supported)
|
currently the only two server side copy mechanisms supported)
|
||||||
|
|
||||||
b) improved sparse file support
|
b) improved sparse file support (fiemap and SEEK_HOLE are implemented
|
||||||
|
but additional features would be supportable by the protocol).
|
||||||
|
|
||||||
c) Directory entry caching relies on a 1 second timer, rather than
|
c) Directory entry caching relies on a 1 second timer, rather than
|
||||||
using Directory Leases, currently only the root file handle is cached longer
|
using Directory Leases, currently only the root file handle is cached longer
|
||||||
@ -21,9 +22,13 @@ using Directory Leases, currently only the root file handle is cached longer
|
|||||||
d) quota support (needs minor kernel change since quota calls
|
d) quota support (needs minor kernel change since quota calls
|
||||||
to make it to network filesystems or deviceless filesystems)
|
to make it to network filesystems or deviceless filesystems)
|
||||||
|
|
||||||
e) Additional use cases where we use "compoounding" (e.g. open/query/close
|
e) Additional use cases can be optimized to use "compounding"
|
||||||
and open/setinfo/close) to reduce the number of roundtrips, and also
|
(e.g. open/query/close and open/setinfo/close) to reduce the number
|
||||||
open to reduce redundant opens (using deferred close and reference counts more).
|
of roundtrips to the server and improve performance. Various cases
|
||||||
|
(stat, statfs, create, unlink, mkdir) already have been improved by
|
||||||
|
using compounding but more can be done. In addition we could significantly
|
||||||
|
reduce redundant opens by using deferred close (with handle caching leases)
|
||||||
|
and better using reference counters on file handles.
|
||||||
|
|
||||||
f) Finish inotify support so kde and gnome file list windows
|
f) Finish inotify support so kde and gnome file list windows
|
||||||
will autorefresh (partially complete by Asser). Needs minor kernel
|
will autorefresh (partially complete by Asser). Needs minor kernel
|
||||||
@ -43,18 +48,17 @@ mount or a per server basis to client UIDs or nobody if no mapping
|
|||||||
exists. Also better integration with winbind for resolving SID owners
|
exists. Also better integration with winbind for resolving SID owners
|
||||||
|
|
||||||
k) Add tools to take advantage of more smb3 specific ioctls and features
|
k) Add tools to take advantage of more smb3 specific ioctls and features
|
||||||
(passthrough ioctl/fsctl for sending various SMB3 fsctls to the server
|
(passthrough ioctl/fsctl is now implemented in cifs.ko to allow sending
|
||||||
is in progress, and a passthrough query_info call is already implemented
|
various SMB3 fsctls and query info and set info calls directly from user space)
|
||||||
in cifs.ko to allow smb3 info levels queries to be sent from userspace)
|
Add tools to make setting various non-POSIX metadata attributes easier
|
||||||
|
from tools (e.g. extending what was done in smb-info tool).
|
||||||
|
|
||||||
l) encrypted file support
|
l) encrypted file support
|
||||||
|
|
||||||
m) improved stats gathering tools (perhaps integration with nfsometer?)
|
m) improved stats gathering tools (perhaps integration with nfsometer?)
|
||||||
to extend and make easier to use what is currently in /proc/fs/cifs/Stats
|
to extend and make easier to use what is currently in /proc/fs/cifs/Stats
|
||||||
|
|
||||||
n) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
|
n) Add support for claims based ACLs ("DAC")
|
||||||
file attribute via chflags) and improve user space tools for managing and
|
|
||||||
viewing them.
|
|
||||||
|
|
||||||
o) mount helper GUI (to simplify the various configuration options on mount)
|
o) mount helper GUI (to simplify the various configuration options on mount)
|
||||||
|
|
||||||
@ -82,6 +86,8 @@ so far).
|
|||||||
w) Add support for additional strong encryption types, and additional spnego
|
w) Add support for additional strong encryption types, and additional spnego
|
||||||
authentication mechanisms (see MS-SMB2)
|
authentication mechanisms (see MS-SMB2)
|
||||||
|
|
||||||
|
x) Finish support for SMB3.1.1 compression
|
||||||
|
|
||||||
KNOWN BUGS
|
KNOWN BUGS
|
||||||
====================================
|
====================================
|
||||||
See http://bugzilla.samba.org - search on product "CifsVFS" for
|
See http://bugzilla.samba.org - search on product "CifsVFS" for
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "Linux Filesystems API"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'filesystems.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "Linux GPU Driver Developer's Guide"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'gpu.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -9,7 +9,7 @@ Supported chips:
|
|||||||
|
|
||||||
Addresses scanned: PCI space
|
Addresses scanned: PCI space
|
||||||
|
|
||||||
Datasheet: http://support.amd.com/us/Processor_TechDocs/32559.pdf
|
Datasheet: http://www.amd.com/system/files/TechDocs/32559.pdf
|
||||||
|
|
||||||
Author: Rudolf Marek
|
Author: Rudolf Marek
|
||||||
|
|
||||||
|
@ -111,9 +111,11 @@ needed).
|
|||||||
netlabel/index
|
netlabel/index
|
||||||
networking/index
|
networking/index
|
||||||
pcmcia/index
|
pcmcia/index
|
||||||
|
power/index
|
||||||
target/index
|
target/index
|
||||||
timers/index
|
timers/index
|
||||||
watchdog/index
|
watchdog/index
|
||||||
|
virtual/index
|
||||||
input/index
|
input/index
|
||||||
hwmon/index
|
hwmon/index
|
||||||
gpu/index
|
gpu/index
|
||||||
@ -143,6 +145,7 @@ implementation.
|
|||||||
arm64/index
|
arm64/index
|
||||||
ia64/index
|
ia64/index
|
||||||
m68k/index
|
m68k/index
|
||||||
|
powerpc/index
|
||||||
riscv/index
|
riscv/index
|
||||||
s390/index
|
s390/index
|
||||||
sh/index
|
sh/index
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "The Linux input driver subsystem"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'linux-input.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "Kernel Hacking Guides"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'kernel-hacking.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -82,7 +82,7 @@ itself. The read lock allows many concurrent readers. Anything that
|
|||||||
**changes** the list will have to get the write lock.
|
**changes** the list will have to get the write lock.
|
||||||
|
|
||||||
NOTE! RCU is better for list traversal, but requires careful
|
NOTE! RCU is better for list traversal, but requires careful
|
||||||
attention to design detail (see Documentation/RCU/listRCU.txt).
|
attention to design detail (see Documentation/RCU/listRCU.rst).
|
||||||
|
|
||||||
Also, you cannot "upgrade" a read-lock to a write-lock, so if you at _any_
|
Also, you cannot "upgrade" a read-lock to a write-lock, so if you at _any_
|
||||||
time need to do any changes (even if you don't do it every time), you have
|
time need to do any changes (even if you don't do it every time), you have
|
||||||
@ -90,7 +90,7 @@ to get the write-lock at the very beginning.
|
|||||||
|
|
||||||
NOTE! We are working hard to remove reader-writer spinlocks in most
|
NOTE! We are working hard to remove reader-writer spinlocks in most
|
||||||
cases, so please don't add a new one without consensus. (Instead, see
|
cases, so please don't add a new one without consensus. (Instead, see
|
||||||
Documentation/RCU/rcu.txt for complete information.)
|
Documentation/RCU/rcu.rst for complete information.)
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = 'Linux Kernel Development Documentation'
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'maintainer.tex', 'Linux Kernel Development Documentation',
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -1,12 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
|
||||||
|
|
||||||
project = 'Linux Media Subsystem Documentation'
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'media.tex', 'Linux Media Subsystem Documentation',
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -548,7 +548,7 @@ There are certain things that the Linux kernel memory barriers do not guarantee:
|
|||||||
|
|
||||||
[*] For information on bus mastering DMA and coherency please read:
|
[*] For information on bus mastering DMA and coherency please read:
|
||||||
|
|
||||||
Documentation/PCI/pci.rst
|
Documentation/driver-api/pci/pci.rst
|
||||||
Documentation/DMA-API-HOWTO.txt
|
Documentation/DMA-API-HOWTO.txt
|
||||||
Documentation/DMA-API.txt
|
Documentation/DMA-API.txt
|
||||||
|
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8; mode: python -*-
|
|
||||||
|
|
||||||
project = "Linux Networking Documentation"
|
|
||||||
|
|
||||||
tags.add("subproject")
|
|
||||||
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'networking.tex', project,
|
|
||||||
'The kernel development community', 'manual'),
|
|
||||||
]
|
|
@ -424,13 +424,24 @@ Statistics
|
|||||||
Following minimum set of TLS-related statistics should be reported
|
Following minimum set of TLS-related statistics should be reported
|
||||||
by the driver:
|
by the driver:
|
||||||
|
|
||||||
* ``rx_tls_decrypted`` - number of successfully decrypted TLS segments
|
* ``rx_tls_decrypted_packets`` - number of successfully decrypted RX packets
|
||||||
* ``tx_tls_encrypted`` - number of in-order TLS segments passed to device
|
which were part of a TLS stream.
|
||||||
for encryption
|
* ``rx_tls_decrypted_bytes`` - number of TLS payload bytes in RX packets
|
||||||
|
which were successfully decrypted.
|
||||||
|
* ``tx_tls_encrypted_packets`` - number of TX packets passed to the device
|
||||||
|
for encryption of their TLS payload.
|
||||||
|
* ``tx_tls_encrypted_bytes`` - number of TLS payload bytes in TX packets
|
||||||
|
passed to the device for encryption.
|
||||||
|
* ``tx_tls_ctx`` - number of TLS TX HW offload contexts added to device for
|
||||||
|
encryption.
|
||||||
* ``tx_tls_ooo`` - number of TX packets which were part of a TLS stream
|
* ``tx_tls_ooo`` - number of TX packets which were part of a TLS stream
|
||||||
but did not arrive in the expected order
|
but did not arrive in the expected order.
|
||||||
* ``tx_tls_drop_no_sync_data`` - number of TX packets dropped because
|
* ``tx_tls_drop_no_sync_data`` - number of TX packets which were part of
|
||||||
they arrived out of order and associated record could not be found
|
a TLS stream dropped, because they arrived out of order and associated
|
||||||
|
record could not be found.
|
||||||
|
* ``tx_tls_drop_bypass_req`` - number of TX packets which were part of a TLS
|
||||||
|
stream dropped, because they contain both data that has been encrypted by
|
||||||
|
software and data that expects hardware crypto offload.
|
||||||
|
|
||||||
Notable corner cases, exceptions and additional requirements
|
Notable corner cases, exceptions and additional requirements
|
||||||
============================================================
|
============================================================
|
||||||
@ -495,21 +506,3 @@ Drivers should ignore the changes to TLS the device feature flags.
|
|||||||
These flags will be acted upon accordingly by the core ``ktls`` code.
|
These flags will be acted upon accordingly by the core ``ktls`` code.
|
||||||
TLS device feature flags only control adding of new TLS connection
|
TLS device feature flags only control adding of new TLS connection
|
||||||
offloads, old connections will remain active after flags are cleared.
|
offloads, old connections will remain active after flags are cleared.
|
||||||
|
|
||||||
Known bugs
|
|
||||||
==========
|
|
||||||
|
|
||||||
skb_orphan() leaks clear text
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
Currently drivers depend on the :c:member:`sk` member of
|
|
||||||
:c:type:`struct sk_buff <sk_buff>` to identify segments requiring
|
|
||||||
encryption. Any operation which removes or does not preserve the socket
|
|
||||||
association such as :c:func:`skb_orphan` or :c:func:`skb_clone`
|
|
||||||
will cause the driver to miss the packets and lead to clear text leaks.
|
|
||||||
|
|
||||||
Redirects leak clear text
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
In the RX direction, if segment has already been decrypted by the device
|
|
||||||
and it gets redirected or mirrored - clear text will be transmitted out.
|
|
||||||
|
@ -204,8 +204,8 @@ Ethernet device, which instead of receiving packets from a physical
|
|||||||
media, receives them from user space program and instead of sending
|
media, receives them from user space program and instead of sending
|
||||||
packets via physical media sends them to the user space program.
|
packets via physical media sends them to the user space program.
|
||||||
|
|
||||||
Let's say that you configured IPX on the tap0, then whenever
|
Let's say that you configured IPv6 on the tap0, then whenever
|
||||||
the kernel sends an IPX packet to tap0, it is passed to the application
|
the kernel sends an IPv6 packet to tap0, it is passed to the application
|
||||||
(VTun for example). The application encrypts, compresses and sends it to
|
(VTun for example). The application encrypts, compresses and sends it to
|
||||||
the other side over TCP or UDP. The application on the other side decompresses
|
the other side over TCP or UDP. The application on the other side decompresses
|
||||||
and decrypts the data received and writes the packet to the TAP device,
|
and decrypts the data received and writes the packet to the TAP device,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
:orphan:
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
================
|
================
|
||||||
Power Management
|
Power Management
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
========================
|
||||||
The PowerPC boot wrapper
|
The PowerPC boot wrapper
|
||||||
------------------------
|
========================
|
||||||
|
|
||||||
Copyright (C) Secret Lab Technologies Ltd.
|
Copyright (C) Secret Lab Technologies Ltd.
|
||||||
|
|
||||||
PowerPC image targets compresses and wraps the kernel image (vmlinux) with
|
PowerPC image targets compresses and wraps the kernel image (vmlinux) with
|
||||||
@ -21,6 +23,7 @@ it uses the wrapper script (arch/powerpc/boot/wrapper) to generate target
|
|||||||
image. The details of the build system is discussed in the next section.
|
image. The details of the build system is discussed in the next section.
|
||||||
Currently, the following image format targets exist:
|
Currently, the following image format targets exist:
|
||||||
|
|
||||||
|
==================== ========================================================
|
||||||
cuImage.%: Backwards compatible uImage for older version of
|
cuImage.%: Backwards compatible uImage for older version of
|
||||||
U-Boot (for versions that don't understand the device
|
U-Boot (for versions that don't understand the device
|
||||||
tree). This image embeds a device tree blob inside
|
tree). This image embeds a device tree blob inside
|
||||||
@ -29,31 +32,36 @@ Currently, the following image format targets exist:
|
|||||||
with boot wrapper code that extracts data from the old
|
with boot wrapper code that extracts data from the old
|
||||||
bd_info structure and loads the data into the device
|
bd_info structure and loads the data into the device
|
||||||
tree before jumping into the kernel.
|
tree before jumping into the kernel.
|
||||||
Because of the series of #ifdefs found in the
|
|
||||||
|
Because of the series of #ifdefs found in the
|
||||||
bd_info structure used in the old U-Boot interfaces,
|
bd_info structure used in the old U-Boot interfaces,
|
||||||
cuImages are platform specific. Each specific
|
cuImages are platform specific. Each specific
|
||||||
U-Boot platform has a different platform init file
|
U-Boot platform has a different platform init file
|
||||||
which populates the embedded device tree with data
|
which populates the embedded device tree with data
|
||||||
from the platform specific bd_info file. The platform
|
from the platform specific bd_info file. The platform
|
||||||
specific cuImage platform init code can be found in
|
specific cuImage platform init code can be found in
|
||||||
arch/powerpc/boot/cuboot.*.c. Selection of the correct
|
`arch/powerpc/boot/cuboot.*.c`. Selection of the correct
|
||||||
cuImage init code for a specific board can be found in
|
cuImage init code for a specific board can be found in
|
||||||
the wrapper structure.
|
the wrapper structure.
|
||||||
|
|
||||||
dtbImage.%: Similar to zImage, except device tree blob is embedded
|
dtbImage.%: Similar to zImage, except device tree blob is embedded
|
||||||
inside the image instead of provided by firmware. The
|
inside the image instead of provided by firmware. The
|
||||||
output image file can be either an elf file or a flat
|
output image file can be either an elf file or a flat
|
||||||
binary depending on the platform.
|
binary depending on the platform.
|
||||||
dtbImages are used on systems which do not have an
|
|
||||||
|
dtbImages are used on systems which do not have an
|
||||||
interface for passing a device tree directly.
|
interface for passing a device tree directly.
|
||||||
dtbImages are similar to simpleImages except that
|
dtbImages are similar to simpleImages except that
|
||||||
dtbImages have platform specific code for extracting
|
dtbImages have platform specific code for extracting
|
||||||
data from the board firmware, but simpleImages do not
|
data from the board firmware, but simpleImages do not
|
||||||
talk to the firmware at all.
|
talk to the firmware at all.
|
||||||
PlayStation 3 support uses dtbImage. So do Embedded
|
|
||||||
|
PlayStation 3 support uses dtbImage. So do Embedded
|
||||||
Planet boards using the PlanetCore firmware. Board
|
Planet boards using the PlanetCore firmware. Board
|
||||||
specific initialization code is typically found in a
|
specific initialization code is typically found in a
|
||||||
file named arch/powerpc/boot/<platform>.c; but this
|
file named arch/powerpc/boot/<platform>.c; but this
|
||||||
can be overridden by the wrapper script.
|
can be overridden by the wrapper script.
|
||||||
|
|
||||||
simpleImage.%: Firmware independent compressed image that does not
|
simpleImage.%: Firmware independent compressed image that does not
|
||||||
depend on any particular firmware interface and embeds
|
depend on any particular firmware interface and embeds
|
||||||
a device tree blob. This image is a flat binary that
|
a device tree blob. This image is a flat binary that
|
||||||
@ -61,14 +69,16 @@ Currently, the following image format targets exist:
|
|||||||
Firmware cannot pass any configuration data to the
|
Firmware cannot pass any configuration data to the
|
||||||
kernel with this image type and it depends entirely on
|
kernel with this image type and it depends entirely on
|
||||||
the embedded device tree for all information.
|
the embedded device tree for all information.
|
||||||
The simpleImage is useful for booting systems with
|
|
||||||
|
The simpleImage is useful for booting systems with
|
||||||
an unknown firmware interface or for booting from
|
an unknown firmware interface or for booting from
|
||||||
a debugger when no firmware is present (such as on
|
a debugger when no firmware is present (such as on
|
||||||
the Xilinx Virtex platform). The only assumption that
|
the Xilinx Virtex platform). The only assumption that
|
||||||
simpleImage makes is that RAM is correctly initialized
|
simpleImage makes is that RAM is correctly initialized
|
||||||
and that the MMU is either off or has RAM mapped to
|
and that the MMU is either off or has RAM mapped to
|
||||||
base address 0.
|
base address 0.
|
||||||
simpleImage also supports inserting special platform
|
|
||||||
|
simpleImage also supports inserting special platform
|
||||||
specific initialization code to the start of the bootup
|
specific initialization code to the start of the bootup
|
||||||
sequence. The virtex405 platform uses this feature to
|
sequence. The virtex405 platform uses this feature to
|
||||||
ensure that the cache is invalidated before caching
|
ensure that the cache is invalidated before caching
|
||||||
@ -81,9 +91,11 @@ Currently, the following image format targets exist:
|
|||||||
named (virtex405-<board>.dts). Search the wrapper
|
named (virtex405-<board>.dts). Search the wrapper
|
||||||
script for 'virtex405' and see the file
|
script for 'virtex405' and see the file
|
||||||
arch/powerpc/boot/virtex405-head.S for details.
|
arch/powerpc/boot/virtex405-head.S for details.
|
||||||
|
|
||||||
treeImage.%; Image format for used with OpenBIOS firmware found
|
treeImage.%; Image format for used with OpenBIOS firmware found
|
||||||
on some ppc4xx hardware. This image embeds a device
|
on some ppc4xx hardware. This image embeds a device
|
||||||
tree blob inside the image.
|
tree blob inside the image.
|
||||||
|
|
||||||
uImage: Native image format used by U-Boot. The uImage target
|
uImage: Native image format used by U-Boot. The uImage target
|
||||||
does not add any boot code. It just wraps a compressed
|
does not add any boot code. It just wraps a compressed
|
||||||
vmlinux in the uImage data structure. This image
|
vmlinux in the uImage data structure. This image
|
||||||
@ -91,12 +103,14 @@ Currently, the following image format targets exist:
|
|||||||
a device tree to the kernel at boot. If using an older
|
a device tree to the kernel at boot. If using an older
|
||||||
version of U-Boot, then you need to use a cuImage
|
version of U-Boot, then you need to use a cuImage
|
||||||
instead.
|
instead.
|
||||||
|
|
||||||
zImage.%: Image format which does not embed a device tree.
|
zImage.%: Image format which does not embed a device tree.
|
||||||
Used by OpenFirmware and other firmware interfaces
|
Used by OpenFirmware and other firmware interfaces
|
||||||
which are able to supply a device tree. This image
|
which are able to supply a device tree. This image
|
||||||
expects firmware to provide the device tree at boot.
|
expects firmware to provide the device tree at boot.
|
||||||
Typically, if you have general purpose PowerPC
|
Typically, if you have general purpose PowerPC
|
||||||
hardware then you want this image format.
|
hardware then you want this image format.
|
||||||
|
==================== ========================================================
|
||||||
|
|
||||||
Image types which embed a device tree blob (simpleImage, dtbImage, treeImage,
|
Image types which embed a device tree blob (simpleImage, dtbImage, treeImage,
|
||||||
and cuImage) all generate the device tree blob from a file in the
|
and cuImage) all generate the device tree blob from a file in the
|
@ -1,3 +1,4 @@
|
|||||||
|
============
|
||||||
CPU Families
|
CPU Families
|
||||||
============
|
============
|
||||||
|
|
||||||
@ -8,8 +9,8 @@ and are supported by arch/powerpc.
|
|||||||
Book3S (aka sPAPR)
|
Book3S (aka sPAPR)
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
- Hash MMU
|
- Hash MMU
|
||||||
- Mix of 32 & 64 bit
|
- Mix of 32 & 64 bit::
|
||||||
|
|
||||||
+--------------+ +----------------+
|
+--------------+ +----------------+
|
||||||
| Old POWER | --------------> | RS64 (threads) |
|
| Old POWER | --------------> | RS64 (threads) |
|
||||||
@ -108,8 +109,8 @@ Book3S (aka sPAPR)
|
|||||||
IBM BookE
|
IBM BookE
|
||||||
---------
|
---------
|
||||||
|
|
||||||
- Software loaded TLB.
|
- Software loaded TLB.
|
||||||
- All 32 bit
|
- All 32 bit::
|
||||||
|
|
||||||
+--------------+
|
+--------------+
|
||||||
| 401 |
|
| 401 |
|
||||||
@ -155,8 +156,8 @@ IBM BookE
|
|||||||
Motorola/Freescale 8xx
|
Motorola/Freescale 8xx
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
- Software loaded with hardware assist.
|
- Software loaded with hardware assist.
|
||||||
- All 32 bit
|
- All 32 bit::
|
||||||
|
|
||||||
+-------------+
|
+-------------+
|
||||||
| MPC8xx Core |
|
| MPC8xx Core |
|
||||||
@ -166,9 +167,9 @@ Motorola/Freescale 8xx
|
|||||||
Freescale BookE
|
Freescale BookE
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
- Software loaded TLB.
|
- Software loaded TLB.
|
||||||
- e6500 adds HW loaded indirect TLB entries.
|
- e6500 adds HW loaded indirect TLB entries.
|
||||||
- Mix of 32 & 64 bit
|
- Mix of 32 & 64 bit::
|
||||||
|
|
||||||
+--------------+
|
+--------------+
|
||||||
| e200 |
|
| e200 |
|
||||||
@ -207,8 +208,8 @@ Freescale BookE
|
|||||||
IBM A2 core
|
IBM A2 core
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
- Book3E, software loaded TLB + HW loaded indirect TLB entries.
|
- Book3E, software loaded TLB + HW loaded indirect TLB entries.
|
||||||
- 64 bit
|
- 64 bit::
|
||||||
|
|
||||||
+--------------+ +----------------+
|
+--------------+ +----------------+
|
||||||
| A2 core | --> | WSP |
|
| A2 core | --> | WSP |
|
@ -1,3 +1,7 @@
|
|||||||
|
============
|
||||||
|
CPU Features
|
||||||
|
============
|
||||||
|
|
||||||
Hollis Blanchard <hollis@austin.ibm.com>
|
Hollis Blanchard <hollis@austin.ibm.com>
|
||||||
5 Jun 2002
|
5 Jun 2002
|
||||||
|
|
||||||
@ -32,7 +36,7 @@ anyways).
|
|||||||
After detecting the processor type, the kernel patches out sections of code
|
After detecting the processor type, the kernel patches out sections of code
|
||||||
that shouldn't be used by writing nop's over it. Using cpufeatures requires
|
that shouldn't be used by writing nop's over it. Using cpufeatures requires
|
||||||
just 2 macros (found in arch/powerpc/include/asm/cputable.h), as seen in head.S
|
just 2 macros (found in arch/powerpc/include/asm/cputable.h), as seen in head.S
|
||||||
transfer_to_handler:
|
transfer_to_handler::
|
||||||
|
|
||||||
#ifdef CONFIG_ALTIVEC
|
#ifdef CONFIG_ALTIVEC
|
||||||
BEGIN_FTR_SECTION
|
BEGIN_FTR_SECTION
|
@ -1,3 +1,4 @@
|
|||||||
|
====================================
|
||||||
Coherent Accelerator Interface (CXL)
|
Coherent Accelerator Interface (CXL)
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
@ -21,6 +22,8 @@ Introduction
|
|||||||
Hardware overview
|
Hardware overview
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
POWER8/9 FPGA
|
POWER8/9 FPGA
|
||||||
+----------+ +---------+
|
+----------+ +---------+
|
||||||
| | | |
|
| | | |
|
||||||
@ -59,14 +62,16 @@ Hardware overview
|
|||||||
the fault. The context to which this fault is serviced is based on
|
the fault. The context to which this fault is serviced is based on
|
||||||
who owns that acceleration function.
|
who owns that acceleration function.
|
||||||
|
|
||||||
POWER8 <-----> PSL Version 8 is compliant to the CAIA Version 1.0.
|
- POWER8 and PSL Version 8 are compliant to the CAIA Version 1.0.
|
||||||
POWER9 <-----> PSL Version 9 is compliant to the CAIA Version 2.0.
|
- POWER9 and PSL Version 9 are compliant to the CAIA Version 2.0.
|
||||||
|
|
||||||
This PSL Version 9 provides new features such as:
|
This PSL Version 9 provides new features such as:
|
||||||
|
|
||||||
* Interaction with the nest MMU on the P9 chip.
|
* Interaction with the nest MMU on the P9 chip.
|
||||||
* Native DMA support.
|
* Native DMA support.
|
||||||
* Supports sending ASB_Notify messages for host thread wakeup.
|
* Supports sending ASB_Notify messages for host thread wakeup.
|
||||||
* Supports Atomic operations.
|
* Supports Atomic operations.
|
||||||
* ....
|
* etc.
|
||||||
|
|
||||||
Cards with a PSL9 won't work on a POWER8 system and cards with a
|
Cards with a PSL9 won't work on a POWER8 system and cards with a
|
||||||
PSL8 won't work on a POWER9 system.
|
PSL8 won't work on a POWER9 system.
|
||||||
@ -147,7 +152,9 @@ User API
|
|||||||
master devices.
|
master devices.
|
||||||
|
|
||||||
A userspace library libcxl is available here:
|
A userspace library libcxl is available here:
|
||||||
|
|
||||||
https://github.com/ibm-capi/libcxl
|
https://github.com/ibm-capi/libcxl
|
||||||
|
|
||||||
This provides a C interface to this kernel API.
|
This provides a C interface to this kernel API.
|
||||||
|
|
||||||
open
|
open
|
||||||
@ -165,7 +172,8 @@ open
|
|||||||
When all available contexts are allocated the open call will fail
|
When all available contexts are allocated the open call will fail
|
||||||
and return -ENOSPC.
|
and return -ENOSPC.
|
||||||
|
|
||||||
Note: IRQs need to be allocated for each context, which may limit
|
Note:
|
||||||
|
IRQs need to be allocated for each context, which may limit
|
||||||
the number of contexts that can be created, and therefore
|
the number of contexts that can be created, and therefore
|
||||||
how many times the device can be opened. The POWER8 CAPP
|
how many times the device can be opened. The POWER8 CAPP
|
||||||
supports 2040 IRQs and 3 are used by the kernel, so 2037 are
|
supports 2040 IRQs and 3 are used by the kernel, so 2037 are
|
||||||
@ -186,7 +194,9 @@ ioctl
|
|||||||
updated as userspace allocates and frees memory. This ioctl
|
updated as userspace allocates and frees memory. This ioctl
|
||||||
returns once the AFU context is started.
|
returns once the AFU context is started.
|
||||||
|
|
||||||
Takes a pointer to a struct cxl_ioctl_start_work:
|
Takes a pointer to a struct cxl_ioctl_start_work
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
struct cxl_ioctl_start_work {
|
struct cxl_ioctl_start_work {
|
||||||
__u64 flags;
|
__u64 flags;
|
||||||
@ -269,7 +279,7 @@ read
|
|||||||
The buffer passed to read() must be at least 4K bytes.
|
The buffer passed to read() must be at least 4K bytes.
|
||||||
|
|
||||||
The result of the read will be a buffer of one or more events,
|
The result of the read will be a buffer of one or more events,
|
||||||
each event is of type struct cxl_event, of varying size.
|
each event is of type struct cxl_event, of varying size::
|
||||||
|
|
||||||
struct cxl_event {
|
struct cxl_event {
|
||||||
struct cxl_event_header header;
|
struct cxl_event_header header;
|
||||||
@ -280,7 +290,9 @@ read
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
The struct cxl_event_header is defined as:
|
The struct cxl_event_header is defined as
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
struct cxl_event_header {
|
struct cxl_event_header {
|
||||||
__u16 type;
|
__u16 type;
|
||||||
@ -307,7 +319,9 @@ read
|
|||||||
For future extensions and padding.
|
For future extensions and padding.
|
||||||
|
|
||||||
If the event type is CXL_EVENT_AFU_INTERRUPT then the event
|
If the event type is CXL_EVENT_AFU_INTERRUPT then the event
|
||||||
structure is defined as:
|
structure is defined as
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
struct cxl_event_afu_interrupt {
|
struct cxl_event_afu_interrupt {
|
||||||
__u16 flags;
|
__u16 flags;
|
||||||
@ -326,7 +340,9 @@ read
|
|||||||
For future extensions and padding.
|
For future extensions and padding.
|
||||||
|
|
||||||
If the event type is CXL_EVENT_DATA_STORAGE then the event
|
If the event type is CXL_EVENT_DATA_STORAGE then the event
|
||||||
structure is defined as:
|
structure is defined as
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
struct cxl_event_data_storage {
|
struct cxl_event_data_storage {
|
||||||
__u16 flags;
|
__u16 flags;
|
||||||
@ -356,7 +372,9 @@ read
|
|||||||
For future extensions
|
For future extensions
|
||||||
|
|
||||||
If the event type is CXL_EVENT_AFU_ERROR then the event structure
|
If the event type is CXL_EVENT_AFU_ERROR then the event structure
|
||||||
is defined as:
|
is defined as
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
struct cxl_event_afu_error {
|
struct cxl_event_afu_error {
|
||||||
__u16 flags;
|
__u16 flags;
|
||||||
@ -393,15 +411,15 @@ open
|
|||||||
ioctl
|
ioctl
|
||||||
-----
|
-----
|
||||||
|
|
||||||
CXL_IOCTL_DOWNLOAD_IMAGE:
|
CXL_IOCTL_DOWNLOAD_IMAGE / CXL_IOCTL_VALIDATE_IMAGE:
|
||||||
CXL_IOCTL_VALIDATE_IMAGE:
|
|
||||||
Starts and controls flashing a new FPGA image. Partial
|
Starts and controls flashing a new FPGA image. Partial
|
||||||
reconfiguration is not supported (yet), so the image must contain
|
reconfiguration is not supported (yet), so the image must contain
|
||||||
a copy of the PSL and AFU(s). Since an image can be quite large,
|
a copy of the PSL and AFU(s). Since an image can be quite large,
|
||||||
the caller may have to iterate, splitting the image in smaller
|
the caller may have to iterate, splitting the image in smaller
|
||||||
chunks.
|
chunks.
|
||||||
|
|
||||||
Takes a pointer to a struct cxl_adapter_image:
|
Takes a pointer to a struct cxl_adapter_image::
|
||||||
|
|
||||||
struct cxl_adapter_image {
|
struct cxl_adapter_image {
|
||||||
__u64 flags;
|
__u64 flags;
|
||||||
__u64 data;
|
__u64 data;
|
||||||
@ -442,7 +460,7 @@ Udev rules
|
|||||||
The following udev rules could be used to create a symlink to the
|
The following udev rules could be used to create a symlink to the
|
||||||
most logical chardev to use in any programming mode (afuX.Yd for
|
most logical chardev to use in any programming mode (afuX.Yd for
|
||||||
dedicated, afuX.Ys for afu directed), since the API is virtually
|
dedicated, afuX.Ys for afu directed), since the API is virtually
|
||||||
identical for each:
|
identical for each::
|
||||||
|
|
||||||
SUBSYSTEM=="cxl", ATTRS{mode}=="dedicated_process", SYMLINK="cxl/%b"
|
SUBSYSTEM=="cxl", ATTRS{mode}=="dedicated_process", SYMLINK="cxl/%b"
|
||||||
SUBSYSTEM=="cxl", ATTRS{mode}=="afu_directed", \
|
SUBSYSTEM=="cxl", ATTRS{mode}=="afu_directed", \
|
@ -1,3 +1,7 @@
|
|||||||
|
================================
|
||||||
|
Coherent Accelerator (CXL) Flash
|
||||||
|
================================
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
@ -28,7 +32,7 @@ Introduction
|
|||||||
responsible for the initialization of the adapter, setting up the
|
responsible for the initialization of the adapter, setting up the
|
||||||
special path for user space access, and performing error recovery. It
|
special path for user space access, and performing error recovery. It
|
||||||
communicates directly the Flash Accelerator Functional Unit (AFU)
|
communicates directly the Flash Accelerator Functional Unit (AFU)
|
||||||
as described in Documentation/powerpc/cxl.txt.
|
as described in Documentation/powerpc/cxl.rst.
|
||||||
|
|
||||||
The cxlflash driver supports two, mutually exclusive, modes of
|
The cxlflash driver supports two, mutually exclusive, modes of
|
||||||
operation at the device (LUN) level:
|
operation at the device (LUN) level:
|
||||||
@ -58,7 +62,7 @@ Overview
|
|||||||
|
|
||||||
The CXL Flash Adapter Driver establishes a master context with the
|
The CXL Flash Adapter Driver establishes a master context with the
|
||||||
AFU. It uses memory mapped I/O (MMIO) for this control and setup. The
|
AFU. It uses memory mapped I/O (MMIO) for this control and setup. The
|
||||||
Adapter Problem Space Memory Map looks like this:
|
Adapter Problem Space Memory Map looks like this::
|
||||||
|
|
||||||
+-------------------------------+
|
+-------------------------------+
|
||||||
| 512 * 64 KB User MMIO |
|
| 512 * 64 KB User MMIO |
|
||||||
@ -375,7 +379,7 @@ CXL Flash Driver Host IOCTLs
|
|||||||
Each host adapter instance that is supported by the cxlflash driver
|
Each host adapter instance that is supported by the cxlflash driver
|
||||||
has a special character device associated with it to enable a set of
|
has a special character device associated with it to enable a set of
|
||||||
host management function. These character devices are hosted in a
|
host management function. These character devices are hosted in a
|
||||||
class dedicated for cxlflash and can be accessed via /dev/cxlflash/*.
|
class dedicated for cxlflash and can be accessed via `/dev/cxlflash/*`.
|
||||||
|
|
||||||
Applications can be written to perform various functions using the
|
Applications can be written to perform various functions using the
|
||||||
host ioctl APIs below.
|
host ioctl APIs below.
|
@ -1,10 +1,11 @@
|
|||||||
|
=====================
|
||||||
DAWR issues on POWER9
|
DAWR issues on POWER9
|
||||||
============================
|
=====================
|
||||||
|
|
||||||
On POWER9 the Data Address Watchpoint Register (DAWR) can cause a checkstop
|
On POWER9 the Data Address Watchpoint Register (DAWR) can cause a checkstop
|
||||||
if it points to cache inhibited (CI) memory. Currently Linux has no way to
|
if it points to cache inhibited (CI) memory. Currently Linux has no way to
|
||||||
disinguish CI memory when configuring the DAWR, so (for now) the DAWR is
|
disinguish CI memory when configuring the DAWR, so (for now) the DAWR is
|
||||||
disabled by this commit:
|
disabled by this commit::
|
||||||
|
|
||||||
commit 9654153158d3e0684a1bdb76dbababdb7111d5a0
|
commit 9654153158d3e0684a1bdb76dbababdb7111d5a0
|
||||||
Author: Michael Neuling <mikey@neuling.org>
|
Author: Michael Neuling <mikey@neuling.org>
|
||||||
@ -12,7 +13,7 @@ disabled by this commit:
|
|||||||
powerpc: Disable DAWR in the base POWER9 CPU features
|
powerpc: Disable DAWR in the base POWER9 CPU features
|
||||||
|
|
||||||
Technical Details:
|
Technical Details:
|
||||||
============================
|
==================
|
||||||
|
|
||||||
DAWR has 6 different ways of being set.
|
DAWR has 6 different ways of being set.
|
||||||
1) ptrace
|
1) ptrace
|
||||||
@ -37,7 +38,7 @@ DAWR on the migration.
|
|||||||
For xmon, the 'bd' command will return an error on P9.
|
For xmon, the 'bd' command will return an error on P9.
|
||||||
|
|
||||||
Consequences for users
|
Consequences for users
|
||||||
============================
|
======================
|
||||||
|
|
||||||
For GDB watchpoints (ie 'watch' command) on POWER9 bare metal , GDB
|
For GDB watchpoints (ie 'watch' command) on POWER9 bare metal , GDB
|
||||||
will accept the command. Unfortunately since there is no hardware
|
will accept the command. Unfortunately since there is no hardware
|
||||||
@ -57,8 +58,8 @@ trapped in GDB. The watchpoint is remembered, so if the guest is
|
|||||||
migrated back to the POWER8 host, it will start working again.
|
migrated back to the POWER8 host, it will start working again.
|
||||||
|
|
||||||
Force enabling the DAWR
|
Force enabling the DAWR
|
||||||
=============================
|
=======================
|
||||||
Kernels (since ~v5.2) have an option to force enable the DAWR via:
|
Kernels (since ~v5.2) have an option to force enable the DAWR via::
|
||||||
|
|
||||||
echo Y > /sys/kernel/debug/powerpc/dawr_enable_dangerous
|
echo Y > /sys/kernel/debug/powerpc/dawr_enable_dangerous
|
||||||
|
|
||||||
@ -86,5 +87,7 @@ dawr_enable_dangerous file will fail if the hypervisor doesn't support
|
|||||||
writing the DAWR.
|
writing the DAWR.
|
||||||
|
|
||||||
To double check the DAWR is working, run this kernel selftest:
|
To double check the DAWR is working, run this kernel selftest:
|
||||||
|
|
||||||
tools/testing/selftests/powerpc/ptrace/ptrace-hwbreak.c
|
tools/testing/selftests/powerpc/ptrace/ptrace-hwbreak.c
|
||||||
|
|
||||||
Any errors/failures/skips mean something is wrong.
|
Any errors/failures/skips mean something is wrong.
|
@ -1,5 +1,6 @@
|
|||||||
DSCR (Data Stream Control Register)
|
===================================
|
||||||
================================================
|
DSCR (Data Stream Control Register)
|
||||||
|
===================================
|
||||||
|
|
||||||
DSCR register in powerpc allows user to have some control of prefetch of data
|
DSCR register in powerpc allows user to have some control of prefetch of data
|
||||||
stream in the processor. Please refer to the ISA documents or related manual
|
stream in the processor. Please refer to the ISA documents or related manual
|
||||||
@ -10,14 +11,17 @@ user interface.
|
|||||||
|
|
||||||
(A) Data Structures:
|
(A) Data Structures:
|
||||||
|
|
||||||
(1) thread_struct:
|
(1) thread_struct::
|
||||||
|
|
||||||
dscr /* Thread DSCR value */
|
dscr /* Thread DSCR value */
|
||||||
dscr_inherit /* Thread has changed default DSCR */
|
dscr_inherit /* Thread has changed default DSCR */
|
||||||
|
|
||||||
(2) PACA:
|
(2) PACA::
|
||||||
|
|
||||||
dscr_default /* per-CPU DSCR default value */
|
dscr_default /* per-CPU DSCR default value */
|
||||||
|
|
||||||
(3) sysfs.c:
|
(3) sysfs.c::
|
||||||
|
|
||||||
dscr_default /* System DSCR default value */
|
dscr_default /* System DSCR default value */
|
||||||
|
|
||||||
(B) Scheduler Changes:
|
(B) Scheduler Changes:
|
||||||
@ -35,8 +39,8 @@ user interface.
|
|||||||
|
|
||||||
(C) SYSFS Interface:
|
(C) SYSFS Interface:
|
||||||
|
|
||||||
Global DSCR default: /sys/devices/system/cpu/dscr_default
|
- Global DSCR default: /sys/devices/system/cpu/dscr_default
|
||||||
CPU specific DSCR default: /sys/devices/system/cpu/cpuN/dscr
|
- CPU specific DSCR default: /sys/devices/system/cpu/cpuN/dscr
|
||||||
|
|
||||||
Changing the global DSCR default in the sysfs will change all the CPU
|
Changing the global DSCR default in the sysfs will change all the CPU
|
||||||
specific DSCR defaults immediately in their PACA structures. Again if
|
specific DSCR defaults immediately in their PACA structures. Again if
|
@ -1,10 +1,10 @@
|
|||||||
|
==========================
|
||||||
|
PCI Bus EEH Error Recovery
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Linas Vepstas <linas@austin.ibm.com>
|
||||||
|
|
||||||
PCI Bus EEH Error Recovery
|
12 January 2005
|
||||||
--------------------------
|
|
||||||
Linas Vepstas
|
|
||||||
<linas@austin.ibm.com>
|
|
||||||
12 January 2005
|
|
||||||
|
|
||||||
|
|
||||||
Overview:
|
Overview:
|
||||||
@ -143,17 +143,17 @@ seen in /proc/ppc64/eeh (subject to change). Normally, almost
|
|||||||
all of these occur during boot, when the PCI bus is scanned, where
|
all of these occur during boot, when the PCI bus is scanned, where
|
||||||
a large number of 0xff reads are part of the bus scan procedure.
|
a large number of 0xff reads are part of the bus scan procedure.
|
||||||
|
|
||||||
If a frozen slot is detected, code in
|
If a frozen slot is detected, code in
|
||||||
arch/powerpc/platforms/pseries/eeh.c will print a stack trace to
|
arch/powerpc/platforms/pseries/eeh.c will print a stack trace to
|
||||||
syslog (/var/log/messages). This stack trace has proven to be very
|
syslog (/var/log/messages). This stack trace has proven to be very
|
||||||
useful to device-driver authors for finding out at what point the EEH
|
useful to device-driver authors for finding out at what point the EEH
|
||||||
error was detected, as the error itself usually occurs slightly
|
error was detected, as the error itself usually occurs slightly
|
||||||
beforehand.
|
beforehand.
|
||||||
|
|
||||||
Next, it uses the Linux kernel notifier chain/work queue mechanism to
|
Next, it uses the Linux kernel notifier chain/work queue mechanism to
|
||||||
allow any interested parties to find out about the failure. Device
|
allow any interested parties to find out about the failure. Device
|
||||||
drivers, or other parts of the kernel, can use
|
drivers, or other parts of the kernel, can use
|
||||||
eeh_register_notifier(struct notifier_block *) to find out about EEH
|
`eeh_register_notifier(struct notifier_block *)` to find out about EEH
|
||||||
events. The event will include a pointer to the pci device, the
|
events. The event will include a pointer to the pci device, the
|
||||||
device node and some state info. Receivers of the event can "do as
|
device node and some state info. Receivers of the event can "do as
|
||||||
they wish"; the default handler will be described further in this
|
they wish"; the default handler will be described further in this
|
||||||
@ -162,10 +162,13 @@ section.
|
|||||||
To assist in the recovery of the device, eeh.c exports the
|
To assist in the recovery of the device, eeh.c exports the
|
||||||
following functions:
|
following functions:
|
||||||
|
|
||||||
rtas_set_slot_reset() -- assert the PCI #RST line for 1/8th of a second
|
rtas_set_slot_reset()
|
||||||
rtas_configure_bridge() -- ask firmware to configure any PCI bridges
|
assert the PCI #RST line for 1/8th of a second
|
||||||
|
rtas_configure_bridge()
|
||||||
|
ask firmware to configure any PCI bridges
|
||||||
located topologically under the pci slot.
|
located topologically under the pci slot.
|
||||||
eeh_save_bars() and eeh_restore_bars(): save and restore the PCI
|
eeh_save_bars() and eeh_restore_bars():
|
||||||
|
save and restore the PCI
|
||||||
config-space info for a device and any devices under it.
|
config-space info for a device and any devices under it.
|
||||||
|
|
||||||
|
|
||||||
@ -191,7 +194,7 @@ events get delivered to user-space scripts.
|
|||||||
|
|
||||||
Following is an example sequence of events that cause a device driver
|
Following is an example sequence of events that cause a device driver
|
||||||
close function to be called during the first phase of an EEH reset.
|
close function to be called during the first phase of an EEH reset.
|
||||||
The following sequence is an example of the pcnet32 device driver.
|
The following sequence is an example of the pcnet32 device driver::
|
||||||
|
|
||||||
rpa_php_unconfig_pci_adapter (struct slot *) // in rpaphp_pci.c
|
rpa_php_unconfig_pci_adapter (struct slot *) // in rpaphp_pci.c
|
||||||
{
|
{
|
||||||
@ -241,53 +244,54 @@ The following sequence is an example of the pcnet32 device driver.
|
|||||||
}}}}}}
|
}}}}}}
|
||||||
|
|
||||||
|
|
||||||
in drivers/pci/pci_driver.c,
|
in drivers/pci/pci_driver.c,
|
||||||
struct device_driver->remove() is just pci_device_remove()
|
struct device_driver->remove() is just pci_device_remove()
|
||||||
which calls struct pci_driver->remove() which is pcnet32_remove_one()
|
which calls struct pci_driver->remove() which is pcnet32_remove_one()
|
||||||
which calls unregister_netdev() (in net/core/dev.c)
|
which calls unregister_netdev() (in net/core/dev.c)
|
||||||
which calls dev_close() (in net/core/dev.c)
|
which calls dev_close() (in net/core/dev.c)
|
||||||
which calls dev->stop() which is pcnet32_close()
|
which calls dev->stop() which is pcnet32_close()
|
||||||
which then does the appropriate shutdown.
|
which then does the appropriate shutdown.
|
||||||
|
|
||||||
---
|
---
|
||||||
Following is the analogous stack trace for events sent to user-space
|
|
||||||
when the pci device is unconfigured.
|
|
||||||
|
|
||||||
rpa_php_unconfig_pci_adapter() { // in rpaphp_pci.c
|
Following is the analogous stack trace for events sent to user-space
|
||||||
calls
|
when the pci device is unconfigured::
|
||||||
pci_remove_bus_device (struct pci_dev *) { // in /drivers/pci/remove.c
|
|
||||||
|
rpa_php_unconfig_pci_adapter() { // in rpaphp_pci.c
|
||||||
calls
|
calls
|
||||||
pci_destroy_dev (struct pci_dev *) {
|
pci_remove_bus_device (struct pci_dev *) { // in /drivers/pci/remove.c
|
||||||
calls
|
calls
|
||||||
device_unregister (&dev->dev) { // in /drivers/base/core.c
|
pci_destroy_dev (struct pci_dev *) {
|
||||||
calls
|
calls
|
||||||
device_del(struct device * dev) { // in /drivers/base/core.c
|
device_unregister (&dev->dev) { // in /drivers/base/core.c
|
||||||
calls
|
calls
|
||||||
kobject_del() { //in /libs/kobject.c
|
device_del(struct device * dev) { // in /drivers/base/core.c
|
||||||
calls
|
calls
|
||||||
kobject_uevent() { // in /libs/kobject.c
|
kobject_del() { //in /libs/kobject.c
|
||||||
calls
|
calls
|
||||||
kset_uevent() { // in /lib/kobject.c
|
kobject_uevent() { // in /libs/kobject.c
|
||||||
calls
|
calls
|
||||||
kset->uevent_ops->uevent() // which is really just
|
kset_uevent() { // in /lib/kobject.c
|
||||||
a call to
|
|
||||||
dev_uevent() { // in /drivers/base/core.c
|
|
||||||
calls
|
calls
|
||||||
dev->bus->uevent() which is really just a call to
|
kset->uevent_ops->uevent() // which is really just
|
||||||
pci_uevent () { // in drivers/pci/hotplug.c
|
a call to
|
||||||
which prints device name, etc....
|
dev_uevent() { // in /drivers/base/core.c
|
||||||
|
calls
|
||||||
|
dev->bus->uevent() which is really just a call to
|
||||||
|
pci_uevent () { // in drivers/pci/hotplug.c
|
||||||
|
which prints device name, etc....
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
then kobject_uevent() sends a netlink uevent to userspace
|
||||||
then kobject_uevent() sends a netlink uevent to userspace
|
--> userspace uevent
|
||||||
--> userspace uevent
|
(during early boot, nobody listens to netlink events and
|
||||||
(during early boot, nobody listens to netlink events and
|
kobject_uevent() executes uevent_helper[], which runs the
|
||||||
kobject_uevent() executes uevent_helper[], which runs the
|
event process /sbin/hotplug)
|
||||||
event process /sbin/hotplug)
|
}
|
||||||
}
|
}
|
||||||
}
|
kobject_del() then calls sysfs_remove_dir(), which would
|
||||||
kobject_del() then calls sysfs_remove_dir(), which would
|
trigger any user-space daemon that was watching /sysfs,
|
||||||
trigger any user-space daemon that was watching /sysfs,
|
and notice the delete event.
|
||||||
and notice the delete event.
|
|
||||||
|
|
||||||
|
|
||||||
Pro's and Con's of the Current Design
|
Pro's and Con's of the Current Design
|
||||||
@ -299,12 +303,12 @@ individual device drivers, so that the current design throws a wide net.
|
|||||||
The biggest negative of the design is that it potentially disturbs
|
The biggest negative of the design is that it potentially disturbs
|
||||||
network daemons and file systems that didn't need to be disturbed.
|
network daemons and file systems that didn't need to be disturbed.
|
||||||
|
|
||||||
-- A minor complaint is that resetting the network card causes
|
- A minor complaint is that resetting the network card causes
|
||||||
user-space back-to-back ifdown/ifup burps that potentially disturb
|
user-space back-to-back ifdown/ifup burps that potentially disturb
|
||||||
network daemons, that didn't need to even know that the pci
|
network daemons, that didn't need to even know that the pci
|
||||||
card was being rebooted.
|
card was being rebooted.
|
||||||
|
|
||||||
-- A more serious concern is that the same reset, for SCSI devices,
|
- A more serious concern is that the same reset, for SCSI devices,
|
||||||
causes havoc to mounted file systems. Scripts cannot post-facto
|
causes havoc to mounted file systems. Scripts cannot post-facto
|
||||||
unmount a file system without flushing pending buffers, but this
|
unmount a file system without flushing pending buffers, but this
|
||||||
is impossible, because I/O has already been stopped. Thus,
|
is impossible, because I/O has already been stopped. Thus,
|
||||||
@ -322,7 +326,7 @@ network daemons and file systems that didn't need to be disturbed.
|
|||||||
from the block layer. It would be very natural to add an EEH
|
from the block layer. It would be very natural to add an EEH
|
||||||
reset into this chain of events.
|
reset into this chain of events.
|
||||||
|
|
||||||
-- If a SCSI error occurs for the root device, all is lost unless
|
- If a SCSI error occurs for the root device, all is lost unless
|
||||||
the sysadmin had the foresight to run /bin, /sbin, /etc, /var
|
the sysadmin had the foresight to run /bin, /sbin, /etc, /var
|
||||||
and so on, out of ramdisk/tmpfs.
|
and so on, out of ramdisk/tmpfs.
|
||||||
|
|
||||||
@ -330,5 +334,3 @@ network daemons and file systems that didn't need to be disturbed.
|
|||||||
Conclusions
|
Conclusions
|
||||||
-----------
|
-----------
|
||||||
There's forward progress ...
|
There's forward progress ...
|
||||||
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
|
======================
|
||||||
|
Firmware-Assisted Dump
|
||||||
|
======================
|
||||||
|
|
||||||
Firmware-Assisted Dump
|
July 2011
|
||||||
------------------------
|
|
||||||
July 2011
|
|
||||||
|
|
||||||
The goal of firmware-assisted dump is to enable the dump of
|
The goal of firmware-assisted dump is to enable the dump of
|
||||||
a crashed system, and to do so from a fully-reset system, and
|
a crashed system, and to do so from a fully-reset system, and
|
||||||
@ -27,11 +28,11 @@ in production use.
|
|||||||
Comparing with kdump or other strategies, firmware-assisted
|
Comparing with kdump or other strategies, firmware-assisted
|
||||||
dump offers several strong, practical advantages:
|
dump offers several strong, practical advantages:
|
||||||
|
|
||||||
-- Unlike kdump, the system has been reset, and loaded
|
- Unlike kdump, the system has been reset, and loaded
|
||||||
with a fresh copy of the kernel. In particular,
|
with a fresh copy of the kernel. In particular,
|
||||||
PCI and I/O devices have been reinitialized and are
|
PCI and I/O devices have been reinitialized and are
|
||||||
in a clean, consistent state.
|
in a clean, consistent state.
|
||||||
-- Once the dump is copied out, the memory that held the dump
|
- Once the dump is copied out, the memory that held the dump
|
||||||
is immediately available to the running kernel. And therefore,
|
is immediately available to the running kernel. And therefore,
|
||||||
unlike kdump, fadump doesn't need a 2nd reboot to get back
|
unlike kdump, fadump doesn't need a 2nd reboot to get back
|
||||||
the system to the production configuration.
|
the system to the production configuration.
|
||||||
@ -40,17 +41,18 @@ The above can only be accomplished by coordination with,
|
|||||||
and assistance from the Power firmware. The procedure is
|
and assistance from the Power firmware. The procedure is
|
||||||
as follows:
|
as follows:
|
||||||
|
|
||||||
-- The first kernel registers the sections of memory with the
|
- The first kernel registers the sections of memory with the
|
||||||
Power firmware for dump preservation during OS initialization.
|
Power firmware for dump preservation during OS initialization.
|
||||||
These registered sections of memory are reserved by the first
|
These registered sections of memory are reserved by the first
|
||||||
kernel during early boot.
|
kernel during early boot.
|
||||||
|
|
||||||
-- When a system crashes, the Power firmware will save
|
- When a system crashes, the Power firmware will save
|
||||||
the low memory (boot memory of size larger of 5% of system RAM
|
the low memory (boot memory of size larger of 5% of system RAM
|
||||||
or 256MB) of RAM to the previous registered region. It will
|
or 256MB) of RAM to the previous registered region. It will
|
||||||
also save system registers, and hardware PTE's.
|
also save system registers, and hardware PTE's.
|
||||||
|
|
||||||
NOTE: The term 'boot memory' means size of the low memory chunk
|
NOTE:
|
||||||
|
The term 'boot memory' means size of the low memory chunk
|
||||||
that is required for a kernel to boot successfully when
|
that is required for a kernel to boot successfully when
|
||||||
booted with restricted memory. By default, the boot memory
|
booted with restricted memory. By default, the boot memory
|
||||||
size will be the larger of 5% of system RAM or 256MB.
|
size will be the larger of 5% of system RAM or 256MB.
|
||||||
@ -64,12 +66,12 @@ as follows:
|
|||||||
as fadump uses a predefined offset to reserve memory
|
as fadump uses a predefined offset to reserve memory
|
||||||
for boot memory dump preservation in case of a crash.
|
for boot memory dump preservation in case of a crash.
|
||||||
|
|
||||||
-- After the low memory (boot memory) area has been saved, the
|
- After the low memory (boot memory) area has been saved, the
|
||||||
firmware will reset PCI and other hardware state. It will
|
firmware will reset PCI and other hardware state. It will
|
||||||
*not* clear the RAM. It will then launch the bootloader, as
|
*not* clear the RAM. It will then launch the bootloader, as
|
||||||
normal.
|
normal.
|
||||||
|
|
||||||
-- The freshly booted kernel will notice that there is a new
|
- The freshly booted kernel will notice that there is a new
|
||||||
node (ibm,dump-kernel) in the device tree, indicating that
|
node (ibm,dump-kernel) in the device tree, indicating that
|
||||||
there is crash data available from a previous boot. During
|
there is crash data available from a previous boot. During
|
||||||
the early boot OS will reserve rest of the memory above
|
the early boot OS will reserve rest of the memory above
|
||||||
@ -77,17 +79,18 @@ as follows:
|
|||||||
size. This will make sure that the second kernel will not
|
size. This will make sure that the second kernel will not
|
||||||
touch any of the dump memory area.
|
touch any of the dump memory area.
|
||||||
|
|
||||||
-- User-space tools will read /proc/vmcore to obtain the contents
|
- User-space tools will read /proc/vmcore to obtain the contents
|
||||||
of memory, which holds the previous crashed kernel dump in ELF
|
of memory, which holds the previous crashed kernel dump in ELF
|
||||||
format. The userspace tools may copy this info to disk, or
|
format. The userspace tools may copy this info to disk, or
|
||||||
network, nas, san, iscsi, etc. as desired.
|
network, nas, san, iscsi, etc. as desired.
|
||||||
|
|
||||||
-- Once the userspace tool is done saving dump, it will echo
|
- Once the userspace tool is done saving dump, it will echo
|
||||||
'1' to /sys/kernel/fadump_release_mem to release the reserved
|
'1' to /sys/kernel/fadump_release_mem to release the reserved
|
||||||
memory back to general use, except the memory required for
|
memory back to general use, except the memory required for
|
||||||
next firmware-assisted dump registration.
|
next firmware-assisted dump registration.
|
||||||
|
|
||||||
e.g.
|
e.g.::
|
||||||
|
|
||||||
# echo 1 > /sys/kernel/fadump_release_mem
|
# echo 1 > /sys/kernel/fadump_release_mem
|
||||||
|
|
||||||
Please note that the firmware-assisted dump feature
|
Please note that the firmware-assisted dump feature
|
||||||
@ -95,7 +98,7 @@ is only available on Power6 and above systems with recent
|
|||||||
firmware versions.
|
firmware versions.
|
||||||
|
|
||||||
Implementation details:
|
Implementation details:
|
||||||
----------------------
|
-----------------------
|
||||||
|
|
||||||
During boot, a check is made to see if firmware supports
|
During boot, a check is made to see if firmware supports
|
||||||
this feature on that particular machine. If it does, then
|
this feature on that particular machine. If it does, then
|
||||||
@ -121,7 +124,7 @@ Allocator (CMA) for memory reservation if CMA is configured for kernel.
|
|||||||
With CMA reservation this memory will be available for applications to
|
With CMA reservation this memory will be available for applications to
|
||||||
use it, while kernel is prevented from using it. With this fadump will
|
use it, while kernel is prevented from using it. With this fadump will
|
||||||
still be able to capture all of the kernel memory and most of the user
|
still be able to capture all of the kernel memory and most of the user
|
||||||
space memory except the user pages that were present in CMA region.
|
space memory except the user pages that were present in CMA region::
|
||||||
|
|
||||||
o Memory Reservation during first kernel
|
o Memory Reservation during first kernel
|
||||||
|
|
||||||
@ -166,7 +169,7 @@ The tools to examine the dump will be same as the ones
|
|||||||
used for kdump.
|
used for kdump.
|
||||||
|
|
||||||
How to enable firmware-assisted dump (fadump):
|
How to enable firmware-assisted dump (fadump):
|
||||||
-------------------------------------
|
----------------------------------------------
|
||||||
|
|
||||||
1. Set config option CONFIG_FA_DUMP=y and build kernel.
|
1. Set config option CONFIG_FA_DUMP=y and build kernel.
|
||||||
2. Boot into linux kernel with 'fadump=on' kernel cmdline option.
|
2. Boot into linux kernel with 'fadump=on' kernel cmdline option.
|
||||||
@ -177,19 +180,20 @@ How to enable firmware-assisted dump (fadump):
|
|||||||
to specify size of the memory to reserve for boot memory dump
|
to specify size of the memory to reserve for boot memory dump
|
||||||
preservation.
|
preservation.
|
||||||
|
|
||||||
NOTE: 1. 'fadump_reserve_mem=' parameter has been deprecated. Instead
|
NOTE:
|
||||||
use 'crashkernel=' to specify size of the memory to reserve
|
1. 'fadump_reserve_mem=' parameter has been deprecated. Instead
|
||||||
for boot memory dump preservation.
|
use 'crashkernel=' to specify size of the memory to reserve
|
||||||
2. If firmware-assisted dump fails to reserve memory then it
|
for boot memory dump preservation.
|
||||||
will fallback to existing kdump mechanism if 'crashkernel='
|
2. If firmware-assisted dump fails to reserve memory then it
|
||||||
option is set at kernel cmdline.
|
will fallback to existing kdump mechanism if 'crashkernel='
|
||||||
3. if user wants to capture all of user space memory and ok with
|
option is set at kernel cmdline.
|
||||||
reserved memory not available to production system, then
|
3. if user wants to capture all of user space memory and ok with
|
||||||
'fadump=nocma' kernel parameter can be used to fallback to
|
reserved memory not available to production system, then
|
||||||
old behaviour.
|
'fadump=nocma' kernel parameter can be used to fallback to
|
||||||
|
old behaviour.
|
||||||
|
|
||||||
Sysfs/debugfs files:
|
Sysfs/debugfs files:
|
||||||
------------
|
--------------------
|
||||||
|
|
||||||
Firmware-assisted dump feature uses sysfs file system to hold
|
Firmware-assisted dump feature uses sysfs file system to hold
|
||||||
the control files and debugfs file to display memory reserved region.
|
the control files and debugfs file to display memory reserved region.
|
||||||
@ -197,20 +201,20 @@ the control files and debugfs file to display memory reserved region.
|
|||||||
Here is the list of files under kernel sysfs:
|
Here is the list of files under kernel sysfs:
|
||||||
|
|
||||||
/sys/kernel/fadump_enabled
|
/sys/kernel/fadump_enabled
|
||||||
|
|
||||||
This is used to display the fadump status.
|
This is used to display the fadump status.
|
||||||
0 = fadump is disabled
|
|
||||||
1 = fadump is enabled
|
- 0 = fadump is disabled
|
||||||
|
- 1 = fadump is enabled
|
||||||
|
|
||||||
This interface can be used by kdump init scripts to identify if
|
This interface can be used by kdump init scripts to identify if
|
||||||
fadump is enabled in the kernel and act accordingly.
|
fadump is enabled in the kernel and act accordingly.
|
||||||
|
|
||||||
/sys/kernel/fadump_registered
|
/sys/kernel/fadump_registered
|
||||||
|
|
||||||
This is used to display the fadump registration status as well
|
This is used to display the fadump registration status as well
|
||||||
as to control (start/stop) the fadump registration.
|
as to control (start/stop) the fadump registration.
|
||||||
0 = fadump is not registered.
|
|
||||||
1 = fadump is registered and ready to handle system crash.
|
- 0 = fadump is not registered.
|
||||||
|
- 1 = fadump is registered and ready to handle system crash.
|
||||||
|
|
||||||
To register fadump echo 1 > /sys/kernel/fadump_registered and
|
To register fadump echo 1 > /sys/kernel/fadump_registered and
|
||||||
echo 0 > /sys/kernel/fadump_registered for un-register and stop the
|
echo 0 > /sys/kernel/fadump_registered for un-register and stop the
|
||||||
@ -219,13 +223,12 @@ Here is the list of files under kernel sysfs:
|
|||||||
easily integrated with kdump service start/stop.
|
easily integrated with kdump service start/stop.
|
||||||
|
|
||||||
/sys/kernel/fadump_release_mem
|
/sys/kernel/fadump_release_mem
|
||||||
|
|
||||||
This file is available only when fadump is active during
|
This file is available only when fadump is active during
|
||||||
second kernel. This is used to release the reserved memory
|
second kernel. This is used to release the reserved memory
|
||||||
region that are held for saving crash dump. To release the
|
region that are held for saving crash dump. To release the
|
||||||
reserved memory echo 1 to it:
|
reserved memory echo 1 to it::
|
||||||
|
|
||||||
echo 1 > /sys/kernel/fadump_release_mem
|
echo 1 > /sys/kernel/fadump_release_mem
|
||||||
|
|
||||||
After echo 1, the content of the /sys/kernel/debug/powerpc/fadump_region
|
After echo 1, the content of the /sys/kernel/debug/powerpc/fadump_region
|
||||||
file will change to reflect the new memory reservations.
|
file will change to reflect the new memory reservations.
|
||||||
@ -238,38 +241,39 @@ Here is the list of files under powerpc debugfs:
|
|||||||
(Assuming debugfs is mounted on /sys/kernel/debug directory.)
|
(Assuming debugfs is mounted on /sys/kernel/debug directory.)
|
||||||
|
|
||||||
/sys/kernel/debug/powerpc/fadump_region
|
/sys/kernel/debug/powerpc/fadump_region
|
||||||
|
|
||||||
This file shows the reserved memory regions if fadump is
|
This file shows the reserved memory regions if fadump is
|
||||||
enabled otherwise this file is empty. The output format
|
enabled otherwise this file is empty. The output format
|
||||||
is:
|
is::
|
||||||
<region>: [<start>-<end>] <reserved-size> bytes, Dumped: <dump-size>
|
|
||||||
|
<region>: [<start>-<end>] <reserved-size> bytes, Dumped: <dump-size>
|
||||||
|
|
||||||
e.g.
|
e.g.
|
||||||
Contents when fadump is registered during first kernel
|
Contents when fadump is registered during first kernel::
|
||||||
|
|
||||||
# cat /sys/kernel/debug/powerpc/fadump_region
|
# cat /sys/kernel/debug/powerpc/fadump_region
|
||||||
CPU : [0x0000006ffb0000-0x0000006fff001f] 0x40020 bytes, Dumped: 0x0
|
CPU : [0x0000006ffb0000-0x0000006fff001f] 0x40020 bytes, Dumped: 0x0
|
||||||
HPTE: [0x0000006fff0020-0x0000006fff101f] 0x1000 bytes, Dumped: 0x0
|
HPTE: [0x0000006fff0020-0x0000006fff101f] 0x1000 bytes, Dumped: 0x0
|
||||||
DUMP: [0x0000006fff1020-0x0000007fff101f] 0x10000000 bytes, Dumped: 0x0
|
DUMP: [0x0000006fff1020-0x0000007fff101f] 0x10000000 bytes, Dumped: 0x0
|
||||||
|
|
||||||
Contents when fadump is active during second kernel
|
Contents when fadump is active during second kernel::
|
||||||
|
|
||||||
# cat /sys/kernel/debug/powerpc/fadump_region
|
# cat /sys/kernel/debug/powerpc/fadump_region
|
||||||
CPU : [0x0000006ffb0000-0x0000006fff001f] 0x40020 bytes, Dumped: 0x40020
|
CPU : [0x0000006ffb0000-0x0000006fff001f] 0x40020 bytes, Dumped: 0x40020
|
||||||
HPTE: [0x0000006fff0020-0x0000006fff101f] 0x1000 bytes, Dumped: 0x1000
|
HPTE: [0x0000006fff0020-0x0000006fff101f] 0x1000 bytes, Dumped: 0x1000
|
||||||
DUMP: [0x0000006fff1020-0x0000007fff101f] 0x10000000 bytes, Dumped: 0x10000000
|
DUMP: [0x0000006fff1020-0x0000007fff101f] 0x10000000 bytes, Dumped: 0x10000000
|
||||||
: [0x00000010000000-0x0000006ffaffff] 0x5ffb0000 bytes, Dumped: 0x5ffb0000
|
: [0x00000010000000-0x0000006ffaffff] 0x5ffb0000 bytes, Dumped: 0x5ffb0000
|
||||||
|
|
||||||
NOTE: Please refer to Documentation/filesystems/debugfs.txt on
|
NOTE:
|
||||||
|
Please refer to Documentation/filesystems/debugfs.txt on
|
||||||
how to mount the debugfs filesystem.
|
how to mount the debugfs filesystem.
|
||||||
|
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
-----
|
-----
|
||||||
o Need to come up with the better approach to find out more
|
- Need to come up with the better approach to find out more
|
||||||
accurate boot memory size that is required for a kernel to
|
accurate boot memory size that is required for a kernel to
|
||||||
boot successfully when booted with restricted memory.
|
boot successfully when booted with restricted memory.
|
||||||
o The fadump implementation introduces a fadump crash info structure
|
- The fadump implementation introduces a fadump crash info structure
|
||||||
in the scratch area before the ELF core header. The idea of introducing
|
in the scratch area before the ELF core header. The idea of introducing
|
||||||
this structure is to pass some important crash info data to the second
|
this structure is to pass some important crash info data to the second
|
||||||
kernel which will help second kernel to populate ELF core header with
|
kernel which will help second kernel to populate ELF core header with
|
||||||
@ -277,7 +281,9 @@ TODO:
|
|||||||
design implementation does not address a possibility of introducing
|
design implementation does not address a possibility of introducing
|
||||||
additional fields (in future) to this structure without affecting
|
additional fields (in future) to this structure without affecting
|
||||||
compatibility. Need to come up with the better approach to address this.
|
compatibility. Need to come up with the better approach to address this.
|
||||||
|
|
||||||
The possible approaches are:
|
The possible approaches are:
|
||||||
|
|
||||||
1. Introduce version field for version tracking, bump up the version
|
1. Introduce version field for version tracking, bump up the version
|
||||||
whenever a new field is added to the structure in future. The version
|
whenever a new field is added to the structure in future. The version
|
||||||
field can be used to find out what fields are valid for the current
|
field can be used to find out what fields are valid for the current
|
||||||
@ -285,8 +291,11 @@ TODO:
|
|||||||
2. Reserve the area of predefined size (say PAGE_SIZE) for this
|
2. Reserve the area of predefined size (say PAGE_SIZE) for this
|
||||||
structure and have unused area as reserved (initialized to zero)
|
structure and have unused area as reserved (initialized to zero)
|
||||||
for future field additions.
|
for future field additions.
|
||||||
|
|
||||||
The advantage of approach 1 over 2 is we don't need to reserve extra space.
|
The advantage of approach 1 over 2 is we don't need to reserve extra space.
|
||||||
---
|
|
||||||
Author: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
|
Author: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
|
||||||
|
|
||||||
This document is based on the original documentation written for phyp
|
This document is based on the original documentation written for phyp
|
||||||
|
|
||||||
assisted dump by Linas Vepstas and Manish Ahuja.
|
assisted dump by Linas Vepstas and Manish Ahuja.
|
@ -1,19 +1,22 @@
|
|||||||
===========================================================================
|
===============================================================
|
||||||
HVCS
|
HVCS IBM "Hypervisor Virtual Console Server" Installation Guide
|
||||||
IBM "Hypervisor Virtual Console Server" Installation Guide
|
===============================================================
|
||||||
for Linux Kernel 2.6.4+
|
|
||||||
Copyright (C) 2004 IBM Corporation
|
|
||||||
|
|
||||||
===========================================================================
|
for Linux Kernel 2.6.4+
|
||||||
NOTE:Eight space tabs are the optimum editor setting for reading this file.
|
|
||||||
===========================================================================
|
|
||||||
|
|
||||||
Author(s) : Ryan S. Arnold <rsa@us.ibm.com>
|
Copyright (C) 2004 IBM Corporation
|
||||||
Date Created: March, 02, 2004
|
|
||||||
Last Changed: August, 24, 2004
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
.. ===========================================================================
|
||||||
Table of contents:
|
.. NOTE:Eight space tabs are the optimum editor setting for reading this file.
|
||||||
|
.. ===========================================================================
|
||||||
|
|
||||||
|
|
||||||
|
Author(s): Ryan S. Arnold <rsa@us.ibm.com>
|
||||||
|
|
||||||
|
Date Created: March, 02, 2004
|
||||||
|
Last Changed: August, 24, 2004
|
||||||
|
|
||||||
|
.. Table of contents:
|
||||||
|
|
||||||
1. Driver Introduction:
|
1. Driver Introduction:
|
||||||
2. System Requirements
|
2. System Requirements
|
||||||
@ -27,8 +30,8 @@ Table of contents:
|
|||||||
8. Questions & Answers:
|
8. Questions & Answers:
|
||||||
9. Reporting Bugs:
|
9. Reporting Bugs:
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
1. Driver Introduction:
|
1. Driver Introduction:
|
||||||
|
=======================
|
||||||
|
|
||||||
This is the device driver for the IBM Hypervisor Virtual Console Server,
|
This is the device driver for the IBM Hypervisor Virtual Console Server,
|
||||||
"hvcs". The IBM hvcs provides a tty driver interface to allow Linux user
|
"hvcs". The IBM hvcs provides a tty driver interface to allow Linux user
|
||||||
@ -38,8 +41,8 @@ ppc64 system. Physical hardware consoles per partition are not practical
|
|||||||
on this hardware so system consoles are accessed by this driver using
|
on this hardware so system consoles are accessed by this driver using
|
||||||
firmware interfaces to virtual terminal devices.
|
firmware interfaces to virtual terminal devices.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
2. System Requirements:
|
2. System Requirements:
|
||||||
|
=======================
|
||||||
|
|
||||||
This device driver was written using 2.6.4 Linux kernel APIs and will only
|
This device driver was written using 2.6.4 Linux kernel APIs and will only
|
||||||
build and run on kernels of this version or later.
|
build and run on kernels of this version or later.
|
||||||
@ -52,8 +55,8 @@ Sysfs must be mounted on the system so that the user can determine which
|
|||||||
major and minor numbers are associated with each vty-server. Directions
|
major and minor numbers are associated with each vty-server. Directions
|
||||||
for sysfs mounting are outside the scope of this document.
|
for sysfs mounting are outside the scope of this document.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
3. Build Options:
|
3. Build Options:
|
||||||
|
=================
|
||||||
|
|
||||||
The hvcs driver registers itself as a tty driver. The tty layer
|
The hvcs driver registers itself as a tty driver. The tty layer
|
||||||
dynamically allocates a block of major and minor numbers in a quantity
|
dynamically allocates a block of major and minor numbers in a quantity
|
||||||
@ -65,11 +68,11 @@ If the default number of device entries is adequate then this driver can be
|
|||||||
built into the kernel. If not, the default can be over-ridden by inserting
|
built into the kernel. If not, the default can be over-ridden by inserting
|
||||||
the driver as a module with insmod parameters.
|
the driver as a module with insmod parameters.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
3.1 Built-in:
|
3.1 Built-in:
|
||||||
|
-------------
|
||||||
|
|
||||||
The following menuconfig example demonstrates selecting to build this
|
The following menuconfig example demonstrates selecting to build this
|
||||||
driver into the kernel.
|
driver into the kernel::
|
||||||
|
|
||||||
Device Drivers --->
|
Device Drivers --->
|
||||||
Character devices --->
|
Character devices --->
|
||||||
@ -77,11 +80,11 @@ driver into the kernel.
|
|||||||
|
|
||||||
Begin the kernel make process.
|
Begin the kernel make process.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
3.2 Module:
|
3.2 Module:
|
||||||
|
-----------
|
||||||
|
|
||||||
The following menuconfig example demonstrates selecting to build this
|
The following menuconfig example demonstrates selecting to build this
|
||||||
driver as a kernel module.
|
driver as a kernel module::
|
||||||
|
|
||||||
Device Drivers --->
|
Device Drivers --->
|
||||||
Character devices --->
|
Character devices --->
|
||||||
@ -89,11 +92,11 @@ driver as a kernel module.
|
|||||||
|
|
||||||
The make process will build the following kernel modules:
|
The make process will build the following kernel modules:
|
||||||
|
|
||||||
hvcs.ko
|
- hvcs.ko
|
||||||
hvcserver.ko
|
- hvcserver.ko
|
||||||
|
|
||||||
To insert the module with the default allocation execute the following
|
To insert the module with the default allocation execute the following
|
||||||
commands in the order they appear:
|
commands in the order they appear::
|
||||||
|
|
||||||
insmod hvcserver.ko
|
insmod hvcserver.ko
|
||||||
insmod hvcs.ko
|
insmod hvcs.ko
|
||||||
@ -103,7 +106,7 @@ be inserted first, otherwise the hvcs module will not find some of the
|
|||||||
symbols it expects.
|
symbols it expects.
|
||||||
|
|
||||||
To override the default use an insmod parameter as follows (requesting 4
|
To override the default use an insmod parameter as follows (requesting 4
|
||||||
tty devices as an example):
|
tty devices as an example)::
|
||||||
|
|
||||||
insmod hvcs.ko hvcs_parm_num_devs=4
|
insmod hvcs.ko hvcs_parm_num_devs=4
|
||||||
|
|
||||||
@ -115,31 +118,31 @@ source file before building.
|
|||||||
NOTE: The length of time it takes to insmod the driver seems to be related
|
NOTE: The length of time it takes to insmod the driver seems to be related
|
||||||
to the number of tty interfaces the registering driver requests.
|
to the number of tty interfaces the registering driver requests.
|
||||||
|
|
||||||
In order to remove the driver module execute the following command:
|
In order to remove the driver module execute the following command::
|
||||||
|
|
||||||
rmmod hvcs.ko
|
rmmod hvcs.ko
|
||||||
|
|
||||||
The recommended method for installing hvcs as a module is to use depmod to
|
The recommended method for installing hvcs as a module is to use depmod to
|
||||||
build a current modules.dep file in /lib/modules/`uname -r` and then
|
build a current modules.dep file in /lib/modules/`uname -r` and then
|
||||||
execute:
|
execute::
|
||||||
|
|
||||||
modprobe hvcs hvcs_parm_num_devs=4
|
modprobe hvcs hvcs_parm_num_devs=4
|
||||||
|
|
||||||
The modules.dep file indicates that hvcserver.ko needs to be inserted
|
The modules.dep file indicates that hvcserver.ko needs to be inserted
|
||||||
before hvcs.ko and modprobe uses this file to smartly insert the modules in
|
before hvcs.ko and modprobe uses this file to smartly insert the modules in
|
||||||
the proper order.
|
the proper order.
|
||||||
|
|
||||||
The following modprobe command is used to remove hvcs and hvcserver in the
|
The following modprobe command is used to remove hvcs and hvcserver in the
|
||||||
proper order:
|
proper order::
|
||||||
|
|
||||||
modprobe -r hvcs
|
modprobe -r hvcs
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
4. Installation:
|
4. Installation:
|
||||||
|
================
|
||||||
|
|
||||||
The tty layer creates sysfs entries which contain the major and minor
|
The tty layer creates sysfs entries which contain the major and minor
|
||||||
numbers allocated for the hvcs driver. The following snippet of "tree"
|
numbers allocated for the hvcs driver. The following snippet of "tree"
|
||||||
output of the sysfs directory shows where these numbers are presented:
|
output of the sysfs directory shows where these numbers are presented::
|
||||||
|
|
||||||
sys/
|
sys/
|
||||||
|-- *other sysfs base dirs*
|
|-- *other sysfs base dirs*
|
||||||
@ -164,7 +167,7 @@ output of the sysfs directory shows where these numbers are presented:
|
|||||||
|-- *other sysfs base dirs*
|
|-- *other sysfs base dirs*
|
||||||
|
|
||||||
For the above examples the following output is a result of cat'ing the
|
For the above examples the following output is a result of cat'ing the
|
||||||
"dev" entry in the hvcs directory:
|
"dev" entry in the hvcs directory::
|
||||||
|
|
||||||
Pow5:/sys/class/tty/hvcs0/ # cat dev
|
Pow5:/sys/class/tty/hvcs0/ # cat dev
|
||||||
254:0
|
254:0
|
||||||
@ -184,7 +187,7 @@ systems running hvcs will already have the device entries created or udev
|
|||||||
will do it automatically.
|
will do it automatically.
|
||||||
|
|
||||||
Given the example output above, to manually create a /dev/hvcs* node entry
|
Given the example output above, to manually create a /dev/hvcs* node entry
|
||||||
mknod can be used as follows:
|
mknod can be used as follows::
|
||||||
|
|
||||||
mknod /dev/hvcs0 c 254 0
|
mknod /dev/hvcs0 c 254 0
|
||||||
mknod /dev/hvcs1 c 254 1
|
mknod /dev/hvcs1 c 254 1
|
||||||
@ -195,15 +198,15 @@ Using mknod to manually create the device entries makes these device nodes
|
|||||||
persistent. Once created they will exist prior to the driver insmod.
|
persistent. Once created they will exist prior to the driver insmod.
|
||||||
|
|
||||||
Attempting to connect an application to /dev/hvcs* prior to insertion of
|
Attempting to connect an application to /dev/hvcs* prior to insertion of
|
||||||
the hvcs module will result in an error message similar to the following:
|
the hvcs module will result in an error message similar to the following::
|
||||||
|
|
||||||
"/dev/hvcs*: No such device".
|
"/dev/hvcs*: No such device".
|
||||||
|
|
||||||
NOTE: Just because there is a device node present doesn't mean that there
|
NOTE: Just because there is a device node present doesn't mean that there
|
||||||
is a vty-server device configured for that node.
|
is a vty-server device configured for that node.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
5. Connection
|
5. Connection
|
||||||
|
=============
|
||||||
|
|
||||||
Since this driver controls devices that provide a tty interface a user can
|
Since this driver controls devices that provide a tty interface a user can
|
||||||
interact with the device node entries using any standard tty-interactive
|
interact with the device node entries using any standard tty-interactive
|
||||||
@ -249,7 +252,7 @@ vty-server adapter is associated with which /dev/hvcs* node a special sysfs
|
|||||||
attribute has been added to each vty-server sysfs entry. This entry is
|
attribute has been added to each vty-server sysfs entry. This entry is
|
||||||
called "index" and showing it reveals an integer that refers to the
|
called "index" and showing it reveals an integer that refers to the
|
||||||
/dev/hvcs* entry to use to connect to that device. For instance cating the
|
/dev/hvcs* entry to use to connect to that device. For instance cating the
|
||||||
index attribute of vty-server adapter 30000004 shows the following.
|
index attribute of vty-server adapter 30000004 shows the following::
|
||||||
|
|
||||||
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat index
|
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat index
|
||||||
2
|
2
|
||||||
@ -262,8 +265,8 @@ system the /dev/hvcs* entry that interacts with a particular vty-server
|
|||||||
adapter is not guaranteed to remain the same across system reboots. Look
|
adapter is not guaranteed to remain the same across system reboots. Look
|
||||||
in the Q & A section for more on this issue.
|
in the Q & A section for more on this issue.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
6. Disconnection
|
6. Disconnection
|
||||||
|
================
|
||||||
|
|
||||||
As a security feature to prevent the delivery of stale data to an
|
As a security feature to prevent the delivery of stale data to an
|
||||||
unintended target the Power5 system firmware disables the fetching of data
|
unintended target the Power5 system firmware disables the fetching of data
|
||||||
@ -305,7 +308,7 @@ connection between the vty-server and target vty ONLY if the vterm_state
|
|||||||
previously read '1'. The write directive is ignored if the vterm_state
|
previously read '1'. The write directive is ignored if the vterm_state
|
||||||
read '0' or if any value other than '0' was written to the vterm_state
|
read '0' or if any value other than '0' was written to the vterm_state
|
||||||
attribute. The following example will show the method used for verifying
|
attribute. The following example will show the method used for verifying
|
||||||
the vty-server connection status and disconnecting a vty-server connection.
|
the vty-server connection status and disconnecting a vty-server connection::
|
||||||
|
|
||||||
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat vterm_state
|
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat vterm_state
|
||||||
1
|
1
|
||||||
@ -318,12 +321,12 @@ the vty-server connection status and disconnecting a vty-server connection.
|
|||||||
All vty-server connections are automatically terminated when the device is
|
All vty-server connections are automatically terminated when the device is
|
||||||
hotplug removed and when the module is removed.
|
hotplug removed and when the module is removed.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
7. Configuration
|
7. Configuration
|
||||||
|
================
|
||||||
|
|
||||||
Each vty-server has a sysfs entry in the /sys/devices/vio directory, which
|
Each vty-server has a sysfs entry in the /sys/devices/vio directory, which
|
||||||
is symlinked in several other sysfs tree directories, notably under the
|
is symlinked in several other sysfs tree directories, notably under the
|
||||||
hvcs driver entry, which looks like the following example:
|
hvcs driver entry, which looks like the following example::
|
||||||
|
|
||||||
Pow5:/sys/bus/vio/drivers/hvcs # ls
|
Pow5:/sys/bus/vio/drivers/hvcs # ls
|
||||||
. .. 30000003 30000004 rescan
|
. .. 30000003 30000004 rescan
|
||||||
@ -344,7 +347,7 @@ completed or was never executed.
|
|||||||
|
|
||||||
Vty-server entries in this directory are a 32 bit partition unique unit
|
Vty-server entries in this directory are a 32 bit partition unique unit
|
||||||
address that is created by firmware. An example vty-server sysfs entry
|
address that is created by firmware. An example vty-server sysfs entry
|
||||||
looks like the following:
|
looks like the following::
|
||||||
|
|
||||||
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # ls
|
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # ls
|
||||||
. current_vty devspec name partner_vtys
|
. current_vty devspec name partner_vtys
|
||||||
@ -352,21 +355,21 @@ looks like the following:
|
|||||||
|
|
||||||
Each entry is provided, by default with a "name" attribute. Reading the
|
Each entry is provided, by default with a "name" attribute. Reading the
|
||||||
"name" attribute will reveal the device type as shown in the following
|
"name" attribute will reveal the device type as shown in the following
|
||||||
example:
|
example::
|
||||||
|
|
||||||
Pow5:/sys/bus/vio/drivers/hvcs/30000003 # cat name
|
Pow5:/sys/bus/vio/drivers/hvcs/30000003 # cat name
|
||||||
vty-server
|
vty-server
|
||||||
|
|
||||||
Each entry is also provided, by default, with a "devspec" attribute which
|
Each entry is also provided, by default, with a "devspec" attribute which
|
||||||
reveals the full device specification when read, as shown in the following
|
reveals the full device specification when read, as shown in the following
|
||||||
example:
|
example::
|
||||||
|
|
||||||
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat devspec
|
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat devspec
|
||||||
/vdevice/vty-server@30000004
|
/vdevice/vty-server@30000004
|
||||||
|
|
||||||
Each vty-server sysfs dir is provided with two read-only attributes that
|
Each vty-server sysfs dir is provided with two read-only attributes that
|
||||||
provide lists of easily parsed partner vty data: "partner_vtys" and
|
provide lists of easily parsed partner vty data: "partner_vtys" and
|
||||||
"partner_clcs".
|
"partner_clcs"::
|
||||||
|
|
||||||
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat partner_vtys
|
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # cat partner_vtys
|
||||||
30000000
|
30000000
|
||||||
@ -396,7 +399,7 @@ A vty-server can only be connected to a single vty at a time. The entry,
|
|||||||
read.
|
read.
|
||||||
|
|
||||||
The current_vty can be changed by writing a valid partner clc to the entry
|
The current_vty can be changed by writing a valid partner clc to the entry
|
||||||
as in the following example:
|
as in the following example::
|
||||||
|
|
||||||
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # echo U5112.428.10304
|
Pow5:/sys/bus/vio/drivers/hvcs/30000004 # echo U5112.428.10304
|
||||||
8A-V4-C0 > current_vty
|
8A-V4-C0 > current_vty
|
||||||
@ -408,9 +411,9 @@ currently open connection is freed.
|
|||||||
Information on the "vterm_state" attribute was covered earlier on the
|
Information on the "vterm_state" attribute was covered earlier on the
|
||||||
chapter entitled "disconnection".
|
chapter entitled "disconnection".
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
8. Questions & Answers:
|
8. Questions & Answers:
|
||||||
===========================================================================
|
=======================
|
||||||
|
|
||||||
Q: What are the security concerns involving hvcs?
|
Q: What are the security concerns involving hvcs?
|
||||||
|
|
||||||
A: There are three main security concerns:
|
A: There are three main security concerns:
|
||||||
@ -429,6 +432,7 @@ A: There are three main security concerns:
|
|||||||
partition) will experience the previously logged in session.
|
partition) will experience the previously logged in session.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: How do I multiplex a console that I grab through hvcs so that other
|
Q: How do I multiplex a console that I grab through hvcs so that other
|
||||||
people can see it:
|
people can see it:
|
||||||
|
|
||||||
@ -440,6 +444,7 @@ term type "screen" to others. This means that curses based programs may
|
|||||||
not display properly in screen sessions.
|
not display properly in screen sessions.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: Why are the colors all messed up?
|
Q: Why are the colors all messed up?
|
||||||
Q: Why are the control characters acting strange or not working?
|
Q: Why are the control characters acting strange or not working?
|
||||||
Q: Why is the console output all strange and unintelligible?
|
Q: Why is the console output all strange and unintelligible?
|
||||||
@ -455,6 +460,7 @@ disconnect from the console. This will ensure that the next user gets
|
|||||||
their own TERM type set when they login.
|
their own TERM type set when they login.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: When I try to CONNECT kermit to an hvcs device I get:
|
Q: When I try to CONNECT kermit to an hvcs device I get:
|
||||||
"Sorry, can't open connection: /dev/hvcs*"What is happening?
|
"Sorry, can't open connection: /dev/hvcs*"What is happening?
|
||||||
|
|
||||||
@ -490,6 +496,7 @@ A: There is not a corresponding vty-server device that maps to an existing
|
|||||||
/dev/hvcs* entry.
|
/dev/hvcs* entry.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: When I try to CONNECT kermit to an hvcs device I get:
|
Q: When I try to CONNECT kermit to an hvcs device I get:
|
||||||
"Sorry, write access to UUCP lockfile directory denied."
|
"Sorry, write access to UUCP lockfile directory denied."
|
||||||
|
|
||||||
@ -497,6 +504,7 @@ A: The /dev/hvcs* entry you have specified doesn't exist where you said it
|
|||||||
does? Maybe you haven't inserted the module (on systems with udev).
|
does? Maybe you haven't inserted the module (on systems with udev).
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: If I already have one Linux partition installed can I use hvcs on said
|
Q: If I already have one Linux partition installed can I use hvcs on said
|
||||||
partition to provide the console for the install of a second Linux
|
partition to provide the console for the install of a second Linux
|
||||||
partition?
|
partition?
|
||||||
@ -505,6 +513,7 @@ A: Yes granted that your are connected to the /dev/hvcs* device using
|
|||||||
kermit or cu or some other program that doesn't provide terminal emulation.
|
kermit or cu or some other program that doesn't provide terminal emulation.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: Can I connect to more than one partition's console at a time using this
|
Q: Can I connect to more than one partition's console at a time using this
|
||||||
driver?
|
driver?
|
||||||
|
|
||||||
@ -512,6 +521,7 @@ A: Yes. Of course this means that there must be more than one vty-server
|
|||||||
configured for this partition and each must point to a disconnected vty.
|
configured for this partition and each must point to a disconnected vty.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: Does the hvcs driver support dynamic (hotplug) addition of devices?
|
Q: Does the hvcs driver support dynamic (hotplug) addition of devices?
|
||||||
|
|
||||||
A: Yes, if you have dlpar and hotplug enabled for your system and it has
|
A: Yes, if you have dlpar and hotplug enabled for your system and it has
|
||||||
@ -519,6 +529,7 @@ been built into the kernel the hvcs drivers is configured to dynamically
|
|||||||
handle additions of new devices and removals of unused devices.
|
handle additions of new devices and removals of unused devices.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: For some reason /dev/hvcs* doesn't map to the same vty-server adapter
|
Q: For some reason /dev/hvcs* doesn't map to the same vty-server adapter
|
||||||
after a reboot. What happened?
|
after a reboot. What happened?
|
||||||
|
|
||||||
@ -533,6 +544,7 @@ on how to determine which vty-server goes with which /dev/hvcs* node.
|
|||||||
Hint; look at the sysfs "index" attribute for the vty-server.
|
Hint; look at the sysfs "index" attribute for the vty-server.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: Can I use /dev/hvcs* as a conduit to another partition and use a tty
|
Q: Can I use /dev/hvcs* as a conduit to another partition and use a tty
|
||||||
device on that partition as the other end of the pipe?
|
device on that partition as the other end of the pipe?
|
||||||
|
|
||||||
@ -554,7 +566,9 @@ read or write to /dev/hvcs*. Now you have a tty conduit between two
|
|||||||
partitions.
|
partitions.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
9. Reporting Bugs:
|
9. Reporting Bugs:
|
||||||
|
==================
|
||||||
|
|
||||||
The proper channel for reporting bugs is either through the Linux OS
|
The proper channel for reporting bugs is either through the Linux OS
|
||||||
distribution company that provided your OS or by posting issues to the
|
distribution company that provided your OS or by posting issues to the
|
34
Documentation/powerpc/index.rst
Normal file
34
Documentation/powerpc/index.rst
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
=======
|
||||||
|
powerpc
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
bootwrapper
|
||||||
|
cpu_families
|
||||||
|
cpu_features
|
||||||
|
cxl
|
||||||
|
cxlflash
|
||||||
|
dawr-power9
|
||||||
|
dscr
|
||||||
|
eeh-pci-error-recovery
|
||||||
|
firmware-assisted-dump
|
||||||
|
hvcs
|
||||||
|
isa-versions
|
||||||
|
mpc52xx
|
||||||
|
pci_iov_resource_on_powernv
|
||||||
|
pmu-ebb
|
||||||
|
ptrace
|
||||||
|
qe_firmware
|
||||||
|
syscall64-abi
|
||||||
|
transactional_memory
|
||||||
|
|
||||||
|
.. only:: subproject and html
|
||||||
|
|
||||||
|
Indices
|
||||||
|
=======
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
@ -1,13 +1,12 @@
|
|||||||
:orphan:
|
==========================
|
||||||
|
|
||||||
CPU to ISA Version Mapping
|
CPU to ISA Version Mapping
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
Mapping of some CPU versions to relevant ISA versions.
|
Mapping of some CPU versions to relevant ISA versions.
|
||||||
|
|
||||||
========= ====================
|
========= ====================================================================
|
||||||
CPU Architecture version
|
CPU Architecture version
|
||||||
========= ====================
|
========= ====================================================================
|
||||||
Power9 Power ISA v3.0B
|
Power9 Power ISA v3.0B
|
||||||
Power8 Power ISA v2.07
|
Power8 Power ISA v2.07
|
||||||
Power7 Power ISA v2.06
|
Power7 Power ISA v2.06
|
||||||
@ -24,7 +23,7 @@ PPC970 - PowerPC User Instruction Set Architecture Book I v2.01
|
|||||||
- PowerPC Virtual Environment Architecture Book II v2.01
|
- PowerPC Virtual Environment Architecture Book II v2.01
|
||||||
- PowerPC Operating Environment Architecture Book III v2.01
|
- PowerPC Operating Environment Architecture Book III v2.01
|
||||||
- Plus Altivec/VMX ~= 2.03
|
- Plus Altivec/VMX ~= 2.03
|
||||||
========= ====================
|
========= ====================================================================
|
||||||
|
|
||||||
|
|
||||||
Key Features
|
Key Features
|
||||||
@ -60,9 +59,9 @@ Power5 No
|
|||||||
PPC970 No
|
PPC970 No
|
||||||
========== ====
|
========== ====
|
||||||
|
|
||||||
========== ====================
|
========== ====================================
|
||||||
CPU Transactional Memory
|
CPU Transactional Memory
|
||||||
========== ====================
|
========== ====================================
|
||||||
Power9 Yes (* see transactional_memory.txt)
|
Power9 Yes (* see transactional_memory.txt)
|
||||||
Power8 Yes
|
Power8 Yes
|
||||||
Power7 No
|
Power7 No
|
||||||
@ -73,4 +72,4 @@ Power5++ No
|
|||||||
Power5+ No
|
Power5+ No
|
||||||
Power5 No
|
Power5 No
|
||||||
PPC970 No
|
PPC970 No
|
||||||
========== ====================
|
========== ====================================
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
|
=============================
|
||||||
Linux 2.6.x on MPC52xx family
|
Linux 2.6.x on MPC52xx family
|
||||||
-----------------------------
|
=============================
|
||||||
|
|
||||||
For the latest info, go to http://www.246tNt.com/mpc52xx/
|
For the latest info, go to http://www.246tNt.com/mpc52xx/
|
||||||
|
|
||||||
To compile/use :
|
To compile/use :
|
||||||
|
|
||||||
- U-Boot:
|
- U-Boot::
|
||||||
|
|
||||||
# <edit Makefile to set ARCH=ppc & CROSS_COMPILE=... ( also EXTRAVERSION
|
# <edit Makefile to set ARCH=ppc & CROSS_COMPILE=... ( also EXTRAVERSION
|
||||||
if you wish to ).
|
if you wish to ).
|
||||||
# make lite5200_defconfig
|
# make lite5200_defconfig
|
||||||
@ -16,7 +18,8 @@ To compile/use :
|
|||||||
=> tftpboot 400000 pRamdisk
|
=> tftpboot 400000 pRamdisk
|
||||||
=> bootm 200000 400000
|
=> bootm 200000 400000
|
||||||
|
|
||||||
- DBug:
|
- DBug::
|
||||||
|
|
||||||
# <edit Makefile to set ARCH=ppc & CROSS_COMPILE=... ( also EXTRAVERSION
|
# <edit Makefile to set ARCH=ppc & CROSS_COMPILE=... ( also EXTRAVERSION
|
||||||
if you wish to ).
|
if you wish to ).
|
||||||
# make lite5200_defconfig
|
# make lite5200_defconfig
|
||||||
@ -28,7 +31,8 @@ To compile/use :
|
|||||||
DBug> dn -i zImage.initrd.lite5200
|
DBug> dn -i zImage.initrd.lite5200
|
||||||
|
|
||||||
|
|
||||||
Some remarks :
|
Some remarks:
|
||||||
|
|
||||||
- The port is named mpc52xxx, and config options are PPC_MPC52xx. The MGT5100
|
- The port is named mpc52xxx, and config options are PPC_MPC52xx. The MGT5100
|
||||||
is not supported, and I'm not sure anyone is interesting in working on it
|
is not supported, and I'm not sure anyone is interesting in working on it
|
||||||
so. I didn't took 5xxx because there's apparently a lot of 5xxx that have
|
so. I didn't took 5xxx because there's apparently a lot of 5xxx that have
|
@ -1,6 +1,13 @@
|
|||||||
|
===================================================
|
||||||
|
PCI Express I/O Virtualization Resource on Powerenv
|
||||||
|
===================================================
|
||||||
|
|
||||||
Wei Yang <weiyang@linux.vnet.ibm.com>
|
Wei Yang <weiyang@linux.vnet.ibm.com>
|
||||||
|
|
||||||
Benjamin Herrenschmidt <benh@au1.ibm.com>
|
Benjamin Herrenschmidt <benh@au1.ibm.com>
|
||||||
|
|
||||||
Bjorn Helgaas <bhelgaas@google.com>
|
Bjorn Helgaas <bhelgaas@google.com>
|
||||||
|
|
||||||
26 Aug 2014
|
26 Aug 2014
|
||||||
|
|
||||||
This document describes the requirement from hardware for PCI MMIO resource
|
This document describes the requirement from hardware for PCI MMIO resource
|
||||||
@ -10,6 +17,7 @@ Endpoints and the implementation on P8 (IODA2). The next two sections talks
|
|||||||
about considerations on enabling SRIOV on IODA2.
|
about considerations on enabling SRIOV on IODA2.
|
||||||
|
|
||||||
1. Introduction to Partitionable Endpoints
|
1. Introduction to Partitionable Endpoints
|
||||||
|
==========================================
|
||||||
|
|
||||||
A Partitionable Endpoint (PE) is a way to group the various resources
|
A Partitionable Endpoint (PE) is a way to group the various resources
|
||||||
associated with a device or a set of devices to provide isolation between
|
associated with a device or a set of devices to provide isolation between
|
||||||
@ -35,6 +43,7 @@ is a completely separate HW entity that replicates the entire logic, so has
|
|||||||
its own set of PEs, etc.
|
its own set of PEs, etc.
|
||||||
|
|
||||||
2. Implementation of Partitionable Endpoints on P8 (IODA2)
|
2. Implementation of Partitionable Endpoints on P8 (IODA2)
|
||||||
|
==========================================================
|
||||||
|
|
||||||
P8 supports up to 256 Partitionable Endpoints per PHB.
|
P8 supports up to 256 Partitionable Endpoints per PHB.
|
||||||
|
|
||||||
@ -149,6 +158,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB.
|
|||||||
sense, but we haven't done it yet.
|
sense, but we haven't done it yet.
|
||||||
|
|
||||||
3. Considerations for SR-IOV on PowerKVM
|
3. Considerations for SR-IOV on PowerKVM
|
||||||
|
========================================
|
||||||
|
|
||||||
* SR-IOV Background
|
* SR-IOV Background
|
||||||
|
|
||||||
@ -224,7 +234,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB.
|
|||||||
IODA supports 256 PEs, so segmented windows contain 256 segments, so if
|
IODA supports 256 PEs, so segmented windows contain 256 segments, so if
|
||||||
total_VFs is less than 256, we have the situation in Figure 1.0, where
|
total_VFs is less than 256, we have the situation in Figure 1.0, where
|
||||||
segments [total_VFs, 255] of the M64 window may map to some MMIO range on
|
segments [total_VFs, 255] of the M64 window may map to some MMIO range on
|
||||||
other devices:
|
other devices::
|
||||||
|
|
||||||
0 1 total_VFs - 1
|
0 1 total_VFs - 1
|
||||||
+------+------+- -+------+------+
|
+------+------+- -+------+------+
|
||||||
@ -243,7 +253,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB.
|
|||||||
Figure 1.0 Direct map VF(n) BAR space
|
Figure 1.0 Direct map VF(n) BAR space
|
||||||
|
|
||||||
Our current solution is to allocate 256 segments even if the VF(n) BAR
|
Our current solution is to allocate 256 segments even if the VF(n) BAR
|
||||||
space doesn't need that much, as shown in Figure 1.1:
|
space doesn't need that much, as shown in Figure 1.1::
|
||||||
|
|
||||||
0 1 total_VFs - 1 255
|
0 1 total_VFs - 1 255
|
||||||
+------+------+- -+------+------+- -+------+------+
|
+------+------+- -+------+------+- -+------+------+
|
||||||
@ -269,6 +279,7 @@ P8 supports up to 256 Partitionable Endpoints per PHB.
|
|||||||
responds to segments [total_VFs, 255].
|
responds to segments [total_VFs, 255].
|
||||||
|
|
||||||
4. Implications for the Generic PCI Code
|
4. Implications for the Generic PCI Code
|
||||||
|
========================================
|
||||||
|
|
||||||
The PCIe SR-IOV spec requires that the base of the VF(n) BAR space be
|
The PCIe SR-IOV spec requires that the base of the VF(n) BAR space be
|
||||||
aligned to the size of an individual VF BAR.
|
aligned to the size of an individual VF BAR.
|
@ -1,3 +1,4 @@
|
|||||||
|
========================
|
||||||
PMU Event Based Branches
|
PMU Event Based Branches
|
||||||
========================
|
========================
|
||||||
|
|
156
Documentation/powerpc/ptrace.rst
Normal file
156
Documentation/powerpc/ptrace.rst
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
======
|
||||||
|
Ptrace
|
||||||
|
======
|
||||||
|
|
||||||
|
GDB intends to support the following hardware debug features of BookE
|
||||||
|
processors:
|
||||||
|
|
||||||
|
4 hardware breakpoints (IAC)
|
||||||
|
2 hardware watchpoints (read, write and read-write) (DAC)
|
||||||
|
2 value conditions for the hardware watchpoints (DVC)
|
||||||
|
|
||||||
|
For that, we need to extend ptrace so that GDB can query and set these
|
||||||
|
resources. Since we're extending, we're trying to create an interface
|
||||||
|
that's extendable and that covers both BookE and server processors, so
|
||||||
|
that GDB doesn't need to special-case each of them. We added the
|
||||||
|
following 3 new ptrace requests.
|
||||||
|
|
||||||
|
1. PTRACE_PPC_GETHWDEBUGINFO
|
||||||
|
============================
|
||||||
|
|
||||||
|
Query for GDB to discover the hardware debug features. The main info to
|
||||||
|
be returned here is the minimum alignment for the hardware watchpoints.
|
||||||
|
BookE processors don't have restrictions here, but server processors have
|
||||||
|
an 8-byte alignment restriction for hardware watchpoints. We'd like to avoid
|
||||||
|
adding special cases to GDB based on what it sees in AUXV.
|
||||||
|
|
||||||
|
Since we're at it, we added other useful info that the kernel can return to
|
||||||
|
GDB: this query will return the number of hardware breakpoints, hardware
|
||||||
|
watchpoints and whether it supports a range of addresses and a condition.
|
||||||
|
The query will fill the following structure provided by the requesting process::
|
||||||
|
|
||||||
|
struct ppc_debug_info {
|
||||||
|
unit32_t version;
|
||||||
|
unit32_t num_instruction_bps;
|
||||||
|
unit32_t num_data_bps;
|
||||||
|
unit32_t num_condition_regs;
|
||||||
|
unit32_t data_bp_alignment;
|
||||||
|
unit32_t sizeof_condition; /* size of the DVC register */
|
||||||
|
uint64_t features; /* bitmask of the individual flags */
|
||||||
|
};
|
||||||
|
|
||||||
|
features will have bits indicating whether there is support for::
|
||||||
|
|
||||||
|
#define PPC_DEBUG_FEATURE_INSN_BP_RANGE 0x1
|
||||||
|
#define PPC_DEBUG_FEATURE_INSN_BP_MASK 0x2
|
||||||
|
#define PPC_DEBUG_FEATURE_DATA_BP_RANGE 0x4
|
||||||
|
#define PPC_DEBUG_FEATURE_DATA_BP_MASK 0x8
|
||||||
|
#define PPC_DEBUG_FEATURE_DATA_BP_DAWR 0x10
|
||||||
|
|
||||||
|
2. PTRACE_SETHWDEBUG
|
||||||
|
|
||||||
|
Sets a hardware breakpoint or watchpoint, according to the provided structure::
|
||||||
|
|
||||||
|
struct ppc_hw_breakpoint {
|
||||||
|
uint32_t version;
|
||||||
|
#define PPC_BREAKPOINT_TRIGGER_EXECUTE 0x1
|
||||||
|
#define PPC_BREAKPOINT_TRIGGER_READ 0x2
|
||||||
|
#define PPC_BREAKPOINT_TRIGGER_WRITE 0x4
|
||||||
|
uint32_t trigger_type; /* only some combinations allowed */
|
||||||
|
#define PPC_BREAKPOINT_MODE_EXACT 0x0
|
||||||
|
#define PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE 0x1
|
||||||
|
#define PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE 0x2
|
||||||
|
#define PPC_BREAKPOINT_MODE_MASK 0x3
|
||||||
|
uint32_t addr_mode; /* address match mode */
|
||||||
|
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_MODE 0x3
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_NONE 0x0
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_AND 0x1
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_EXACT 0x1 /* different name for the same thing as above */
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_OR 0x2
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_AND_OR 0x3
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_BE_ALL 0x00ff0000 /* byte enable bits */
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_BE(n) (1<<((n)+16))
|
||||||
|
uint32_t condition_mode; /* break/watchpoint condition flags */
|
||||||
|
|
||||||
|
uint64_t addr;
|
||||||
|
uint64_t addr2;
|
||||||
|
uint64_t condition_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
A request specifies one event, not necessarily just one register to be set.
|
||||||
|
For instance, if the request is for a watchpoint with a condition, both the
|
||||||
|
DAC and DVC registers will be set in the same request.
|
||||||
|
|
||||||
|
With this GDB can ask for all kinds of hardware breakpoints and watchpoints
|
||||||
|
that the BookE supports. COMEFROM breakpoints available in server processors
|
||||||
|
are not contemplated, but that is out of the scope of this work.
|
||||||
|
|
||||||
|
ptrace will return an integer (handle) uniquely identifying the breakpoint or
|
||||||
|
watchpoint just created. This integer will be used in the PTRACE_DELHWDEBUG
|
||||||
|
request to ask for its removal. Return -ENOSPC if the requested breakpoint
|
||||||
|
can't be allocated on the registers.
|
||||||
|
|
||||||
|
Some examples of using the structure to:
|
||||||
|
|
||||||
|
- set a breakpoint in the first breakpoint register::
|
||||||
|
|
||||||
|
p.version = PPC_DEBUG_CURRENT_VERSION;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
||||||
|
p.addr = (uint64_t) address;
|
||||||
|
p.addr2 = 0;
|
||||||
|
p.condition_value = 0;
|
||||||
|
|
||||||
|
- set a watchpoint which triggers on reads in the second watchpoint register::
|
||||||
|
|
||||||
|
p.version = PPC_DEBUG_CURRENT_VERSION;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
||||||
|
p.addr = (uint64_t) address;
|
||||||
|
p.addr2 = 0;
|
||||||
|
p.condition_value = 0;
|
||||||
|
|
||||||
|
- set a watchpoint which triggers only with a specific value::
|
||||||
|
|
||||||
|
p.version = PPC_DEBUG_CURRENT_VERSION;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_AND | PPC_BREAKPOINT_CONDITION_BE_ALL;
|
||||||
|
p.addr = (uint64_t) address;
|
||||||
|
p.addr2 = 0;
|
||||||
|
p.condition_value = (uint64_t) condition;
|
||||||
|
|
||||||
|
- set a ranged hardware breakpoint::
|
||||||
|
|
||||||
|
p.version = PPC_DEBUG_CURRENT_VERSION;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
||||||
|
p.addr = (uint64_t) begin_range;
|
||||||
|
p.addr2 = (uint64_t) end_range;
|
||||||
|
p.condition_value = 0;
|
||||||
|
|
||||||
|
- set a watchpoint in server processors (BookS)::
|
||||||
|
|
||||||
|
p.version = 1;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_RW;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
|
||||||
|
or
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
||||||
|
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
||||||
|
p.addr = (uint64_t) begin_range;
|
||||||
|
/* For PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE addr2 needs to be specified, where
|
||||||
|
* addr2 - addr <= 8 Bytes.
|
||||||
|
*/
|
||||||
|
p.addr2 = (uint64_t) end_range;
|
||||||
|
p.condition_value = 0;
|
||||||
|
|
||||||
|
3. PTRACE_DELHWDEBUG
|
||||||
|
|
||||||
|
Takes an integer which identifies an existing breakpoint or watchpoint
|
||||||
|
(i.e., the value returned from PTRACE_SETHWDEBUG), and deletes the
|
||||||
|
corresponding breakpoint or watchpoint..
|
@ -1,151 +0,0 @@
|
|||||||
GDB intends to support the following hardware debug features of BookE
|
|
||||||
processors:
|
|
||||||
|
|
||||||
4 hardware breakpoints (IAC)
|
|
||||||
2 hardware watchpoints (read, write and read-write) (DAC)
|
|
||||||
2 value conditions for the hardware watchpoints (DVC)
|
|
||||||
|
|
||||||
For that, we need to extend ptrace so that GDB can query and set these
|
|
||||||
resources. Since we're extending, we're trying to create an interface
|
|
||||||
that's extendable and that covers both BookE and server processors, so
|
|
||||||
that GDB doesn't need to special-case each of them. We added the
|
|
||||||
following 3 new ptrace requests.
|
|
||||||
|
|
||||||
1. PTRACE_PPC_GETHWDEBUGINFO
|
|
||||||
|
|
||||||
Query for GDB to discover the hardware debug features. The main info to
|
|
||||||
be returned here is the minimum alignment for the hardware watchpoints.
|
|
||||||
BookE processors don't have restrictions here, but server processors have
|
|
||||||
an 8-byte alignment restriction for hardware watchpoints. We'd like to avoid
|
|
||||||
adding special cases to GDB based on what it sees in AUXV.
|
|
||||||
|
|
||||||
Since we're at it, we added other useful info that the kernel can return to
|
|
||||||
GDB: this query will return the number of hardware breakpoints, hardware
|
|
||||||
watchpoints and whether it supports a range of addresses and a condition.
|
|
||||||
The query will fill the following structure provided by the requesting process:
|
|
||||||
|
|
||||||
struct ppc_debug_info {
|
|
||||||
unit32_t version;
|
|
||||||
unit32_t num_instruction_bps;
|
|
||||||
unit32_t num_data_bps;
|
|
||||||
unit32_t num_condition_regs;
|
|
||||||
unit32_t data_bp_alignment;
|
|
||||||
unit32_t sizeof_condition; /* size of the DVC register */
|
|
||||||
uint64_t features; /* bitmask of the individual flags */
|
|
||||||
};
|
|
||||||
|
|
||||||
features will have bits indicating whether there is support for:
|
|
||||||
|
|
||||||
#define PPC_DEBUG_FEATURE_INSN_BP_RANGE 0x1
|
|
||||||
#define PPC_DEBUG_FEATURE_INSN_BP_MASK 0x2
|
|
||||||
#define PPC_DEBUG_FEATURE_DATA_BP_RANGE 0x4
|
|
||||||
#define PPC_DEBUG_FEATURE_DATA_BP_MASK 0x8
|
|
||||||
#define PPC_DEBUG_FEATURE_DATA_BP_DAWR 0x10
|
|
||||||
|
|
||||||
2. PTRACE_SETHWDEBUG
|
|
||||||
|
|
||||||
Sets a hardware breakpoint or watchpoint, according to the provided structure:
|
|
||||||
|
|
||||||
struct ppc_hw_breakpoint {
|
|
||||||
uint32_t version;
|
|
||||||
#define PPC_BREAKPOINT_TRIGGER_EXECUTE 0x1
|
|
||||||
#define PPC_BREAKPOINT_TRIGGER_READ 0x2
|
|
||||||
#define PPC_BREAKPOINT_TRIGGER_WRITE 0x4
|
|
||||||
uint32_t trigger_type; /* only some combinations allowed */
|
|
||||||
#define PPC_BREAKPOINT_MODE_EXACT 0x0
|
|
||||||
#define PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE 0x1
|
|
||||||
#define PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE 0x2
|
|
||||||
#define PPC_BREAKPOINT_MODE_MASK 0x3
|
|
||||||
uint32_t addr_mode; /* address match mode */
|
|
||||||
|
|
||||||
#define PPC_BREAKPOINT_CONDITION_MODE 0x3
|
|
||||||
#define PPC_BREAKPOINT_CONDITION_NONE 0x0
|
|
||||||
#define PPC_BREAKPOINT_CONDITION_AND 0x1
|
|
||||||
#define PPC_BREAKPOINT_CONDITION_EXACT 0x1 /* different name for the same thing as above */
|
|
||||||
#define PPC_BREAKPOINT_CONDITION_OR 0x2
|
|
||||||
#define PPC_BREAKPOINT_CONDITION_AND_OR 0x3
|
|
||||||
#define PPC_BREAKPOINT_CONDITION_BE_ALL 0x00ff0000 /* byte enable bits */
|
|
||||||
#define PPC_BREAKPOINT_CONDITION_BE(n) (1<<((n)+16))
|
|
||||||
uint32_t condition_mode; /* break/watchpoint condition flags */
|
|
||||||
|
|
||||||
uint64_t addr;
|
|
||||||
uint64_t addr2;
|
|
||||||
uint64_t condition_value;
|
|
||||||
};
|
|
||||||
|
|
||||||
A request specifies one event, not necessarily just one register to be set.
|
|
||||||
For instance, if the request is for a watchpoint with a condition, both the
|
|
||||||
DAC and DVC registers will be set in the same request.
|
|
||||||
|
|
||||||
With this GDB can ask for all kinds of hardware breakpoints and watchpoints
|
|
||||||
that the BookE supports. COMEFROM breakpoints available in server processors
|
|
||||||
are not contemplated, but that is out of the scope of this work.
|
|
||||||
|
|
||||||
ptrace will return an integer (handle) uniquely identifying the breakpoint or
|
|
||||||
watchpoint just created. This integer will be used in the PTRACE_DELHWDEBUG
|
|
||||||
request to ask for its removal. Return -ENOSPC if the requested breakpoint
|
|
||||||
can't be allocated on the registers.
|
|
||||||
|
|
||||||
Some examples of using the structure to:
|
|
||||||
|
|
||||||
- set a breakpoint in the first breakpoint register
|
|
||||||
|
|
||||||
p.version = PPC_DEBUG_CURRENT_VERSION;
|
|
||||||
p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
|
|
||||||
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
|
||||||
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
|
||||||
p.addr = (uint64_t) address;
|
|
||||||
p.addr2 = 0;
|
|
||||||
p.condition_value = 0;
|
|
||||||
|
|
||||||
- set a watchpoint which triggers on reads in the second watchpoint register
|
|
||||||
|
|
||||||
p.version = PPC_DEBUG_CURRENT_VERSION;
|
|
||||||
p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ;
|
|
||||||
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
|
||||||
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
|
||||||
p.addr = (uint64_t) address;
|
|
||||||
p.addr2 = 0;
|
|
||||||
p.condition_value = 0;
|
|
||||||
|
|
||||||
- set a watchpoint which triggers only with a specific value
|
|
||||||
|
|
||||||
p.version = PPC_DEBUG_CURRENT_VERSION;
|
|
||||||
p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ;
|
|
||||||
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
|
||||||
p.condition_mode = PPC_BREAKPOINT_CONDITION_AND | PPC_BREAKPOINT_CONDITION_BE_ALL;
|
|
||||||
p.addr = (uint64_t) address;
|
|
||||||
p.addr2 = 0;
|
|
||||||
p.condition_value = (uint64_t) condition;
|
|
||||||
|
|
||||||
- set a ranged hardware breakpoint
|
|
||||||
|
|
||||||
p.version = PPC_DEBUG_CURRENT_VERSION;
|
|
||||||
p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
|
|
||||||
p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
|
|
||||||
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
|
||||||
p.addr = (uint64_t) begin_range;
|
|
||||||
p.addr2 = (uint64_t) end_range;
|
|
||||||
p.condition_value = 0;
|
|
||||||
|
|
||||||
- set a watchpoint in server processors (BookS)
|
|
||||||
|
|
||||||
p.version = 1;
|
|
||||||
p.trigger_type = PPC_BREAKPOINT_TRIGGER_RW;
|
|
||||||
p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
|
|
||||||
or
|
|
||||||
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
|
||||||
|
|
||||||
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
|
||||||
p.addr = (uint64_t) begin_range;
|
|
||||||
/* For PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE addr2 needs to be specified, where
|
|
||||||
* addr2 - addr <= 8 Bytes.
|
|
||||||
*/
|
|
||||||
p.addr2 = (uint64_t) end_range;
|
|
||||||
p.condition_value = 0;
|
|
||||||
|
|
||||||
3. PTRACE_DELHWDEBUG
|
|
||||||
|
|
||||||
Takes an integer which identifies an existing breakpoint or watchpoint
|
|
||||||
(i.e., the value returned from PTRACE_SETHWDEBUG), and deletes the
|
|
||||||
corresponding breakpoint or watchpoint..
|
|
@ -1,23 +1,23 @@
|
|||||||
Freescale QUICC Engine Firmware Uploading
|
=========================================
|
||||||
-----------------------------------------
|
Freescale QUICC Engine Firmware Uploading
|
||||||
|
=========================================
|
||||||
|
|
||||||
(c) 2007 Timur Tabi <timur at freescale.com>,
|
(c) 2007 Timur Tabi <timur at freescale.com>,
|
||||||
Freescale Semiconductor
|
Freescale Semiconductor
|
||||||
|
|
||||||
Table of Contents
|
.. Table of Contents
|
||||||
=================
|
|
||||||
|
|
||||||
I - Software License for Firmware
|
I - Software License for Firmware
|
||||||
|
|
||||||
II - Microcode Availability
|
II - Microcode Availability
|
||||||
|
|
||||||
III - Description and Terminology
|
III - Description and Terminology
|
||||||
|
|
||||||
IV - Microcode Programming Details
|
IV - Microcode Programming Details
|
||||||
|
|
||||||
V - Firmware Structure Layout
|
V - Firmware Structure Layout
|
||||||
|
|
||||||
VI - Sample Code for Creating Firmware Files
|
VI - Sample Code for Creating Firmware Files
|
||||||
|
|
||||||
Revision Information
|
Revision Information
|
||||||
====================
|
====================
|
||||||
@ -39,7 +39,7 @@ http://opensource.freescale.com. For other firmware files, please contact
|
|||||||
your Freescale representative or your operating system vendor.
|
your Freescale representative or your operating system vendor.
|
||||||
|
|
||||||
III - Description and Terminology
|
III - Description and Terminology
|
||||||
================================
|
=================================
|
||||||
|
|
||||||
In this document, the term 'microcode' refers to the sequence of 32-bit
|
In this document, the term 'microcode' refers to the sequence of 32-bit
|
||||||
integers that compose the actual QE microcode.
|
integers that compose the actual QE microcode.
|
||||||
@ -89,7 +89,7 @@ being fixed in the RAM package utilizing they should be activated. This data
|
|||||||
structure signals the microcode which of these virtual traps is active.
|
structure signals the microcode which of these virtual traps is active.
|
||||||
|
|
||||||
This structure contains 6 words that the application should copy to some
|
This structure contains 6 words that the application should copy to some
|
||||||
specific been defined. This table describes the structure.
|
specific been defined. This table describes the structure::
|
||||||
|
|
||||||
---------------------------------------------------------------
|
---------------------------------------------------------------
|
||||||
| Offset in | | Destination Offset | Size of |
|
| Offset in | | Destination Offset | Size of |
|
||||||
@ -119,7 +119,7 @@ Extended Modes
|
|||||||
This is a double word bit array (64 bits) that defines special functionality
|
This is a double word bit array (64 bits) that defines special functionality
|
||||||
which has an impact on the software drivers. Each bit has its own impact
|
which has an impact on the software drivers. Each bit has its own impact
|
||||||
and has special instructions for the s/w associated with it. This structure is
|
and has special instructions for the s/w associated with it. This structure is
|
||||||
described in this table:
|
described in this table::
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
| Bit # | Name | Description |
|
| Bit # | Name | Description |
|
||||||
@ -220,7 +220,8 @@ The 'model' field is a 16-bit number that matches the actual SOC. The
|
|||||||
'major' and 'minor' fields are the major and minor revision numbers,
|
'major' and 'minor' fields are the major and minor revision numbers,
|
||||||
respectively, of the SOC.
|
respectively, of the SOC.
|
||||||
|
|
||||||
For example, to match the 8323, revision 1.0:
|
For example, to match the 8323, revision 1.0::
|
||||||
|
|
||||||
soc.model = 8323
|
soc.model = 8323
|
||||||
soc.major = 1
|
soc.major = 1
|
||||||
soc.minor = 0
|
soc.minor = 0
|
||||||
@ -273,10 +274,10 @@ library and available to any driver that calles qe_get_firmware_info().
|
|||||||
'reserved'.
|
'reserved'.
|
||||||
|
|
||||||
After the last microcode is a 32-bit CRC. It can be calculated using
|
After the last microcode is a 32-bit CRC. It can be calculated using
|
||||||
this algorithm:
|
this algorithm::
|
||||||
|
|
||||||
u32 crc32(const u8 *p, unsigned int len)
|
u32 crc32(const u8 *p, unsigned int len)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
u32 crc = 0;
|
u32 crc = 0;
|
||||||
|
|
||||||
@ -286,7 +287,7 @@ u32 crc32(const u8 *p, unsigned int len)
|
|||||||
crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
|
crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
|
||||||
}
|
}
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
VI - Sample Code for Creating Firmware Files
|
VI - Sample Code for Creating Firmware Files
|
||||||
============================================
|
============================================
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user