Compare commits

..

123 Commits

Author SHA1 Message Date
Eric Anholt
9faebbe763 drm/vc4: Synchronize validation code for v2 submission upstream.
Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:14 +00:00
Eric Anholt
9ebd23d0d6 drm/vc4: Use "hpd-gpios" for HDMI GPIO, like what landed upstream.
Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:13 +00:00
Eric Anholt
1b2b2852a1 drm/vc4: A few more non-functional changes to sync to upstream.
At this point all that's left is the force-enable of HDMI connector,
and using direct firmware calls to turn on V3D instead of the generic
power domain support.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:13 +00:00
Eric Anholt
e8eb77737d drm/vc4: Add support for MSAA rendering.
For MSAA, you set a bit in the binner that halves the size of tiles in
each direction, so you can pack 4 samples per pixel in the tile
buffer.  During rendering, you can load and store raw tile buffer
contents (to save the per-sample MSAA contents), or you can load/store
resolved tile buffer contents (loads spam the pixel value to all 4
samples, and stores either average the 4 color samples, or store the
first sample for Z/S).

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:12 +00:00
Eric Anholt
cc06454a1e drm: Use the driver's gem_object_free function from CMA helpers.
VC4 wraps the CMA objects in its own structures, so it needs to do its
own teardown (waiting for GPU to finish, updating bo_stats tracking).
The other CMA drivers are using drm_gem_cma_free_object as their
gem_free_object, so this should be a no-op for them.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:12 +00:00
Eric Anholt
023918f2e1 drm/vc4: Update a bunch of code to match upstream submission.
This gets almost everything matching, except for the MSAA support and
using generic PM domains.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:11 +00:00
Eric Anholt
ac7df4ae8d drm/vc4: Add an interface for capturing the GPU state after a hang.
This can be parsed with vc4-gpu-tools tools for trying to figure out
what was going on.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:11 +00:00
Eric Anholt
7fab9b21e8 drm: Put an optional field in the driver struct for GEM obj struct size.
This allows a driver to derive from the CMA object without copying all
of the code.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:10 +00:00
Eric Anholt
ad1f00d816 mm: Remove the PFN busy warning
See commit dae803e165 -- the warning is
expected sometimes when using CMA.  However, that commit still spams
my kernel log with these warnings.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:10 +00:00
Phil Elwell
620a9d4ee3 BCM270X_DT: Add at86rf233 overlay
Add an overlay to support the Atmel AT86RF233 WPAN transceiver on spi0.0.

See: https://github.com/raspberrypi/linux/issues/1151
2015-12-20 18:37:09 +00:00
Stuart MacLean
6b35288a11 Add support for the HiFiBerry DAC+ Pro.
The HiFiBerry DAC+ and DAC+ Pro products both use the existing bcm sound driver with the DAC+ Pro having a special clock device driver representing the two high precision oscillators.

An addition bug fix is included for the PCM512x codec where by the physical size of the sample frame is used in the calculation of the LRCK divisor as it was found to be wrong when using 24-bit depth sample contained in a little endian 4-byte sample frame.
2015-12-20 18:37:09 +00:00
Ondrej Wisniewski
4e0e14692d dts: Added overlay for Adafruit PiTFT 2.8" capacitive touch screen 2015-12-20 18:37:08 +00:00
mwilliams03
05afaaa4dd New overlay for PiScreen2r 2015-12-20 18:37:08 +00:00
Alistair Buxton
6422bafd14 Build i2c_gpio module and add a device tree overlay to configure it. 2015-12-20 18:37:08 +00:00
Holger Steinhaus
e2849fbfe4 dts: Added overlay for gpio_ir_recv driver 2015-12-20 18:37:07 +00:00
Eric Anholt
507592d755 clk: bcm2835: Also build the driver for downstream kernels.
Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:07 +00:00
popcornmix
1be1568e56 squash: add missing vc4-kms-v3d-overlay.dtb to makefile 2015-12-20 18:37:06 +00:00
popcornmix
5b2848eb75 squash: fixups 2015-12-20 18:37:06 +00:00
Phil Elwell
068540e13f drm/vc4: Enable VC4 modules, and increase CMA size with overlay
If using the overlay, be careful not to boot to GUI or run startx,
or the Pi will almost hang, reporting stalls in kernel threads.
2015-12-20 18:37:05 +00:00
Eric Anholt
d34ca1148c drm/vc4: Fix a typo in a V3D debug register.
Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:05 +00:00
Eric Anholt
79ae9990cf drm/vc4: Remove extra barrier()s aroudn CTnCA/CTnEA setup.
The writel() that these expand to already does barriers.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:05 +00:00
Eric Anholt
badbf92edf drm/vc4: No need to stop the stopped threads.
This was leftover debug code from the hackdriver.  We never submit
unless the thread is already idle.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:04 +00:00
Eric Anholt
41db721d52 drm/vc4: Add support for more display plane formats.
Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:04 +00:00
Eric Anholt
0e476c9ecf drm/vc4: Drop struct_mutex around CL validation.
We were using it so that we could make sure that shader validation
state didn't change while we were validating, but now shader
validation state is immutable.  The bcl/rcl generation doesn't do any
other BO dereferencing, and seems to have no other global state
dependency not covered by job_lock / bo_lock.  We only need to hold
struct_mutex for object unreferencing.

Fixes a lock order reversal between mmap_sem and struct_mutex.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:03 +00:00
Eric Anholt
415042d1da drm/vc4: Drop struct_mutex around CL validation.
We were using it so that we could make sure that shader validation
state didn't change while we were validating, but now shader
validation state is immutable.  The bcl/rcl generation doesn't do any
other BO dereferencing, and seems to have no other global state
dependency not covered by job_lock / bo_lock.

Fixes a lock order reversal between mmap_sem and struct_mutex.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:03 +00:00
Eric Anholt
c9a59da6e7 drm/vc4: Use job_lock to protect seqno_cb_list.
We're (mostly) not supposed to be using struct_mutex in drivers these
days.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:02 +00:00
Eric Anholt
28919fc00d drm/vc4: bo cache locking cleanup.
Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:02 +00:00
Eric Anholt
e8446bbedb drm/vc4: bo cache locking fixes.
Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:01 +00:00
Eric Anholt
437b9dcefb drm/vc4: Force HDMI to connected.
For some reason on the downstream tree, the HPD GPIO isn't working.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:01 +00:00
Eric Anholt
7bbacf8203 drm/vc4: Add suport for 3D rendering using the V3D engine.
This is a squash of the out-of-tree development series.  Since that
series contained code from the first "get a demo triangle rendered
using a hacked up driver using binary shader code" to "plug the last
known security hole", it's hard to reconstruct a different series of
incremental development that's mergeable without security holes
throughout it.

Signed-off-by: Eric Anholt <eric@anholt.net>
2015-12-20 18:37:01 +00:00
Phil Elwell
d3d5b43018 scripts: Multi-platform support for mkknlimg and knlinfo
The firmware uses tags in the kernel trailer to choose which dtb file
to load. Current firmware loads bcm2835-*.dtb if the '283x' tag is true,
otherwise it loads bcm270*.dtb. This scheme breaks if an image supports
multiple platforms.

This patch adds '270X' and '283X' tags to indicate support for RPi and
upstream platforms, respectively. '283x' (note lower case 'x') is left
for old firmware, and is only set if the image only supports upstream
builds.
2015-12-20 18:37:00 +00:00
popcornmix
76ee4b7e9f squash: Fixup bcm2835-camera for changes in kernel 4.4 api 2015-12-20 18:37:00 +00:00
Matthias Reichl
56592fd576 bcm2835-dma: Fix up convert to DMA pool 2015-12-20 18:36:59 +00:00
P33M
9ae652dc81 rpi_display: add backlight driver and overlay
Add a mailbox-driven backlight controller for the Raspberry Pi DSI
touchscreen display. Requires updated GPU firmware to recognise the
mailbox request.

Signed-off-by: Gordon Hollingworth <gordon@raspberrypi.org>
2015-12-20 18:36:59 +00:00
popcornmix
dd1b1b1546 irq-bcm2835: Fix building with 2708 2015-12-20 18:36:58 +00:00
Jan Grulich
5082e1acb2 tpa6130a2: Add headphone switch control
Signed-off-by: Jan Grulich <jan@grulich.eu>
2015-12-20 18:36:58 +00:00
Jan Grulich
e1438f9562 RaspiDAC3 support
Signed-off-by: Jan Grulich <jan@grulich.eu>

config: fix RaspiDAC Rev.3x dependencies

Change depends to SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
like the other I2S soundcard drivers.

Signed-off-by: Matthias Reichl <hias@horus.com>
2015-12-20 18:36:57 +00:00
Phil Elwell
cbd271da90 Merge pull request #1043 from XECDesign/sense-4.0
mfd: Add Raspberry Pi Sense HAT core driver
2015-12-20 18:36:57 +00:00
Phil Elwell
12ed567687 scripts/dtc: Add overlay support 2015-12-20 18:36:56 +00:00
Phil Elwell
d534702fb3 spidev: Add "spidev" compatible string to silence warning
See: https://github.com/raspberrypi/linux/issues/1054
2015-12-20 18:36:56 +00:00
Phil Elwell
79e343ef25 gpio-poweroff: Allow it to work on Raspberry Pi
The Raspberry Pi firmware manages the power-down and reboot
process. To do this it installs a pm_power_off handler, causing
the gpio-poweroff module to abort the probe function.

This patch introduces a "force" DT property that overrides that
behaviour, and also adds a DT overlay to enable and control it.

Note that running in an active-low configuration (DT parameter
"active_low") requires a custom dt-blob.bin and probably won't
allow a reboot without switching off, so an external inversion
of the trigger signal may be preferable.
2015-12-20 18:36:56 +00:00
Phil Elwell
c2f7616103 Improve __copy_to_user and __copy_from_user performance
Provide a __copy_from_user that uses memcpy. On BCM2708, use
optimised memcpy/memmove/memcmp/memset implementations.

arch/arm: Add mmiocpy/set aliases for memcpy/set

See: https://github.com/raspberrypi/linux/issues/1082
2015-12-20 18:36:55 +00:00
Gordon Hollingworth
df7dc1fb9b rpi-ft5406: Add touchscreen driver for pi LCD display
Fix driver detection failure Check that the buffer response is non-zero meaning the touchscreen was detected

rpi-ft5406: Use firmware API
2015-12-20 18:36:55 +00:00
Noralf Trønnes
3d4be7df94 bcm2835: bcm2835_defconfig
Some options in bcm2835_defconfig are now the default and
some have changed. Update to keep functionality.

No longer available: SCSI_MULTI_LUN and RESOURCE_COUNTERS.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

bcm2835: bcm2835_defconfig enable MMC_BCM2835

Enable the downstream bcm2835-mmc driver and DMA support.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

bcm2835: bcm2835_defconfig enable BCM2708_MBOX

Enable the mailbox driver.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

bcm2835: bcm2835_defconfig use FB_BCM2708

Enable the bcm2708 framebuffer driver.
Disable the simple framebuffer driver, which matches the
device handed over by u-boot.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

bcm2835: Merge bcm2835_defconfig with bcmrpi_defconfig

These commands where used to make this commit:

./scripts/diffconfig -m arch/arm/configs/bcm2835_defconfig arch/arm/configs/bcmrpi_defconfig > merge.cfg

cat << EOF > filter
CONFIG_ARCH_BCM2708
CONFIG_BCM2708_DT
CONFIG_ARM_PATCH_PHYS_VIRT
CONFIG_PHYS_OFFSET
CONFIG_CMDLINE
CONFIG_BCM2708_WDT
CONFIG_HW_RANDOM_BCM2708
CONFIG_I2C_BCM2708
CONFIG_SPI_BCM2708
CONFIG_SND_BCM2708_SOC_I2S
CONFIG_USB_DWCOTG
CONFIG_LIRC_RPI
EOF

grep -F -v -f filter merge.cfg > filtered.cfg

cat << EOF > added.cfg
CONFIG_WATCHDOG=y
CONFIG_BCM2835_WDT=y
CONFIG_MISC_FILESYSTEMS=y
CONFIG_SND_BCM2835_SOC_I2S=m
EOF

ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2835_defconfig filtered.cfg added.cfg
ARCH=arm make oldconfig

ARCH=arm make savedefconfig
cp defconfig arch/arm/configs/bcm2835_defconfig

rm merge.cfg filter filtered.cfg added.cfg defconfig

ARCH=arm make bcm2835_defconfig
ARCH=arm make oldconfig

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

configs: Incorporate v4.1 dependency changes

Commit 78e9b7de78 added a
dependency on TI_ST instead of selecting it, disabling:
CONFIG_BT_WILINK=m
CONFIG_RADIO_WL128X=m

Commit 652ccae5cc added a
depency on ARM_CRYPTO, disabling:
CONFIG_CRYPTO_SHA*_ARM*=m
CONFIG_CRYPTO_AES_ARM*=m

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

Conflicts:
	arch/arm/configs/bcm2709_defconfig

bcm2835: Sync bcm2835_defconfig with bcmrpi_defconfig

These commands where used to make this commit:

: Get changed and new config values from a merge
./scripts/diffconfig -m arch/arm/configs/bcm2835_defconfig arch/arm/configs/bcmrpi_defconfig > merge.cfg

: Remove these options
cat << EOF > filter
CONFIG_ARCH_BCM2708
CONFIG_BCM2708_DT
CONFIG_ARM_PATCH_PHYS_VIRT
CONFIG_PHYS_OFFSET
CONFIG_CMDLINE
CONFIG_BCM2708_WDT
CONFIG_HW_RANDOM_BCM2708
CONFIG_SPI_BCM2708
EOF

: Apply filter
grep -F -v -f filter merge.cfg > filtered.cfg

: Add these options
: watchdog contains the restart/poweroff code.
cat << EOF > added.cfg
CONFIG_WATCHDOG=y
CONFIG_BCM2835_WDT=y
CONFIG_MISC_FILESYSTEMS=y
CONFIG_I2C_BCM2835=m
CONFIG_SND_BCM2835_SOC_I2S=m
EOF

: Create new config
ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2835_defconfig filtered.cfg added.cfg
: Verify
ARCH=arm make oldconfig

: Update bcm2835_defconfig
ARCH=arm make savedefconfig
cp defconfig arch/arm/configs/bcm2835_defconfig

: Clean up
rm merge.cfg filter filtered.cfg added.cfg defconfig

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:54 +00:00
popcornmix
ddfe39c8a9 config: Add default configs 2015-12-20 18:36:54 +00:00
Waldemar Brodkorb
e0ed1c3216 Add driver for rpi-proto
Forward port of 3.10.x driver from https://github.com/koalo
We are using a custom board and would like to use rpi 3.18.x
kernel. Patch works fine for our embedded system.

URL to the audio chip:
http://www.mikroe.com/add-on-boards/audio-voice/audio-codec-proto/

Playback tested with devicetree enabled.

Signed-off-by: Waldemar Brodkorb <wbrodkorb@conet.de>
2015-12-20 18:36:53 +00:00
Phil Elwell
dd16a2cfa5 enc28j60: Add device tree compatible string and an overlay 2015-12-20 18:36:53 +00:00
Phil Elwell
b3bda227d5 BCM270x_DT: Add pwr_led, and the required "input" trigger
The "input" trigger makes the associated GPIO an input.  This is to support
the Raspberry Pi PWR LED, which is driven by external hardware in normal use.

N.B. pwr_led is not available on Model A or B boards.

leds-gpio: Implement the brightness_get method

The power LED uses some clever logic that means it is driven
by a voltage measuring circuit when configured as input, otherwise
it is driven by the GPIO output value. This patch wires up the
brightness_get method for leds-gpio so that user-space can monitor
the LED value via /sys/class/gpio/led1/brightness. Using the input
trigger this returns an indication of the system power health,
otherwise it is just whatever value the trigger has written most
recently.

See: https://github.com/raspberrypi/linux/issues/1064
2015-12-20 18:36:52 +00:00
Ryan Coe
a20a026b9f Update ds1307 driver for device-tree support
Signed-off-by: Ryan Coe <bluemrp9@gmail.com>
2015-12-20 18:36:52 +00:00
Daniel Matuschek
4af2cecf2a Added driver for HiFiBerry Amp amplifier add-on board
The driver contains a low-level hardware driver for the TAS5713 and the
drivers for the Raspberry Pi I2S subsystem.

TAS5713: return error if initialisation fails

Existing TAS5713 driver logs errors during initialisation, but does not return
an error code. Therefore even if initialisation fails, the driver will still be
loaded, but won't work. This patch fixes this. I2C communication error will now
reported correctly by a non-zero return code.

HiFiBerry Amp: fix device-tree problems

Some code to load the driver based on device-tree-overlays was missing. This is added by this patch.
2015-12-20 18:36:51 +00:00
Daniel Matuschek
a3bea9a4b1 Added support for HiFiBerry DAC+
The driver is based on the HiFiBerry DAC driver. However HiFiBerry DAC+ uses
a different codec chip (PCM5122), therefore a new driver is necessary.
2015-12-20 18:36:51 +00:00
popcornmix
c1048e71dd hid: Reduce default mouse polling interval to 60Hz
Reduces overhead when using X
2015-12-20 18:36:51 +00:00
Gordon Garrity
39fb5c4f15 Add IQaudIO Sound Card support for Raspberry Pi
Set a limit of 0dB on Digital Volume Control

The main volume control in the PCM512x DAC has a range up to
+24dB. This is dangerously loud and can potentially cause massive
clipping in the output stages. Therefore this sets a sensible
limit of 0dB for this control.
2015-12-20 18:36:50 +00:00
Daniel Matuschek
ed47a8feec ASoC: wm8804: Set idle_bias_off to false Idle bias has been change to remove warning on driver startup
Signed-off-by: Daniel Matuschek <daniel@matuschek.net>
2015-12-20 18:36:50 +00:00
Daniel Matuschek
226b904307 ASoC: BCM:Add support for HiFiBerry Digi. Driver is based on the patched WM8804 driver.
Signed-off-by: Daniel Matuschek <daniel@matuschek.net>

Add a parameter to turn off SPDIF output if no audio is playing

This patch adds the paramater auto_shutdown_output to the kernel module.
Default behaviour of the module is the same, but when auto_shutdown_output
is set to 1, the SPDIF oputput will shutdown if no stream is playing.

bugfix for 32kHz sample rate, was missing

HiFiBerry Digi: set SPDIF status bits for sample rate

The HiFiBerry Digi driver did not signal the sample rate in the SPDIF status bits.
While this is optional, some DACs and receivers do not accept this signal. This patch
adds the sample rate bits in the SPDIF status block.
2015-12-20 18:36:49 +00:00
Daniel Matuschek
be5c43c5c1 ASoC: wm8804: Implement MCLK configuration options, add 32bit support WM8804 can run with PLL frequencies of 256xfs and 128xfs for most sample rates. At 192kHz only 128xfs is supported. The existing driver selects 128xfs automatically for some lower samples rates. By using an additional mclk_div divider, it is now possible to control the behaviour. This allows using 256xfs PLL frequency on all sample rates up to 96kHz. It should allow lower jitter and better signal quality. The behavior has to be controlled by the sound card driver, because some sample frequency share the same setting. e.g. 192kHz and 96kHz use 24.576MHz master clock. The only difference is the MCLK divider.
This also added support for 32bit data.

Signed-off-by: Daniel Matuschek <daniel@matuschek.net>
2015-12-20 18:36:49 +00:00
Florian Meier
f7b2b02ea4 ASoC: Add support for Rpi-DAC 2015-12-20 18:36:48 +00:00
Florian Meier
3dc2824fae ASoC: Add support for HifiBerry DAC
This adds a machine driver for the HifiBerry DAC.
It is a sound card that can
be stacked onto the Raspberry Pi.

Signed-off-by: Florian Meier <florian.meier@koalo.de>
2015-12-20 18:36:48 +00:00
Florian Meier
b2d7484f2f ASoC: Add support for PCM5102A codec
Some definitions to support the PCM5102A codec
by Texas Instruments.

Signed-off-by: Florian Meier <florian.meier@koalo.de>
2015-12-20 18:36:47 +00:00
popcornmix
e94bc6cf78 config: Enable CONFIG_MEMCG, but leave it disabled (due to memory cost). Enable with cgroup_enable=memory. 2015-12-20 18:36:47 +00:00
popcornmix
0d5fc8a3d0 Added Device IDs for August DVB-T 205 2015-12-20 18:36:46 +00:00
popcornmix
e6190dc325 enabling the realtime clock 1-wire chip DS1307 and 1-wire on GPIO4 (as a module)
1-wire: Add support for configuring pin for w1-gpio kernel module
See: https://github.com/raspberrypi/linux/pull/457

Add bitbanging pullups, use them for w1-gpio

Allows parasite power to work, uses module option pullup=1

bcm2708: Ensure 1-wire pullup is disabled by default, and expose as module parameter

Signed-off-by: Alex J Lennon <ajlennon@dynamicdevices.co.uk>

w1-gpio: Add gpiopin module parameter and correctly free up gpio pull-up pin, if set

Signed-off-by: Alex J Lennon <ajlennon@dynamicdevices.co.uk>

w1-gpio: Sort out the pullup/parasitic power tangle
2015-12-20 18:36:46 +00:00
popcornmix
93015dc470 Allow mac address to be set in smsc95xx
Signed-off-by: popcornmix <popcornmix@gmail.com>
2015-12-20 18:36:45 +00:00
Harm Hanemaaijer
488b4f79ea Speed up console framebuffer imageblit function
Especially on platforms with a slower CPU but a relatively high
framebuffer fill bandwidth, like current ARM devices, the existing
console monochrome imageblit function used to draw console text is
suboptimal for common pixel depths such as 16bpp and 32bpp. The existing
code is quite general and can deal with several pixel depths. By creating
special case functions for 16bpp and 32bpp, by far the most common pixel
formats used on modern systems, a significant speed-up is attained
which can be readily felt on ARM-based devices like the Raspberry Pi
and the Allwinner platform, but should help any platform using the
fb layer.

The special case functions allow constant folding, eliminating a number
of instructions including divide operations, and allow the use of an
unrolled loop, eliminating instructions with a variable shift size,
reducing source memory access instructions, and eliminating excessive
branching. These unrolled loops also allow much better code optimization
by the C compiler. The code that selects which optimized variant is used
is also simplified, eliminating integer divide instructions.

The speed-up, measured by timing 'cat file.txt' in the console, varies
between 40% and 70%, when testing on the Raspberry Pi and Allwinner
ARM-based platforms, depending on font size and the pixel depth, with
the greater benefit for 32bpp.

Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
2015-12-20 18:36:45 +00:00
popcornmix
e206874282 rtl8192cu: Add PID for D-Link DWA 131 2015-12-20 18:36:45 +00:00
Marc Kleine-Budde
867106b1a5 rtl8192c_rf6052: PHY_RFShadowRefresh(): fix off-by-one
Signed-off-by: Marc Kleine-Budde <mkl@blackshift.org>
2015-12-20 18:36:44 +00:00
popcornmix
c7dd7eb507 Add non-mainline source for rtl8192cu wireless driver version v4.0.2_9000 as this is widely used. Disabled older rtlwifi driver
8192cu needs old wireless extensions

The obsolete WIRELESS_EXT configuration is used
by the old Realtek code and is needed for AP support.

8192cu: CONFIG_AP_MODE hardcoded in autoconf.h
2015-12-20 18:36:43 +00:00
Siarhei Siamashka
bdfea11c7e fbdev: add FBIOCOPYAREA ioctl
Based on the patch authored by Ali Gholami Rudi at
    https://lkml.org/lkml/2009/7/13/153

Provide an ioctl for userspace applications, but only if this operation
is hardware accelerated (otherwide it does not make any sense).

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-20 18:36:43 +00:00
Noralf Trønnes
71353d5186 bcm2835: Match with BCM2708 Device Trees
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:42 +00:00
notro
0e9006d877 BCM2708: Add core Device Tree support
Add the bare minimum needed to boot BCM2708 from a Device Tree.

Signed-off-by: Noralf Tronnes <notro@tronnes.org>

BCM2708: DT: change 'axi' nodename to 'soc'

Change DT node named 'axi' to 'soc' so it matches ARCH_BCM2835.
The VC4 bootloader fills in certain properties in the 'axi' subtree,
but since this is part of an upstreaming effort, the name is changed.

Signed-off-by: Noralf Tronnes notro@tronnes.org

BCM2708_DT: Correct length of the peripheral space

Use dts-dirs feature for overlays.

The kernel makefiles have a dts-dirs target that is for vendor subdirectories.

Using this fixes the install_dtbs target, which previously did not install the overlays.

BCM270X_DT: configure I2S DMA channels

Signed-off-by: Matthias Reichl <hias@horus.com>

BCM270X_DT: switch to bcm2835-i2s

I2S soundcard drivers with proper devicetree support (i.e. not linking
to the cpu_dai/platform via name but to cpu/platform via of_node)
will work out of the box without any modifications.

When the kernel is compiled without devicetree support the platform
code will instantiate the bcm2708-i2s driver and I2S soundcard drivers
will link to it via name, as before.

Signed-off-by: Matthias Reichl <hias@horus.com>

SDIO-overlay: add poll_once-boolean parameter

Add paramter to toggle sdio-device-polling
done every second or once at boot-time.

Signed-off-by: Patrick Boettcher <patrick.boettcher@posteo.de>

BCM270X_DT: Make mmc overlay compatible with current firmware

The original DT overlay logic followed a merge-then-patch procedure,
i.e. parameters are applied to the loaded overlay before the overlay
is merged into the base DTB. This sequence has been changed to
patch-then-merge, in order to support parameterised node names, and
to protect against bad overlays. As a result, overrides (parameters)
must only target labels in the overlay, but the overlay can obviously target nodes in the base DTB.

mmc-overlay.dts (that switches back to the original mmc sdcard
driver) is the only overlay violating that rule, and this patch
fixes it.

bcm270x_dt: Use the sdhost MMC controller by default

The "mmc" overlay reverts to using the other controller.

squash: Add cprman to dt

BCM270X_DT: Use clk_core for I2C interfaces
2015-12-20 18:36:42 +00:00
Phil Elwell
f0fdfa22e9 fdt: Add support for the CONFIG_CMDLINE_EXTEND option 2015-12-20 18:36:42 +00:00
Phil Elwell
a937e28752 scripts: Add mkknlimg and knlinfo scripts from tools repo
The Raspberry Pi firmware looks for a trailer on the kernel image to
determine whether it was compiled with Device Tree support enabled.
If the firmware finds a kernel without this trailer, or which has a
trailer indicating that it isn't DT-capable, it disables DT support
and reverts to using ATAGs.

The mkknlimg utility adds that trailer, having first analysed the
image to look for signs of DT support and the kernel version string.

knlinfo displays the contents of the trailer in the given kernel image.

scripts/mkknlimg: Add support for ARCH_BCM2835

Add a new trailer field indicating whether this is an ARCH_BCM2835
build, as opposed to MACH_BCM2708/9. If the loader finds this flag
is set it changes the default base dtb file name from bcm270x...
to bcm283y...

Also update knlinfo to show the status of the field.

scripts/mkknlimg: Improve ARCH_BCM2835 detection

The board support code contains sufficient strings to be able to
distinguish 2708 vs. 2835 builds, so remove the check for
bcm2835-pm-wdt which could exist in either.

Also, since the canned configuration is no longer built in (it's
a module), remove the config string checking.

See: https://github.com/raspberrypi/linux/issues/1157
2015-12-20 18:36:41 +00:00
Vincent Sanders
12351479fe bcm2835: add v4l2 camera device
- Supports raw YUV capture, preview, JPEG and H264.
- Uses videobuf2 for data transfer, using dma_buf.
- Uses 3.6.10 timestamping
- Camera power based on use
- Uses immutable input mode on video encoder

Signed-off-by: Daniel Stone <daniels@collabora.com>
Signed-off-by: Luke Diamand <luked@broadcom.com>

V4L2: Fixes from 6by9

V4L2: Fix EV values. Add manual shutter speed control

V4L2 EV values should be in units of 1/1000. Corrected.
Add support for V4L2_CID_EXPOSURE_ABSOLUTE which should
give manual shutter control. Requires manual exposure mode
to be selected first.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Correct JPEG Q-factor range

Should be 1-100, not 0-100

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Fix issue of driver jamming if STREAMON failed.

Fix issue where the driver was left in a partially enabled
state if STREAMON failed, and would then reject many IOCTLs
as it thought it was streaming.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Fix ISO controls.

Driver was passing the index to the GPU, and not the desired
ISO value.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add flicker avoidance controls

Add support for V4L2_CID_POWER_LINE_FREQUENCY to set flicker
avoidance frequencies.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add support for frame rate control.

Add support for frame rate (or time per frame as V4L2
inverts it) control via s_parm.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Improve G_FBUF handling so we pass conformance

Return some sane numbers for get framebuffer so that
we pass conformance.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Fix information advertised through g_vidfmt

Width and height were being stored based on incorrect
values.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add support for inline H264 headers

Add support for V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER
to control H264 inline headers.
Requires firmware fix to work correctly, otherwise format
has to be set to H264 before this parameter is set.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Fix JPEG timestamp issue

JPEG images were coming through from the GPU with timestamp
of 0. Detect this and give current system time instead
of some invalid value.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Fix issue when switching down JPEG resolution.

JPEG buffer size calculation is based on input resolution.
Input resolution was being configured after output port
format. Caused failures if switching from one JPEG resolution
to a smaller one.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Enable MJPEG encoding

Requires GPU firmware update to support MJPEG encoder.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Correct flag settings for compressed formats

Set flags field correctly on enum_fmt_vid_cap for compressed
image formats.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: H264 profile & level ctrls, FPS control and auto exp pri

Several control handling updates.
H264 profile and level controls.
Timeperframe/FPS reworked to add V4L2_CID_EXPOSURE_AUTO_PRIORITY to
select whether AE is allowed to override the framerate specified.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Correct BGR24 to RGB24 in format table

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add additional pixel formats. Correct colourspace

Adds the other flavours of YUYV, and NV12.
Corrects the overlay advertised colourspace.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Drop logging msg from info to debug

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Initial pass at scene modes.

Only supports exposure mode and metering modes.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add manual white balance control.

Adds support for V4L2_CID_RED_BALANCE and
V4L2_CID_BLUE_BALANCE. Only has an effect if
V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE has
V4L2_WHITE_BALANCE_MANUAL selected.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

config: Enable V4L / MMAL driver

V4L2: Increase the MMAL timeout to 3sec

MJPEG codec flush is now taking longer and results
in a kernel panic if the driver has stopped waiting for
the result when it finally completes.
Increase the timeout value from 1 to 3secs.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add support for setting H264_I_PERIOD

Adds support for the parameter V4L2_CID_MPEG_VIDEO_H264_I_PERIOD
to set the frequency with which I frames are produced.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Enable GPU function for removing padding from images.

GPU can now support arbitrary strides, although may require
additional processing to achieve it. Enable this feature
so that the images delivered are the size requested.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add support for V4L2_PIX_FMT_BGR32

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Set the colourspace to avoid odd YUV-RGB conversions

Removes the amiguity from the conversion routines and stops
them dropping back to the SD vs HD choice of coeffs.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Make video/still threshold a run-time param

Move the define for at what resolution the driver
switches from a video mode capture to a stills mode
capture to module parameters.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Fix incorrect pool sizing

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add option to disable enum_framesizes.

Gstreamer's handling of a driver that advertises
V4L2_FRMSIZE_TYPE_STEPWISE to define the supported
resolutions is broken. See bug
https://bugzilla.gnome.org/show_bug.cgi?id=726521

Optional parameter of gst_v4l2src_is_broken added.
If non-zero, the driver claims not to support that
ioctl, and gstreamer should be happy again (it
guesses a set of defaults for itself).

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Add support for more image formats

Adds YVU420 (YV12), YVU420SP (NV21), and BGR888.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

V4L2: Extend range for V4L2_CID_MPEG_VIDEO_H264_I_PERIOD

Request to extend the range from the fairly arbitrary
1000 frames (33 seconds at 30fps). Extend out to the
max range supported (int32 value).
Also allow 0, which is handled by the codec as only
send an I-frame on the first frame and never again.
There may be an exception if it detects a significant
scene change, but there's no easy way around that.

Signed-off-by: Dave Stevenson <dsteve@broadcom.com>

bcm2835-camera: stop_streaming now has a void return

BCM2835-V4L2: Fix compliance test failures

VIDIOC_TRY_FMT and VIDIOC_S_FMT tests were faling due
to reporting V4L2_COLORSPACE_JPEG when the colour
format wasn't V4L2_PIX_FMT_JPEG.
Now reports V4L2_COLORSPACE_SMPTE170M for YUV formats.

bcm2835 camera planar/packed stride length

Added a field to the mmal_fmt struct used to compute the bytes per line
when using a particular format. This results in the correct stride being
calculated even when the format is planar.

Signed-off-by: Garrett Wilson <g@floft.net>

bcm2835: camera: check for scene not being found

static analysis by cppcheck detected some potential NULL pointer
dereference issues:

[drivers/media/platform/bcm2835/controls.c:854]: (error) Possible null
  pointer dereference: scene
  (and lines 858, 859 too)

it is possible that scene is not found because of an invalue ctrl->val
and is therefore NULL and hence causing a null pointer dereference.

Signed-off-by: Colin Ian King <colin.king@canonical.com>

bcm2835: memcpy port data to m rather than rmsg

static analysis by cppcheck detected a memcpy to rmsg which is
not actually initialized at that point.  The memcpy should be copying
to variable m instead.

Signed-off-by: Colin Ian King <colin.king@canonical.com>

BCM2835-V4L2: Return buffers to videobuf2 on shutdown

https://github.com/raspberrypi/linux/issues/817
Fixes the kernel warning from videobuf2 as buffers
are now returned as they are being flushed on
stop_streaming.
2015-12-20 18:36:41 +00:00
Noralf Trønnes
45c3b495d6 firmware: bcm2835: Support ARCH_BCM270x
Support booting without Device Tree.
Turn on USB power.
Load driver early because of lacking support for deferred probing
in many drivers.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:40 +00:00
Noralf Trønnes
1338dd4bdb char: broadcom: Add vcio module
Add module for accessing the mailbox property channel through
/dev/vcio. Was previously in bcm2708-vcio.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:40 +00:00
popcornmix
b7b2884283 Add Chris Boot's i2c driver
i2c-bcm2708: fixed baudrate

Fixed issue where the wrong CDIV value was set for baudrates below 3815 Hz (for 250MHz bus clock).
In that case the computed CDIV value was more than 0xffff. However the CDIV register width is only 16 bits.
This resulted in incorrect setting of CDIV and higher baudrate than intended.
Example: 3500Hz -> CDIV=0x11704 -> CDIV(16bit)=0x1704 -> 42430Hz
After correction: 3500Hz -> CDIV=0x11704 -> CDIV(16bit)=0xffff -> 3815Hz
The correct baudrate is shown in the log after the cdiv > 0xffff correction.

Perform I2C combined transactions when possible

Perform I2C combined transactions whenever possible, within the
restrictions of the Broadcomm Serial Controller.

Disable DONE interrupt during TA poll

Prevent interrupt from being triggered if poll is missed and transfer
starts and finishes.

i2c: Make combined transactions optional and disabled by default

i2c: bcm2708: add device tree support

Add DT support to driver and add to .dtsi file.
Setup pins in .dts file.
i2c is disabled by default.

Signed-off-by: Noralf Tronnes <notro@tronnes.org>

bcm2708: don't register i2c controllers when using DT

The devices for the i2c controllers are in the Device Tree.
Only register devices when not using DT.

Signed-off-by: Noralf Tronnes <notro@tronnes.org>

I2C: Only register the I2C device for the current board revision

i2c_bcm2708: Fix clock reference counting

Fix grabbing lock from atomic context in i2c driver

2 main changes:
- check for timeouts in the bcm2708_bsc_setup function as indicated by this comment:
      /* poll for transfer start bit (should only take 1-20 polls) */
  This implies that the setup function can now fail so account for this everywhere it's called
- Removed the clk_get_rate call from inside the setup function as it locks a mutex and that's not ok since we call it from under a spin lock.

i2c-bcm2708: When using DT, leave the GPIO setup to pinctrl

i2c-bcm2708: Increase timeouts to allow larger transfers

Use the timeout value provided by the I2C_TIMEOUT ioctl when waiting
for completion. The default timeout is 1 second.

See: https://github.com/raspberrypi/linux/issues/260

i2c-bcm2708/BCM270X_DT: Add support for I2C2

The third I2C bus (I2C2) is normally reserved for HDMI use. Careless
use of this bus can break an attached display - use with caution.

It is recommended to disable accesses by VideoCore by setting
hdmi_ignore_edid=1 or hdmi_edid_file=1 in config.txt.

The interface is disabled by default - enable using the
i2c2_iknowwhatimdoing DT parameter.

bcm2708-spi: Don't use static pin configuration with DT

Also remove superfluous error checking - the SPI framework ensures the
validity of the chip_select value.

i2c-bcm2708: Remove non-DT support

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:39 +00:00
popcornmix
1076dfc03d Added hwmon/thermal driver for reporting core temperature. Thanks Dorian
BCM270x: Move thermal sensor to Device Tree

Add Device Tree support to bcm2835-thermal driver.
Add thermal sensor device to Device Tree.
Don't add platform device when booting in DT mode.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:39 +00:00
popcornmix
3dff4a73ee Add cpufreq driver
Signed-off-by: popcornmix <popcornmix@gmail.com>
2015-12-20 18:36:38 +00:00
Aron Szabo
9719f5e37a lirc: added support for RaspberryPi GPIO
lirc_rpi: Use read_current_timer to determine transmitter delay. Thanks to jjmz and others
See: https://github.com/raspberrypi/linux/issues/525

lirc: Remove restriction on gpio pins that can be used with lirc

Compute Module, for example could use different pins

lirc_rpi: Add parameter to specify input pin pull

Depending on the connected IR circuitry it might be desirable to change the
gpios internal pull from it pull-down default behaviour. Add a module
parameter to allow the user to set it explicitly.

Signed-off-by: Julian Scheel <julian@jusst.de>

lirc-rpi: Use the higher-level irq control functions

This module used to access the irq_chip methods of the
gpio controller directly, rather than going through the
standard enable_irq/irq_set_irq_type functions. This
caused problems on pinctrl-bcm2835 which only implements
the irq_enable/disable methods and not irq_unmask/mask.

lirc-rpi: Correct the interrupt usage

1) Correct the use of enable_irq (i.e. don't call it so often)
2) Correct the shutdown sequence.
3) Avoid a bcm2708_gpio driver quirk by setting the irq flags earlier

lirc-rpi: use getnstimeofday instead of read_current_timer

read_current_timer isn't guaranteed to return values in
microseconds, and indeed it doesn't on a Pi2.

Issue: linux#827

lirc-rpi: Add device tree support, and a suitable overlay

The overlay supports DT parameters that match the old module
parameters, except that gpio_in_pull should be set using the
strings "up", "down" or "off".

lirc-rpi: Also support pinctrl-bcm2835 in non-DT mode
2015-12-20 18:36:38 +00:00
Luke Wren
6989c11dfa Add SMI NAND driver
Signed-off-by: Luke Wren <wren6991@gmail.com>
2015-12-20 18:36:38 +00:00
Luke Wren
f5244cd4e4 Add SMI driver
Signed-off-by: Luke Wren <wren6991@gmail.com>
2015-12-20 18:36:37 +00:00
Luke Wren
d061f25545 Add /dev/gpiomem device for rootless user GPIO access
Signed-off-by: Luke Wren <luke@raspberrypi.org>

bcm2835-gpiomem: Fix for ARCH_BCM2835 builds

Build on ARCH_BCM2835, and fail to probe if no IO resource.

See: https://github.com/raspberrypi/linux/issues/1154
2015-12-20 18:36:37 +00:00
Tim Gover
4b816d828f vcsm: VideoCore shared memory service for BCM2835
Add experimental support for the VideoCore shared memory service.
This allows user processes to allocate memory from VideoCore's
GPU relocatable heap and mmap the buffers. Additionally, the memory
handles can passed to other VideoCore services such as MMAL, OpenMax
and DispmanX

TODO
* This driver was originally released for BCM28155 which has a different
  cache architecture to BCM2835. Consequently, in this release only
  uncached mappings are supported. However, there's no fundamental
  reason which cached mappings cannot be support or BCM2835
* More refactoring is required to remove the typedefs.
* Re-enable the some of the commented out debug-fs statistics which were
  disabled when migrating code from proc-fs.
* There's a lot of code to support sharing of VCSM in order to support
  Android. This could probably done more cleanly or perhaps just
  removed.

Signed-off-by: Tim Gover <timgover@gmail.com>

config: Disable VC_SM for now to fix hang with cutdown kernel

vcsm: Use boolean as it cannot be built as module

On building the bcm_vc_sm as a module we get the following error:

v7_dma_flush_range and do_munmap are undefined in vc-sm.ko.

Fix by making it not an option to build as module

vcsm: Add ioctl for custom cache flushing

vc-sm: Move headers out of arch directory

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:36 +00:00
popcornmix
628ac56421 vc_mem: Add vc_mem driver
Signed-off-by: popcornmix <popcornmix@gmail.com>

BCM270x: Move vc_mem

Make the vc_mem module available for ARCH_BCM2835 by moving it.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:36 +00:00
popcornmix
c0dec6e58b bcm2708 vchiq driver
Signed-off-by: popcornmix <popcornmix@gmail.com>

vchiq: create_pagelist copes with vmalloc memory

Signed-off-by: Daniel Stone <daniels@collabora.com>

vchiq: fix the shim message release

Signed-off-by: Daniel Stone <daniels@collabora.com>

vchiq: export additional symbols

Signed-off-by: Daniel Stone <daniels@collabora.com>

VCHIQ: Make service closure fully synchronous (drv)

This is one half of a two-part patch, the other half of which is to
the vchiq_lib user library. With these patches, calls to
vchiq_close_service and vchiq_remove_service won't return until any
associated callbacks have been delivered to the callback thread.

VCHIQ: Add per-service tracing

The new service option VCHIQ_SERVICE_OPTION_TRACE is a boolean that
toggles tracing for the specified service.

This commit also introduces vchi_service_set_option and the associated
option VCHI_SERVICE_OPTION_TRACE.

vchiq: Make the synchronous-CLOSE logic more tolerant

vchiq: Move logging control into debugfs

vchiq: Take care of a corner case tickled by VCSM

Closing a connection that isn't fully open requires care, since one
side does not know the other side's port number. Code was present to
handle the case where a CLOSE is sent immediately after an OPEN, i.e.
before the OPENACK has been received, but this was incorrectly being
used when an OPEN from a client using port 0 was rejected.

(In the observed failure, the host was attempting to use the VCSM
service, which isn't present in the 'cutdown' firmware. The failure
was intermittent because sometimes the keepalive service would
grab port 0.)

This case can be distinguished because the client's remoteport will
still be VCHIQ_PORT_FREE, and the srvstate will be OPENING. Either
condition is sufficient to differentiate it from the special case
described above.

vchiq: Avoid high load when blocked and unkillable

vchiq: Include SIGSTOP and SIGCONT in list of signals not-masked by vchiq to allow gdb to work

vchiq_arm: Complete support for SYNCHRONOUS mode

vchiq: Remove inline from suspend/resume

vchiq: Allocation does not need to be atomic

vchiq: Fix wrong condition check

The log level is checked from within the log call. Remove the check in the call.

Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>

BCM270x: Add vchiq device to platform file and Device Tree

Prepare to turn the vchiq module into a driver.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

bcm2708: vchiq: Add Device Tree support

Turn vchiq into a driver and stop hardcoding resources.
Use devm_* functions in probe path to simplify cleanup.
A global variable is used to hold the register address. This is done
to keep this patch as small as possible.
Also make available on ARCH_BCM2835.
Based on work by Lubomir Rintel.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

vchiq: Change logging level for inbound data

vchiq_arm: Two cacheing fixes

1) Make fragment size vary with cache line size
Without this patch, non-cache-line-aligned transfers may corrupt
(or be corrupted by) adjacent data structures.

Both ARM and VC need to be updated to enable this feature. This is
ensured by having the loader apply a new DT parameter -
cache-line-size. The existence of this parameter guarantees that the
kernel is capable, and the parameter will only be modified from the
safe default if the loader is capable.

2) Flush/invalidate vmalloc'd memory, and invalidate after reads

vchiq: fix NULL pointer dereference when closing driver

The following code run as root will cause a null pointer dereference oops:

        int fd = open("/dev/vc-cma", O_RDONLY);
        if (fd < 0)
                err(1, "open failed");
        (void)close(fd);

[ 1704.877721] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[ 1704.877725] pgd = b899c000
[ 1704.877736] [00000000] *pgd=37fab831, *pte=00000000, *ppte=00000000
[ 1704.877748] Internal error: Oops: 817 [#1] PREEMPT SMP ARM
[ 1704.877765] Modules linked in: evdev i2c_bcm2708 uio_pdrv_genirq uio
[ 1704.877774] CPU: 2 PID: 3656 Comm: stress-ng-fstat Not tainted 3.19.1-12-generic-bcm2709 #12-Ubuntu
[ 1704.877777] Hardware name: BCM2709
[ 1704.877783] task: b8ab9b00 ti: b7e68000 task.ti: b7e68000
[ 1704.877798] PC is at __down_interruptible+0x50/0xec
[ 1704.877806] LR is at down_interruptible+0x5c/0x68
[ 1704.877813] pc : [<80630ee8>]    lr : [<800704b0>]    psr: 60080093
sp : b7e69e50  ip : b7e69e88  fp : b7e69e84
[ 1704.877817] r10: b88123c8  r9 : 00000010  r8 : 00000001
[ 1704.877822] r7 : b8ab9b00  r6 : 7fffffff  r5 : 80a1cc34  r4 : 80a1cc34
[ 1704.877826] r3 : b7e69e50  r2 : 00000000  r1 : 00000000  r0 : 80a1cc34
[ 1704.877833] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
[ 1704.877838] Control: 10c5387d  Table: 3899c06a  DAC: 00000015
[ 1704.877843] Process do-oops (pid: 3656, stack limit = 0xb7e68238)
[ 1704.877848] Stack: (0xb7e69e50 to 0xb7e6a000)
[ 1704.877856] 9e40:                                     80a1cc3c 00000000 00000010 b88123c8
[ 1704.877865] 9e60: b7e69e84 80a1cc34 fff9fee9 ffffffff b7e68000 00000009 b7e69ea4 b7e69e88
[ 1704.877874] 9e80: 800704b0 80630ea4 fff9fee9 60080013 80a1cc28 fff9fee9 b7e69edc b7e69ea8
[ 1704.877884] 9ea0: 8040f558 80070460 fff9fee9 ffffffff 00000000 00000000 00000009 80a1cb7c
[ 1704.877893] 9ec0: 00000000 80a1cb7c 00000000 00000010 b7e69ef4 b7e69ee0 803e1ba4 8040f514
[ 1704.877902] 9ee0: 00000e48 80a1cb7c b7e69f14 b7e69ef8 803e1c9c 803e1b74 b88123c0 b92acb18
[ 1704.877911] 9f00: b8812790 b8d815d8 b7e69f24 b7e69f18 803e2250 803e1bc8 b7e69f5c b7e69f28
[ 1704.877921] 9f20: 80167bac 803e222c 00000000 00000000 b7e69f54 b8ab9ffc 00000000 8098c794
[ 1704.877930] 9f40: b8ab9b00 8000efc4 b7e68000 00000000 b7e69f6c b7e69f60 80167d6c 80167b28
[ 1704.877939] 9f60: b7e69f8c b7e69f70 80047d38 80167d60 b7e68000 b7e68010 8000efc4 b7e69fb0
[ 1704.877949] 9f80: b7e69fac b7e69f90 80012820 80047c84 01155490 011549a8 00000001 00000006
[ 1704.877957] 9fa0: 00000000 b7e69fb0 8000ee5c 80012790 00000000 353d8c0f 7efc4308 00000000
[ 1704.877966] 9fc0: 01155490 011549a8 00000001 00000006 00000000 00000000 76cf3ba0 00000003
[ 1704.877975] 9fe0: 00000000 7efc42e4 0002272f 76e2ed66 60080030 00000003 00000000 00000000
[ 1704.877998] [<80630ee8>] (__down_interruptible) from [<800704b0>] (down_interruptible+0x5c/0x68)
[ 1704.878015] [<800704b0>] (down_interruptible) from [<8040f558>] (vchiu_queue_push+0x50/0xd8)
[ 1704.878032] [<8040f558>] (vchiu_queue_push) from [<803e1ba4>] (send_worker_msg+0x3c/0x54)
[ 1704.878045] [<803e1ba4>] (send_worker_msg) from [<803e1c9c>] (vc_cma_set_reserve+0xe0/0x1c4)
[ 1704.878057] [<803e1c9c>] (vc_cma_set_reserve) from [<803e2250>] (vc_cma_release+0x30/0x38)
[ 1704.878069] [<803e2250>] (vc_cma_release) from [<80167bac>] (__fput+0x90/0x1e0)
[ 1704.878082] [<80167bac>] (__fput) from [<80167d6c>] (____fput+0x18/0x1c)
[ 1704.878094] [<80167d6c>] (____fput) from [<80047d38>] (task_work_run+0xc0/0xf8)
[ 1704.878109] [<80047d38>] (task_work_run) from [<80012820>] (do_work_pending+0x9c/0xc4)
[ 1704.878123] [<80012820>] (do_work_pending) from [<8000ee5c>] (work_pending+0xc/0x20)
[ 1704.878133] Code: e50b1034 e3a01000 e50b2030 e580300c (e5823000)

..the fix is to ensure that we have actually initialized the queue before we attempt
to push any items onto it.  This occurs if we do an open() followed by a close() without
any activity in between.

Signed-off-by: Colin Ian King <colin.king@canonical.com>

vchiq_arm: Sort out the vmalloc case

See: https://github.com/raspberrypi/linux/issues/1055

vchiq: hack: Add include depecated dma include file
2015-12-20 18:36:35 +00:00
popcornmix
74b4d7fb9f bcm2708: alsa sound driver
Signed-off-by: popcornmix <popcornmix@gmail.com>

alsa: add mmap support and some cleanups to bcm2835 ALSA driver

snd-bcm2835: Add support for spdif/hdmi passthrough

This adds a dedicated subdevice which can be used for passthrough of non-audio
formats (ie encoded a52) through the hdmi audio link. In addition to this
driver extension an appropriate card config is required to make alsa-lib
support the AES parameters for this device.

snd-bcm2708: Add mutex, improve logging

Fix for ALSA driver crash

Avoids an issue when closing and opening vchiq where a message can arrive before service handle has been written

alsa: reduce severity of expected warning message

snd-bcm2708: Fix dmesg spam for non-error case

alsa: Ensure mutexes are released through error paths

alsa: Make interrupted close paths quieter

BCM270x: Add onboard sound device to Device Tree

Add Device Tree support to alsa driver.
Add device to Device Tree.
Don't add platform devices when booting in DT mode.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:35 +00:00
popcornmix
38aba70cbe cma: Add vc_cma driver to enable use of CMA
Signed-off-by: popcornmix <popcornmix@gmail.com>

vc_cma: Make the vc_cma area the default contiguous DMA area

vc_cma: Provide empty functions when module is not built

Providing empty functions saves the users from guarding the
function call with an #if clause.
Move __init markings from prototypes to functions.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:34 +00:00
Phil Elwell
cba6efda07 Adding bcm2835-sdhost driver, and an overlay to enable it
BCM2835 has two SD card interfaces. This driver uses the other one.

bcm2835-sdhost: Error handling fix, and code clarification

bcm2835-sdhost: Adding overclocking option

Allow a different clock speed to be substitued for a requested 50MHz.
This option is exposed using the "overclock_50" DT parameter.
Note that the sdhost interface is restricted to integer divisions of
core_freq, and the highest sensible option for a core_freq of 250MHz
is 84 (250/3 = 83.3MHz), the next being 125 (250/2) which is much too
high.

Use at your own risk.

bcm2835-sdhost: Round up the overclock, so 62 works for 62.5Mhz

Also only warn once for each overclock setting.

bcm2835-sdhost: Improve error handling and recovery

1) Expose the hw_reset method to the MMC framework, removing many
   internal calls by the driver.

2) Reduce overclock setting on error.

3) Increase timeout to cope with high capacity cards.

4) Add properties and parameters to control pio_limit and debug.

5) Reduce messages at probe time.

bcm2835-sdhost: Further improve overclock back-off

bcm2835-sdhost: Clear HBLC for PIO mode

Also update pio_limit default in overlay README.

bcm2835-sdhost: Add the ERASE capability

See: https://github.com/raspberrypi/linux/issues/1076

bcm2835-sdhost: Ignore CRC7 for MMC CMD1

It seems that the sdhost interface returns CRC7 errors for CMD1,
which is the MMC-specific SEND_OP_COND. Returning these errors to
the MMC layer causes a downward spiral, but ignoring them seems
to be harmless.

bcm2835-mmc/sdhost: Remove ARCH_BCM2835 differences

The bcm2835-mmc driver (and -sdhost driver that copied from it)
contains code to handle SDIO interrupts in a threaded interrupt
handler rather than waking the MMC framework thread. The change
follows a patch from Russell King that adds the facility as the
preferred way of working.

However, the new code path is only present in ARCH_BCM2835
builds, which I have taken to be a way of testing the waters
rather than making the change across the board; I can't see
any technical reason why it wouldn't be enabled for MACH_BCM270X
builds. So this patch standardises on the ARCH_BCM2835 code,
removing the old code paths.

bcm2835-sdhost: Don't log timeout errors unless debug=1

The MMC card-discovery process generates timeouts. This is
expected behaviour, so reporting it to the user serves no purpose.
Suppress the reporting of timeout errors unless the debug flag
is on.
2015-12-20 18:36:34 +00:00
gellert
5032acc5f2 MMC: added alternative MMC driver
mmc: Disable CMD23 transfers on all cards

Pending wire-level investigation of these types of transfers
and associated errors on bcm2835-mmc, disable for now. Fallback of
CMD18/CMD25 transfers will be used automatically by the MMC layer.

Reported/Tested-by: Gellert Weisz <gellert@raspberrypi.org>

mmc: bcm2835-mmc: enable DT support for all architectures

Both ARCH_BCM2835 and ARCH_BCM270x are built with OF now.
Enable Device Tree support for all architectures.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

mmc: bcm2835-mmc: fix probe error handling

Probe error handling is broken in several places.
Simplify error handling by using device managed functions.
Replace pr_{err,info} with dev_{err,info}.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

bcm2835-mmc: Add locks when accessing sdhost registers

bcm2835-mmc: Add range of debug options for slowing things down

bcm2835-mmc: Add option to disable some delays

bcm2835-mmc: Add option to disable MMC_QUIRK_BLK_NO_CMD23

bcm2835-mmc: Default to disabling MMC_QUIRK_BLK_NO_CMD23

bcm2835-mmc: Adding overclocking option

Allow a different clock speed to be substitued for a requested 50MHz.
This option is exposed using the "overclock_50" DT parameter.
Note that the mmc interface is restricted to EVEN integer divisions of
250MHz, and the highest sensible option is 63 (250/4 = 62.5), the
next being 125 (250/2) which is much too high.

Use at your own risk.

bcm2835-mmc: Round up the overclock, so 62 works for 62.5Mhz

Also only warn once for each overclock setting.

mmc: bcm2835-mmc: Make available on ARCH_BCM2835

Make the bcm2835-mmc driver available for use on ARCH_BCM2835.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

BCM270x_DT: add bcm2835-mmc entry

Add Device Tree entry for bcm2835-mmc.
In non-DT mode, don't add the device in the board file.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

bcm2835-mmc: Don't overwrite MMC capabilities from DT
2015-12-20 18:36:33 +00:00
Phil Elwell
39228cc850 Add blk_pos parameter to mmc multi_io_quirk callback 2015-12-20 18:36:33 +00:00
Florian Meier
543484cb5a dmaengine: Add support for BCM2708
Add support for DMA controller of BCM2708 as used in the Raspberry Pi.
Currently it only supports cyclic DMA.

Signed-off-by: Florian Meier <florian.meier@koalo.de>

dmaengine: expand functionality by supporting scatter/gather transfers sdhci-bcm2708 and dma.c: fix for LITE channels

DMA: fix cyclic LITE length overflow bug

dmaengine: bcm2708: Remove chancnt affectations

Mirror bcm2835-dma.c commit 9eba5536a7:
chancnt is already filled by dma_async_device_register, which uses the channel
list to know how much channels there is.

Since it's already filled, we can safely remove it from the drivers' probe
function.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dmaengine: bcm2708: overwrite dreq only if it is not set

dreq is set when the DMA channel is fetched from Device Tree.
slave_id is set using dmaengine_slave_config().
Only overwrite dreq with slave_id if it is not set.

dreq/slave_id in the cyclic DMA case is not touched, because I don't
have hardware to test with.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dmaengine: bcm2708: do device registration in the board file

Don't register the device in the driver. Do it in the board file.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dmaengine: bcm2708: don't restrict DT support to ARCH_BCM2835

Both ARCH_BCM2835 and ARCH_BCM270x are built with OF now.
Add Device Tree support to the non ARCH_BCM2835 case.
Use the same driver name regardless of architecture.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

BCM270x_DT: add bcm2835-dma entry

Add Device Tree entry for bcm2835-dma.
The entry doesn't contain any resources since they are handled
by the arch/arm/mach-bcm270x/dma.c driver.
In non-DT mode, don't add the device in the board file.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

bcm2708-dmaengine: Add debug options

BCM270x: Add memory and irq resources to dmaengine device and DT

Prepare for merging of the legacy DMA API arch driver dma.c
with bcm2708-dmaengine by adding memory and irq resources both
to platform file device and Device Tree node.
Don't use BCM_DMAMAN_DRIVER_NAME so we don't have to include mach/dma.h

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dmaengine: bcm2708: Merge with arch dma.c driver and disable dma.c

Merge the legacy DMA API driver with bcm2708-dmaengine.
This is done so we can use bcm2708_fb on ARCH_BCM2835 (mailbox
driver is also needed).

Changes to the dma.c code:
- Use BIT() macro.
- Cutdown some comments to one line.
- Add mutex to vc_dmaman and use this, since the dev lock is locked
  during probing of the engine part.
- Add global g_dmaman variable since drvdata is used by the engine part.
- Restructure for readability:
  vc_dmaman_chan_alloc()
  vc_dmaman_chan_free()
  bcm_dma_chan_free()
- Restructure bcm_dma_chan_alloc() to simplify error handling.
- Use device irq resources instead of hardcoded bcm_dma_irqs table.
- Remove dev_dmaman_register() and code it directly.
- Remove dev_dmaman_deregister() and code it directly.
- Simplify bcm_dmaman_probe() using devm_* functions.
- Get dmachans from DT if available.
- Keep 'dma.dmachans' module argument name for backwards compatibility.

Make it available on ARCH_BCM2835 as well.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dmaengine: bcm2708: set residue_granularity field

bcm2708-dmaengine supports residue reporting at burst level
but didn't report this via the residue_granularity field.

Without this field set properly we get playback issues with I2S cards.

dmaengine: bcm2708-dmaengine: Fix memory leak when stopping a running transfer

bcm2708-dmaengine: Use more DMA channels (but not 12)

1) Only the bcm2708_fb drivers uses the legacy DMA API, and
it requires a BULK-capable channel, so all other types
(FAST, NORMAL and LITE) can be made available to the regular
DMA API.

2) DMA channels 11-14 share an interrupt. The driver can't
handle this, so don't use channels 12-14 (12 was used, probably
because it appears to have an interrupt, but in reality that
interrupt is for activity on ANY channel). This may explain
a lockup encountered when running out of DMA channels.

The combined effect of this patch is to leave 7 DMA channels
available + channel 0 for bcm2708_fb via the legacy API.

See: https://github.com/raspberrypi/linux/issues/1110
     https://github.com/raspberrypi/linux/issues/1108

dmaengine: bcm2708: Make legacy API available for bcm2835-dma

bcm2708_fb uses the legacy DMA API, so in order to start using
bcm2835-dma, bcm2835-dma has to support the legacy API. Make this
possible by exporting bcm_dmaman_probe() and bcm_dmaman_remove().

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dmaengine: bcm2708: Change DT compatible string

Both bcm2835-dma and bcm2708-dmaengine have the same compatible string.
So change compatible to "brcm,bcm2708-dma".

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dmaengine: bcm2708: Remove driver but keep legacy API

Dropping non-DT support means we don't need this driver,
but we still need the legacy DMA API.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:32 +00:00
popcornmix
ef6ae61d5a bcm2708 framebuffer driver
Signed-off-by: popcornmix <popcornmix@gmail.com>

bcm2708_fb : Implement blanking support using the mailbox property interface

bcm2708_fb: Add pan and vsync controls

bcm2708_fb: DMA acceleration for fb_copyarea

Based on http://www.raspberrypi.org/phpBB3/viewtopic.php?p=62425#p62425
Also used Simon's dmaer_master module as a reference for tweaking DMA
settings for better performance.

For now busylooping only. IRQ support might be added later.
With non-overclocked Raspberry Pi, the performance is ~360 MB/s
for simple copy or ~260 MB/s for two-pass copy (used when dragging
windows to the right).

In the case of using DMA channel 0, the performance improves
to ~440 MB/s.

For comparison, VFP optimized CPU copy can only do ~114 MB/s in
the same conditions (hindered by reading uncached source buffer).

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>

bcm2708_fb: report number of dma copies

Add a counter (exported via debugfs) reporting the
number of dma copies that the framebuffer driver
has done, in order to help evaluate different
optimization strategies.

Signed-off-by: Luke Diamand <luked@broadcom.com>

bcm2708_fb: use IRQ for DMA copies

The copyarea ioctl() uses DMA to speed things along. This
was busy-waiting for completion. This change supports using
an interrupt instead for larger transfers. For small
transfers, busy-waiting is still likely to be faster.

Signed-off-by: Luke Diamand <luke@diamand.org>

bcm2708: Make ioctl logging quieter

video: fbdev: bcm2708_fb: Don't panic on error

No need to panic the kernel if the video driver fails.
Just print a message and return an error.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

fbdev: bcm2708_fb: Add ARCH_BCM2835 support

Add Device Tree support.
Pass the device to dma_alloc_coherent() in order to get the
correct bus address on ARCH_BCM2835.
Use the new DMA legacy API header file.
Including <mach/platform.h> is not necessary.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

BCM270x_DT: Add bcm2708-fb device

Add bcm2708-fb to Device Tree and don't add the
platform device when booting in DT mode.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:32 +00:00
popcornmix
9431f7866c Add dwc_otg driver
Signed-off-by: popcornmix <popcornmix@gmail.com>

usb: dwc: fix lockdep false positive

Signed-off-by: Kari Suvanto <karis79@gmail.com>

usb: dwc: fix inconsistent lock state

Signed-off-by: Kari Suvanto <karis79@gmail.com>

Add FIQ patch to dwc_otg driver. Enable with dwc_otg.fiq_fix_enable=1. Should give about 10% more ARM performance.
Thanks to Gordon and Costas

Avoid dynamic memory allocation for channel lock in USB driver. Thanks ddv2005.

Add NAK holdoff scheme. Enabled by default, disable with dwc_otg.nak_holdoff_enable=0. Thanks gsh

Make sure we wait for the reset to finish

dwc_otg: fix bug in dwc_otg_hcd.c resulting in silent kernel
	 memory corruption, escalating to OOPS under high USB load.

dwc_otg: Fix unsafe access of QTD during URB enqueue

In dwc_otg_hcd_urb_enqueue during qtd creation, it was possible that the
transaction could complete almost immediately after the qtd was assigned
to a host channel during URB enqueue, which meant the qtd pointer was no
longer valid having been completed and removed. Usually, this resulted in
an OOPS during URB submission. By predetermining whether transactions
need to be queued or not, this unsafe pointer access is avoided.

This bug was only evident on the Pi model A where a device was attached
that had no periodic endpoints (e.g. USB pendrive or some wlan devices).

dwc_otg: Fix incorrect URB allocation error handling

If the memory allocation for a dwc_otg_urb failed, the kernel would OOPS
because for some reason a member of the *unallocated* struct was set to
zero. Error handling changed to fail correctly.

dwc_otg: fix potential use-after-free case in interrupt handler

If a transaction had previously aborted, certain interrupts are
enabled to track error counts and reset where necessary. On IN
endpoints the host generates an ACK interrupt near-simultaneously
with completion of transfer. In the case where this transfer had
previously had an error, this results in a use-after-free on
the QTD memory space with a 1-byte length being overwritten to
0x00.

dwc_otg: add handling of SPLIT transaction data toggle errors

Previously a data toggle error on packets from a USB1.1 device behind
a TT would result in the Pi locking up as the driver never handled
the associated interrupt. Patch adds basic retry mechanism and
interrupt acknowledgement to cater for either a chance toggle error or
for devices that have a broken initial toggle state (FT8U232/FT232BM).

dwc_otg: implement tasklet for returning URBs to usbcore hcd layer

The dwc_otg driver interrupt handler for transfer completion will spend
a very long time with interrupts disabled when a URB is completed -
this is because usb_hcd_giveback_urb is called from within the handler
which for a USB device driver with complicated processing (e.g. webcam)
will take an exorbitant amount of time to complete. This results in
missed completion interrupts for other USB packets which lead to them
being dropped due to microframe overruns.

This patch splits returning the URB to the usb hcd layer into a
high-priority tasklet. This will have most benefit for isochronous IN
transfers but will also have incidental benefit where multiple periodic
devices are active at once.

dwc_otg: fix NAK holdoff and allow on split transactions only

This corrects a bug where if a single active non-periodic endpoint
had at least one transaction in its qh, on frnum == MAX_FRNUM the qh
would get skipped and never get queued again. This would result in
a silent device until error detection (automatic or otherwise) would
either reset the device or flush and requeue the URBs.

Additionally the NAK holdoff was enabled for all transactions - this
would potentially stall a HS endpoint for 1ms if a previous error state
enabled this interrupt and the next response was a NAK. Fix so that
only split transactions get held off.

dwc_otg: Call usb_hcd_unlink_urb_from_ep with lock held in completion handler

usb_hcd_unlink_urb_from_ep must be called with the HCD lock held.  Calling it
asynchronously in the tasklet was not safe (regression in
c4564d4a1a).

This change unlinks it from the endpoint prior to queueing it for handling in
the tasklet, and also adds a check to ensure the urb is OK to be unlinked
before doing so.

NULL pointer dereference kernel oopses had been observed in usb_hcd_giveback_urb
when a USB device was unplugged/replugged during data transfer.  This effect
was reproduced using automated USB port power control, hundreds of replug
events were performed during active transfers to confirm that the problem was
eliminated.

USB fix using a FIQ to implement split transactions

This commit adds a FIQ implementaion that schedules
the split transactions using a FIQ so we don't get
held off by the interrupt latency of Linux

dwc_otg: fix device attributes and avoid kernel warnings on boot

dcw_otg: avoid logging function that can cause panics

See: https://github.com/raspberrypi/firmware/issues/21
Thanks to cleverca22 for fix

dwc_otg: mask correct interrupts after transaction error recovery

The dwc_otg driver will unmask certain interrupts on a transaction
that previously halted in the error state in order to reset the
QTD error count. The various fine-grained interrupt handlers do not
consider that other interrupts besides themselves were unmasked.

By disabling the two other interrupts only ever enabled in DMA mode
for this purpose, we can avoid unnecessary function calls in the
IRQ handler. This will also prevent an unneccesary FIQ interrupt
from being generated if the FIQ is enabled.

dwc_otg: fiq: prevent FIQ thrash and incorrect state passing to IRQ

In the case of a transaction to a device that had previously aborted
due to an error, several interrupts are enabled to reset the error
count when a device responds. This has the side-effect of making the
FIQ thrash because the hardware will generate multiple instances of
a NAK on an IN bulk/interrupt endpoint and multiple instances of ACK
on an OUT bulk/interrupt endpoint. Make the FIQ mask and clear the
associated interrupts.

Additionally, on non-split transactions make sure that only unmasked
interrupts are cleared. This caused a hard-to-trigger but serious
race condition when you had the combination of an endpoint awaiting
error recovery and a transaction completed on an endpoint - due to
the sequencing and timing of interrupts generated by the dwc_otg core,
it was possible to confuse the IRQ handler.

Fix function tracing

dwc_otg: whitespace cleanup in dwc_otg_urb_enqueue

dwc_otg: prevent OOPSes during device disconnects

The dwc_otg_urb_enqueue function is thread-unsafe. In particular the
access of urb->hcpriv, usb_hcd_link_urb_to_ep, dwc_otg_urb->qtd and
friends does not occur within a critical section and so if a device
was unplugged during activity there was a high chance that the
usbcore hub_thread would try to disable the endpoint with partially-
formed entries in the URB queue. This would result in BUG() or null
pointer dereferences.

Fix so that access of urb->hcpriv, enqueuing to the hardware and
adding to usbcore endpoint URB lists is contained within a single
critical section.

dwc_otg: prevent BUG() in TT allocation if hub address is > 16

A fixed-size array is used to track TT allocation. This was
previously set to 16 which caused a crash because
dwc_otg_hcd_allocate_port would read past the end of the array.

This was hit if a hub was plugged in which enumerated as addr > 16,
due to previous device resets or unplugs.

Also add #ifdef FIQ_DEBUG around hcd->hub_port_alloc[], which grows
to a large size if 128 hub addresses are supported. This field is
for debug only for tracking which frame an allocate happened in.

dwc_otg: make channel halts with unknown state less damaging

If the IRQ received a channel halt interrupt through the FIQ
with no other bits set, the IRQ would not release the host
channel and never complete the URB.

Add catchall handling to treat as a transaction error and retry.

dwc_otg: fiq_split: use TTs with more granularity

This fixes certain issues with split transaction scheduling.

- Isochronous multi-packet OUT transactions now hog the TT until
  they are completed - this prevents hubs aborting transactions
  if they get a periodic start-split out-of-order
- Don't perform TT allocation on non-periodic endpoints - this
  allows simultaneous use of the TT's bulk/control and periodic
  transaction buffers

This commit will mainly affect USB audio playback.

dwc_otg: fix potential sleep while atomic during urb enqueue

Fixes a regression introduced with eb1b482a. Kmalloc called from
dwc_otg_hcd_qtd_add / dwc_otg_hcd_qtd_create did not always have
the GPF_ATOMIC flag set. Force this flag when inside the larger
critical section.

dwc_otg: make fiq_split_enable imply fiq_fix_enable

Failing to set up the FIQ correctly would result in
"IRQ 32: nobody cared" errors in dmesg.

dwc_otg: prevent crashes on host port disconnects

Fix several issues resulting in crashes or inconsistent state
if a Model A root port was disconnected.

- Clean up queue heads properly in kill_urbs_in_qh_list by
  removing the empty QHs from the schedule lists
- Set the halt status properly to prevent IRQ handlers from
  using freed memory
- Add fiq_split related cleanup for saved registers
- Make microframe scheduling reclaim host channels if
  active during a disconnect
- Abort URBs with -ESHUTDOWN status response, informing
  device drivers so they respond in a more correct fashion
  and don't try to resubmit URBs
- Prevent IRQ handlers from attempting to handle channel
  interrupts if the associated URB was dequeued (and the
  driver state was cleared)

dwc_otg: prevent leaking URBs during enqueue

A dwc_otg_urb would get leaked if the HCD enqueue function
failed for any reason. Free the URB at the appropriate points.

dwc_otg: Enable NAK holdoff for control split transactions

Certain low-speed devices take a very long time to complete a
data or status stage of a control transaction, producing NAK
responses until they complete internal processing - the USB2.0
spec limit is up to 500mS. This causes the same type of interrupt
storm as seen with USB-serial dongles prior to c8edb238.

In certain circumstances, usually while booting, this interrupt
storm could cause SD card timeouts.

dwc_otg: Fix for occasional lockup on boot when doing a USB reset

dwc_otg: Don't issue traffic to LS devices in FS mode

Issuing low-speed packets when the root port is in full-speed mode
causes the root port to stop responding. Explicitly fail when
enqueuing URBs to a LS endpoint on a FS bus.

Fix ARM architecture issue with local_irq_restore()

If local_fiq_enable() is called before a local_irq_restore(flags) where
the flags variable has the F bit set, the FIQ will be erroneously disabled.

Fixup arch_local_irq_restore to avoid trampling the F bit in CPSR.

Also fix some of the hacks previously implemented for previous dwc_otg
incarnations.

dwc_otg: fiq_fsm: Base commit for driver rewrite

This commit removes the previous FIQ fixes entirely and adds fiq_fsm.

This rewrite features much more complete support for split transactions
and takes into account several OTG hardware bugs. High-speed
isochronous transactions are also capable of being performed by fiq_fsm.

All driver options have been removed and replaced with:
  - dwc_otg.fiq_enable (bool)
  - dwc_otg.fiq_fsm_enable (bool)
  - dwc_otg.fiq_fsm_mask (bitmask)
  - dwc_otg.nak_holdoff (unsigned int)

Defaults are specified such that fiq_fsm behaves similarly to the
previously implemented FIQ fixes.

fiq_fsm: Push error recovery into the FIQ when fiq_fsm is used

If the transfer associated with a QTD failed due to a bus error, the HCD
would retry the transfer up to 3 times (implementing the USB2.0
three-strikes retry in software).

Due to the masking mechanism used by fiq_fsm, it is only possible to pass
a single interrupt through to the HCD per-transfer.

In this instance host channels would fall off the radar because the error
reset would function, but the subsequent channel halt would be lost.

Push the error count reset into the FIQ handler.

fiq_fsm: Implement timeout mechanism

For full-speed endpoints with a large packet size, interrupt latency
runs the risk of the FIQ starting a transaction too late in a full-speed
frame. If the device is still transmitting data when EOF2 for the
downstream frame occurs, the hub will disable the port. This change is
not reflected in the hub status endpoint and the device becomes
unresponsive.

Prevent high-bandwidth transactions from being started too late in a
frame. The mechanism is not guaranteed: a combination of bit stuffing
and hub latency may still result in a device overrunning.

fiq_fsm: fix bounce buffer utilisation for Isochronous OUT

Multi-packet isochronous OUT transactions were subject to a few bounday
bugs. Fix them.

Audio playback is now much more robust: however, an issue stands with
devices that have adaptive sinks - ALSA plays samples too fast.

dwc_otg: Return full-speed frame numbers in HS mode

The frame counter increments on every *microframe* in high-speed mode.
Most device drivers expect this number to be in full-speed frames - this
caused considerable confusion to e.g. snd_usb_audio which uses the
frame counter to estimate the number of samples played.

fiq_fsm: save PID on completion of interrupt OUT transfers

Also add edge case handling for interrupt transports.

Note that for periodic split IN, data toggles are unimplemented in the
OTG host hardware - it unconditionally accepts any PID.

fiq_fsm: add missing case for fiq_fsm_tt_in_use()

Certain combinations of bitrate and endpoint activity could
result in a periodic transaction erroneously getting started
while the previous Isochronous OUT was still active.

fiq_fsm: clear hcintmsk for aborted transactions

Prevents the FIQ from erroneously handling interrupts
on a timed out channel.

fiq_fsm: enable by default

fiq_fsm: fix dequeues for non-periodic split transactions

If a dequeue happened between the SSPLIT and CSPLIT phases of the
transaction, the HCD would never receive an interrupt.

fiq_fsm: Disable by default

fiq_fsm: Handle HC babble errors

The HCTSIZ transfer size field raises a babble interrupt if
the counter wraps. Handle the resulting interrupt in this case.

dwc_otg: fix interrupt registration for fiq_enable=0

Additionally make the module parameter conditional for wherever
hcd->fiq_state is touched.

fiq_fsm: Enable by default

dwc_otg: Fix various issues with root port and transaction errors

Process the host port interrupts correctly (and don't trample them).
Root port hotplug now functional again.

Fix a few thinkos with the transaction error passthrough for fiq_fsm.

fiq_fsm: Implement hack for Split Interrupt transactions

Hubs aren't too picky about which endpoint we send Control type split
transactions to. By treating Interrupt transfers as Control, it is
possible to use the non-periodic queue in the OTG core as well as the
non-periodic FIFOs in the hub itself. This massively reduces the
microframe exclusivity/contention that periodic split transactions
otherwise have to enforce.

It goes without saying that this is a fairly egregious USB specification
violation, but it works.

Original idea by Hans Petter Selasky @ FreeBSD.org.

dwc_otg: FIQ support on SMP. Set up FIQ stack and handler on Core 0 only.

dwc_otg: introduce fiq_fsm_spin(un|)lock()

SMP safety for the FIQ relies on register read-modify write cycles being
completed in the correct order. Several places in the DWC code modify
registers also touched by the FIQ. Protect these by a bare-bones lock
mechanism.

This also makes it possible to run the FIQ and IRQ handlers on different
cores.

fiq_fsm: fix build on bcm2708 and bcm2709 platforms

dwc_otg: put some barriers back where they should be for UP

bcm2709/dwc_otg: Setup FIQ on core 1 if >1 core active

dwc_otg: fixup read-modify-write in critical paths

Be more careful about read-modify-write on registers that the FIQ
also touches.

Guard fiq_fsm_spin_lock with fiq_enable check

fiq_fsm: Falling out of the state machine isn't fatal

This edge case can be hit if the port is disabled while the FIQ is
in the middle of a transaction. Make the effects less severe.

Also get rid of the useless return value.

squash: dwc_otg: Allow to build without SMP

usb: core: make overcurrent messages more prominent

Hub overcurrent messages are more serious than "debug". Increase loglevel.

usb: dwc_otg: Don't use dma_to_virt()

Commit 6ce0d20 changes dma_to_virt() which breaks this driver.
Open code the old dma_to_virt() implementation to work around this.

Limit the use of __bus_to_virt() to cases where transfer_buffer_length
is set and transfer_buffer is not set. This is done to increase the
chance that this driver will also work on ARCH_BCM2835.

transfer_buffer should not be NULL if the length is set, but the
comment in the code indicates that there are situations where this
might happen. drivers/usb/isp1760/isp1760-hcd.c also has a similar
comment pointing to a possible: 'usb storage / SCSI bug'.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dwc_otg: Fix crash when fiq_enable=0

dwc_otg: fiq_fsm: Make high-speed isochronous strided transfers work properly

Certain low-bandwidth high-speed USB devices (specialist audio devices,
compressed-frame webcams) have packet intervals > 1 microframe.

Stride these transfers in the FIQ by using the start-of-frame interrupt
to restart the channel at the right time.

dwc_otg: Force host mode to fix incorrect compute module boards

dwc_otg: Add ARCH_BCM2835 support

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dwc_otg: Simplify FIQ irq number code

Dropping ATAGS means we can simplify the FIQ irq number code.
Also add error checking on the returned irq number.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

dwc_otg: Remove duplicate gadget probe/unregister function
2015-12-20 18:36:31 +00:00
popcornmix
4ee52c5dc8 squash: include ARCH_BCM2708 / ARCH_BCM2709 2015-12-20 18:36:31 +00:00
popcornmix
45b5f6954e Main bcm2708/bcm2709 linux port
Signed-off-by: popcornmix <popcornmix@gmail.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:30 +00:00
Noralf Trønnes
73644ed43f firmware: bcm2835: Add missing property tags
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:30 +00:00
Noralf Trønnes
f2b8f65f29 bcm2835: Add support for uart1
This is a hack until a proper solution is agreed upon.
Martin Sperl is doing some work in this area.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 18:36:30 +00:00
Matthias Reichl
189baf7660 bcm2835-dma: Limit cyclic transfers on lite channels to 32k
Transfers larger than 32k cause repeated clicking with I2S soundcards.
The exact reason is yet unknown, so limit to 32k as bcm2708-dmaengine
did as an intermediate fix.
2015-12-20 18:36:29 +00:00
Matthias Reichl
8ad957e866 bcm2835-dma: Fix dreq not set for slave transfers
Set dreq to slave_id if it is not set like in bcm2708-dmaengine.
2015-12-20 18:36:29 +00:00
Noralf Trønnes
28e77e1a31 dmaengine: bcm2835: Load driver early and support legacy API
Load driver early since at least bcm2708_fb doesn't support deferred
probing and even if it did, we don't want the video driver deferred.
Support the legacy DMA API which is needed by bcm2708_fb.
Don't mask out channel 2.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 17:47:25 +00:00
Noralf Trønnes
beda5586ef dmaengine: bcm2835: set residue_granularity field
bcm2835-dma supports residue reporting at burst level but didn't report
this via the residue_granularity field.

Without this field set properly we get playback issues with I2S cards.

[by HiassofT, taken from bcm2708-dmaengine]
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 17:47:24 +00:00
Noralf Trønnes
cb7d1d4664 dmaengine: bcm2835: Add slave dma support
Add slave transfer capability to BCM2835 dmaengine driver.
This patch is pulled from the bcm2708-dmaengine driver in the
Raspberry Pi repo. The work was done by Gellert Weisz.

Tested using the bcm2835-mmc driver from the same repo.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 17:47:24 +00:00
Peter Ujfalusi
5be6054802 [PATCH] dmaengine: bcm2835-dma: Convert to use DMA pool
f931782917 dmaengine: bcm2835-dma: Fix memory leak when stopping a
	     running transfer

Fixed the memleak, but introduced another issue: the terminate_all callback
might be called with interrupts disabled and the dma_free_coherent() is
not allowed to be called when IRQs are disabled.
Convert the driver to use dma_pool_* for managing the list of control
blocks for the transfer.

Fixes: f931782917 ("dmaengine: bcm2835-dma: Fix memory leak when stopping a running transfer")
Signed-off-by: Peter Ujfalusi <peter.ujfalusi at ti.com>
2015-12-20 17:47:24 +00:00
Matthias Reichl
16c4463eac bcm2835-i2s: Enable MMAP support via a DT property
Code ported from bcm2708-i2s driver in Raspberry Pi tree.

RPi commit 7ee829fd77 ("bcm2708-i2s:
Enable MMAP support via a DT property and overlay")

The i2s driver used to claim to support MMAP, but that feature was disabled
when some problems were found. Add the ability to enable this feature
through Device Tree, using the i2s-mmap overlay.

See: #1004

Signed-off-by: Matthias Reichl <hias@horus.com>
2015-12-20 17:47:23 +00:00
Matthias Reichl
ba7f4ebd24 bcm2835-i2s: Register PCM device
Code ported from bcm2708-i2s driver in Raspberry Pi tree.

RPi commit ba46b4935a ("ASoC: Add
support for BCM2708")

This driver adds support for digital audio (I2S)
for the BCM2708 SoC that is used by the
Raspberry Pi. External audio codecs can be
connected to the Raspberry Pi via P5 header.

It relies on cyclic DMA engine support for BCM2708.

Signed-off-by: Florian Meier <florian.meier@koalo.de>

Signed-off-by: Matthias Reichl <hias@horus.com>
2015-12-20 17:47:23 +00:00
Matthias Reichl
c1429003b0 bcm2835-i2s: Eliminate debugfs directory error
Code ported from bcm2708-i2s driver in Raspberry Pi tree.

RPi commit fd7d7a3dbe ("bcm2708:
Eliminate i2s debugfs directory error")

Qualify the two regmap ranges uses by bcm2708-i2s ('-i2s' and '-clk')
to avoid the name clash when registering debugfs entries.

Signed-off-by: Matthias Reichl <hias@horus.com>
2015-12-20 17:47:22 +00:00
Matthias Reichl
ccce163feb bcm2835-i2s: setup clock only if CPU is clock master
Code ported from bcm2708-i2s driver in Raspberry Pi tree.

RPi commit c14827ecda ("bcm2708: Allow
option card devices to be configured via DT")

Original work by Zoltan Szenczi, committed to RPi tree by
Phil Elwell.

Signed-off-by: Matthias Reichl <hias@horus.com>
2015-12-20 17:47:22 +00:00
Matthias Reichl
c58c685f75 bcm2835-i2s: add 24bit support, update bclk_ratio to more correct values
Code ported from bcm2708-i2s driver in Raspberry Pi tree.

RPi commit 62c05a0b53 ("ASoC: BCM2708:
Add 24 bit support")

This adds 24 bit support to the I2S driver of the BCM2708.
Besides enabling the 24 bit flags, it includes two bug fixes:

MMAP is not supported. Claiming this leads to strange issues
when the format of driver and file do not match.

The datasheet states that the width extension bit should be set
for widths greater than 24, but greater or equal would be correct.
This follows from the definition of the width field.

Signed-off-by: Florian Meier <florian.meier@koalo.de>

RPi commit 3e8c672bc4 ("bcm2708-i2s:
Update bclk_ratio to more correct values")

Discussion about blck_ratio affecting sound quality:
https://github.com/raspberrypi/linux/issues/681

Signed-off-by: Matthias Reichl <hias@horus.com>
2015-12-20 17:47:21 +00:00
Matthias Reichl
ef041d1d9a bcm2835-i2s: get base address for DMA from devicetree
Code copied from spi-bcm2835. Get physical address from devicetree
instead of using hardcoded constant.

Signed-off-by: Matthias Reichl <hias@horus.com>
2015-12-20 17:47:21 +00:00
Noralf Trønnes
11d4f3b520 ARM: bcm2835: Set Serial number and Revision
The VideoCore bootloader passes in Serial number and
Revision number through Device Tree. Make these available to
userspace through /proc/cpuinfo.

Mainline status:

There is a commit in linux-next that standardize passing the serial
number through Device Tree (string: /serial-number):
ARM: 8355/1: arch: Show the serial number from devicetree in cpuinfo

There was an attempt to do the same with the revision number, but it
didn't get in:
[PATCH v2 1/2] arm: devtree: Set system_rev from DT revision

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 17:47:21 +00:00
Phil Elwell
c75394eff6 spi-bcm2835: Support pin groups other than 7-11
The spi-bcm2835 driver automatically uses GPIO chip-selects due to
some unreliability of the native ones. In doing so it chooses the
same pins as the native chip-selects would use, but the existing
code always uses pins 7 and 8, wherever the SPI function is mapped.

Search the pinctrl group assigned to the driver for pins that
correspond to native chip-selects, and use those for GPIO chip-
selects.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>
2015-12-20 17:47:20 +00:00
Phil Elwell
91f81406c2 pinctrl-bcm2835: Only request the interrupts listed in the DTB
Although the GPIO controller can generate three interrupts (four counting
the common one), the device tree files currently only specify two. In the
absence of the third, simply don't register that interrupt (as opposed to
registering 0), which has the effect of making it impossible to generate
interrupts for GPIOs 46-53 which, since they share pins with the SD card
interface, is unlikely to be a problem.
2015-12-20 17:47:20 +00:00
Phil Elwell
a533be518f pinctrl-bcm2835: Fix interrupt handling for GPIOs 28-31 and 46-53
Contrary to the documentation, the BCM2835 GPIO controller actually has
four interrupt lines - one each for the three IRQ groups and one common. Rather
confusingly, the GPIO interrupt groups don't correspond directly with the GPIO
control banks. Instead, GPIOs 0-27 generate IRQ GPIO0, 28-45 GPIO1 and
46-53 GPIO2.

Awkwardly, the GPIOS for IRQ GPIO1 straddle two 32-entry GPIO banks, so it is
cleaner to split out a function to process the interrupts for a single GPIO
bank.

This bug has only just been observed because GPIOs above 27 can only be
accessed on an old Raspberry Pi with the optional P5 header fitted, where
the pins are often used for I2S instead.
2015-12-20 17:47:19 +00:00
Phil Elwell
b0dca0a200 pinctrl-bcm2835: bcm2835_gpio_direction_output must set the value 2015-12-20 17:47:19 +00:00
notro
9bc9352084 pinctrl-bcm2835: Set base to 0 give expected gpio numbering
Signed-off-by: Noralf Tronnes <notro@tronnes.org>
2015-12-20 17:47:18 +00:00
Phil Elwell
edb71c377a serial: 8250: Don't crash when nr_uarts is 0 2015-12-20 17:47:18 +00:00
Noralf Trønnes
b446c0613e irqchip: irq-bcm2835: Add 2836 FIQ support
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
2015-12-20 17:47:18 +00:00
Noralf Trønnes
4a60564f7a irqchip: bcm2835: Add FIQ support
Add a duplicate irq range with an offset on the hwirq's so the
driver can detect that enable_fiq() is used.
Tested with downstream dwc_otg USB controller driver.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
2015-12-20 17:47:17 +00:00
Phil Elwell
32c94360dd irq-bcm2836: Prevent spurious interrupts, and trap them early
The old arch-specific IRQ macros included a dsb to ensure the
write to clear the mailbox interrupt completed before returning
from the interrupt. The BCM2836 irqchip driver needs the same
precaution to avoid spurious interrupts.

Spurious interrupts are still possible for other reasons,
though, so trap them early.
2015-12-20 17:47:17 +00:00
Robert Tiemann
09b89dd4e1 BCM2835_DT: Fix I2S register map 2015-12-14 20:32:46 +00:00
popcornmix
1080f40d03 vmstat: Workaround for issue where dirty page count goes negative
See:
https://github.com/raspberrypi/linux/issues/617
http://www.spinics.net/lists/linux-mm/msg72236.html
2015-12-14 20:32:45 +00:00
popcornmix
16af2003a8 smsc95xx: Disable turbo mode by default 2015-12-14 20:32:44 +00:00
Steve Glendinning
b3ee605a6d smsx95xx: fix crimes against truesize
smsc95xx is adjusting truesize when it shouldn't, and following a recent patch from Eric this is now triggering warnings.

This patch stops smsc95xx from changing truesize.

Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
2015-12-14 20:32:44 +00:00
2617 changed files with 19410 additions and 49275 deletions

View File

@@ -1,4 +1,4 @@
What /sys/bus/iio/devices/iio:deviceX/in_proximity_input What /sys/bus/iio/devices/iio:deviceX/in_proximity_raw
Date: March 2014 Date: March 2014
KernelVersion: 3.15 KernelVersion: 3.15
Contact: Matt Ranostay <mranostay@gmail.com> Contact: Matt Ranostay <mranostay@gmail.com>

View File

@@ -134,21 +134,19 @@ Description:
enabled for the device. Developer can write y/Y/1 or n/N/0 to enabled for the device. Developer can write y/Y/1 or n/N/0 to
the file to enable/disable the feature. the file to enable/disable the feature.
What: /sys/bus/usb/devices/.../power/usb3_hardware_lpm_u1 What: /sys/bus/usb/devices/.../power/usb3_hardware_lpm
/sys/bus/usb/devices/.../power/usb3_hardware_lpm_u2 Date: June 2015
Date: November 2015
Contact: Kevin Strasser <kevin.strasser@linux.intel.com> Contact: Kevin Strasser <kevin.strasser@linux.intel.com>
Lu Baolu <baolu.lu@linux.intel.com>
Description: Description:
If CONFIG_PM is set and a USB 3.0 lpm-capable device is plugged If CONFIG_PM is set and a USB 3.0 lpm-capable device is plugged
in to a xHCI host which supports link PM, it will check if U1 in to a xHCI host which supports link PM, it will check if U1
and U2 exit latencies have been set in the BOS descriptor; if and U2 exit latencies have been set in the BOS descriptor; if
the check is passed and the host supports USB3 hardware LPM, the check is is passed and the host supports USB3 hardware LPM,
USB3 hardware LPM will be enabled for the device and the USB USB3 hardware LPM will be enabled for the device and the USB
device directory will contain two files named device directory will contain a file named
power/usb3_hardware_lpm_u1 and power/usb3_hardware_lpm_u2. These power/usb3_hardware_lpm. The file holds a string value (enable
files hold a string value (enable or disable) indicating whether or disable) indicating whether or not USB3 hardware LPM is
or not USB3 hardware LPM U1 or U2 is enabled for the device. enabled for the device.
What: /sys/bus/usb/devices/.../removable What: /sys/bus/usb/devices/.../removable
Date: February 2012 Date: February 2012

View File

@@ -23,7 +23,6 @@ Optional properties:
during suspend. during suspend.
- ti,no-reset-on-init: When present, the module should not be reset at init - ti,no-reset-on-init: When present, the module should not be reset at init
- ti,no-idle-on-init: When present, the module should not be idled at init - ti,no-idle-on-init: When present, the module should not be idled at init
- ti,no-idle: When present, the module is never allowed to idle.
Example: Example:

View File

@@ -30,10 +30,6 @@ Optional properties:
- target-supply : regulator for SATA target power - target-supply : regulator for SATA target power
- phys : reference to the SATA PHY node - phys : reference to the SATA PHY node
- phy-names : must be "sata-phy" - phy-names : must be "sata-phy"
- ports-implemented : Mask that indicates which ports that the HBA supports
are available for software to use. Useful if PORTS_IMPL
is not programmed by the BIOS, which is true with
some embedded SOC's.
Required properties when using sub-nodes: Required properties when using sub-nodes:
- #address-cells : number of cells to encode an address - #address-cells : number of cells to encode an address

View File

@@ -1,31 +0,0 @@
Broadcom BCM2835 auxiliary peripheral support
This binding uses the common clock binding:
Documentation/devicetree/bindings/clock/clock-bindings.txt
The auxiliary peripherals (UART, SPI1, and SPI2) have a small register
area controlling clock gating to the peripherals, and providing an IRQ
status register.
Required properties:
- compatible: Should be "brcm,bcm2835-aux"
- #clock-cells: Should be <1>. The permitted clock-specifier values can be
found in include/dt-bindings/clock/bcm2835-aux.h
- reg: Specifies base physical address and size of the registers
- clocks: The parent clock phandle
Example:
clocks: cprman@7e101000 {
compatible = "brcm,bcm2835-cprman";
#clock-cells = <1>;
reg = <0x7e101000 0x2000>;
clocks = <&clk_osc>;
};
aux: aux@0x7e215004 {
compatible = "brcm,bcm2835-aux";
#clock-cells = <1>;
reg = <0x7e215000 0x8>;
clocks = <&clocks BCM2835_CLOCK_VPU>;
};

View File

@@ -16,17 +16,7 @@ Required properties:
- #clock-cells: Should be <1>. The permitted clock-specifier values can be - #clock-cells: Should be <1>. The permitted clock-specifier values can be
found in include/dt-bindings/clock/bcm2835.h found in include/dt-bindings/clock/bcm2835.h
- reg: Specifies base physical address and size of the registers - reg: Specifies base physical address and size of the registers
- clocks: phandles to the parent clocks used as input to the module, in - clocks: The external oscillator clock phandle
the following order:
- External oscillator
- DSI1 byte clock
- DSI1 DDR2 clock
- DSI1 DDR clock
Only external oscillator is required. The DSI clocks may
not be present, in which case their children will be
unusable.
Example: Example:

View File

@@ -94,7 +94,6 @@ clocks and IDs.
csi_sel 79 csi_sel 79
iim_gate 80 iim_gate 80
gpu2d_gate 81 gpu2d_gate 81
ckli_gate 82
Examples: Examples:

View File

@@ -35,22 +35,6 @@ Optional properties for HDMI:
as an interrupt/status bit in the HDMI controller as an interrupt/status bit in the HDMI controller
itself). See bindings/pinctrl/brcm,bcm2835-gpio.txt itself). See bindings/pinctrl/brcm,bcm2835-gpio.txt
Required properties for DPI:
- compatible: Should be "brcm,bcm2835-dpi"
- reg: Physical base address and length of the registers
- clocks: a) core: The core clock the unit runs on
b) pixel: The pixel clock that feeds the pixelvalve
- port: Port node with a single endpoint connecting to the panel
device, as defined in [1]
Required properties for V3D:
- compatible: Should be "brcm,bcm2835-v3d"
- reg: Physical base address and length of the V3D's registers
- interrupts: The interrupt number
See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
[1] Documentation/devicetree/bindings/media/video-interfaces.txt
Example: Example:
pixelvalve@7e807000 { pixelvalve@7e807000 {
compatible = "brcm,bcm2835-pixelvalve2"; compatible = "brcm,bcm2835-pixelvalve2";
@@ -76,38 +60,6 @@ hdmi: hdmi@7e902000 {
clock-names = "pixel", "hdmi"; clock-names = "pixel", "hdmi";
}; };
dpi: dpi@7e208000 {
compatible = "brcm,bcm2835-dpi";
reg = <0x7e208000 0x8c>;
clocks = <&clocks BCM2835_CLOCK_VPU>,
<&clocks BCM2835_CLOCK_DPI>;
clock-names = "core", "pixel";
#address-cells = <1>;
#size-cells = <0>;
port {
dpi_out: endpoint@0 {
remote-endpoint = <&panel_in>;
};
};
};
v3d: v3d@7ec00000 {
compatible = "brcm,bcm2835-v3d";
reg = <0x7ec00000 0x1000>;
interrupts = <1 10>;
};
vc4: gpu { vc4: gpu {
compatible = "brcm,bcm2835-vc4"; compatible = "brcm,bcm2835-vc4";
}; };
panel: panel {
compatible = "ontat,yx700wv03", "simple-panel";
port {
panel_in: endpoint {
remote-endpoint = <&dpi_out>;
};
};
};

View File

@@ -1,7 +0,0 @@
On Tat Industrial Company 7" DPI TFT panel.
Required properties:
- compatible: should be "ontat,yx700wv03"
This binding is compatible with the simple-panel binding, which is specified
in simple-panel.txt in this directory.

View File

@@ -22,7 +22,8 @@ Required properties:
Optional properties: Optional properties:
- ti,hwmods: Name of the hwmods associated to the eDMA CC - ti,hwmods: Name of the hwmods associated to the eDMA CC
- ti,edma-memcpy-channels: List of channels allocated to be used for memcpy, iow - ti,edma-memcpy-channels: List of channels allocated to be used for memcpy, iow
these channels will be SW triggered channels. See example. these channels will be SW triggered channels. The list must
contain 16 bits numbers, see example.
- ti,edma-reserved-slot-ranges: PaRAM slot ranges which should not be used by - ti,edma-reserved-slot-ranges: PaRAM slot ranges which should not be used by
the driver, they are allocated to be used by for example the the driver, they are allocated to be used by for example the
DSP. See example. DSP. See example.
@@ -55,9 +56,10 @@ edma: edma@49000000 {
ti,tptcs = <&edma_tptc0 7>, <&edma_tptc1 7>, <&edma_tptc2 0>; ti,tptcs = <&edma_tptc0 7>, <&edma_tptc1 7>, <&edma_tptc2 0>;
/* Channel 20 and 21 is allocated for memcpy */ /* Channel 20 and 21 is allocated for memcpy */
ti,edma-memcpy-channels = <20 21>; ti,edma-memcpy-channels = /bits/ 16 <20 21>;
/* The following PaRAM slots are reserved: 35-44 and 100-109 */ /* The following PaRAM slots are reserved: 35-45 and 100-110 */
ti,edma-reserved-slot-ranges = <35 10>, <100 10>; ti,edma-reserved-slot-ranges = /bits/ 16 <35 10>,
/bits/ 16 <100 10>;
}; };
edma_tptc0: tptc@49800000 { edma_tptc0: tptc@49800000 {

View File

@@ -12,7 +12,7 @@ Each key is represented as a sub-node of "allwinner,sun4i-a10-lradc-keys":
Required subnode-properties: Required subnode-properties:
- label: Descriptive name of the key. - label: Descriptive name of the key.
- linux,code: Keycode to emit. - linux,code: Keycode to emit.
- channel: Channel this key is attached to, must be 0 or 1. - channel: Channel this key is attached to, mut be 0 or 1.
- voltage: Voltage in µV at lradc input when this key is pressed. - voltage: Voltage in µV at lradc input when this key is pressed.
Example: Example:

View File

@@ -6,9 +6,7 @@ used for what purposes, but which don't use an on-flash partition table such
as RedBoot. as RedBoot.
The partition table should be a subnode of the mtd node and should be named The partition table should be a subnode of the mtd node and should be named
'partitions'. This node should have the following property: 'partitions'. Partitions are defined in subnodes of the partitions node.
- compatible : (required) must be "fixed-partitions"
Partitions are then defined in subnodes of the partitions node.
For backwards compatibility partitions as direct subnodes of the mtd device are For backwards compatibility partitions as direct subnodes of the mtd device are
supported. This use is discouraged. supported. This use is discouraged.
@@ -38,7 +36,6 @@ Examples:
flash@0 { flash@0 {
partitions { partitions {
compatible = "fixed-partitions";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
@@ -56,7 +53,6 @@ flash@0 {
flash@1 { flash@1 {
partitions { partitions {
compatible = "fixed-partitions";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <2>; #size-cells = <2>;
@@ -70,7 +66,6 @@ flash@1 {
flash@2 { flash@2 {
partitions { partitions {
compatible = "fixed-partitions";
#address-cells = <2>; #address-cells = <2>;
#size-cells = <2>; #size-cells = <2>;

View File

@@ -40,18 +40,18 @@ Optional properties:
Slave Properties: Slave Properties:
Required properties: Required properties:
- phy_id : Specifies slave phy id
- phy-mode : See ethernet.txt file in the same directory - phy-mode : See ethernet.txt file in the same directory
Optional properties: Optional properties:
- dual_emac_res_vlan : Specifies VID to be used to segregate the ports - dual_emac_res_vlan : Specifies VID to be used to segregate the ports
- mac-address : See ethernet.txt file in the same directory - mac-address : See ethernet.txt file in the same directory
- phy_id : Specifies slave phy id
- phy-handle : See ethernet.txt file in the same directory - phy-handle : See ethernet.txt file in the same directory
Slave sub-nodes: Slave sub-nodes:
- fixed-link : See fixed-link.txt file in the same directory - fixed-link : See fixed-link.txt file in the same directory
Either the property phy_id, or the sub-node Either the properties phy_id and phy-mode,
fixed-link can be specified or the sub-node fixed-link can be specified
Note: "ti,hwmods" field is used to fetch the base address and irq Note: "ti,hwmods" field is used to fetch the base address and irq
resources from TI, omap hwmod data base during device registration. resources from TI, omap hwmod data base during device registration.

View File

@@ -1,59 +0,0 @@
* Microchip ENC28J60
This is a standalone 10 MBit ethernet controller with SPI interface.
For each device connected to a SPI bus, define a child node within
the SPI master node.
Required properties:
- compatible: Should be "microchip,enc28j60"
- reg: Specify the SPI chip select the ENC28J60 is wired to
- interrupt-parent: Specify the phandle of the source interrupt, see interrupt
binding documentation for details. Usually this is the GPIO bank
the interrupt line is wired to.
- interrupts: Specify the interrupt index within the interrupt controller (referred
to above in interrupt-parent) and interrupt type. The ENC28J60 natively
generates falling edge interrupts, however, additional board logic
might invert the signal.
- pinctrl-names: List of assigned state names, see pinctrl binding documentation.
- pinctrl-0: List of phandles to configure the GPIO pin used as interrupt line,
see also generic and your platform specific pinctrl binding
documentation.
Optional properties:
- spi-max-frequency: Maximum frequency of the SPI bus when accessing the ENC28J60.
According to the ENC28J80 datasheet, the chip allows a maximum of 20 MHz, however,
board designs may need to limit this value.
- local-mac-address: See ethernet.txt in the same directory.
Example (for NXP i.MX28 with pin control stuff for GPIO irq):
ssp2: ssp@80014000 {
compatible = "fsl,imx28-spi";
pinctrl-names = "default";
pinctrl-0 = <&spi2_pins_b &spi2_sck_cfg>;
status = "okay";
enc28j60: ethernet@0 {
compatible = "microchip,enc28j60";
pinctrl-names = "default";
pinctrl-0 = <&enc28j60_pins>;
reg = <0>;
interrupt-parent = <&gpio3>;
interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
spi-max-frequency = <12000000>;
};
};
pinctrl@80018000 {
enc28j60_pins: enc28j60_pins@0 {
reg = <0>;
fsl,pinmux-ids = <
MX28_PAD_AUART0_RTS__GPIO_3_3 /* Interrupt */
>;
fsl,drive-strength = <MXS_DRIVE_4mA>;
fsl,voltage = <MXS_VOLTAGE_HIGH>;
fsl,pull-up = <MXS_PULL_DISABLE>;
};
};

View File

@@ -134,12 +134,12 @@ mfio80 ddr_debug, mips_trace_data, mips_debug
mfio81 dreq0, mips_trace_data, eth_debug mfio81 dreq0, mips_trace_data, eth_debug
mfio82 dreq1, mips_trace_data, eth_debug mfio82 dreq1, mips_trace_data, eth_debug
mfio83 mips_pll_lock, mips_trace_data, usb_debug mfio83 mips_pll_lock, mips_trace_data, usb_debug
mfio84 audio_pll_lock, mips_trace_data, usb_debug mfio84 sys_pll_lock, mips_trace_data, usb_debug
mfio85 rpu_v_pll_lock, mips_trace_data, sdhost_debug mfio85 wifi_pll_lock, mips_trace_data, sdhost_debug
mfio86 rpu_l_pll_lock, mips_trace_data, sdhost_debug mfio86 bt_pll_lock, mips_trace_data, sdhost_debug
mfio87 sys_pll_lock, dreq2, socif_debug mfio87 rpu_v_pll_lock, dreq2, socif_debug
mfio88 wifi_pll_lock, dreq3, socif_debug mfio88 rpu_l_pll_lock, dreq3, socif_debug
mfio89 bt_pll_lock, dreq4, dreq5 mfio89 audio_pll_lock, dreq4, dreq5
tck tck
trstn trstn
tdi tdi

View File

@@ -1,31 +0,0 @@
Howto use the configfs overlay interface.
A device-tree configfs entry is created in /config/device-tree/overlays
and and it is manipulated using standard file system I/O.
Note that this is a debug level interface, for use by developers and
not necessarily something accessed by normal users due to the
security implications of having direct access to the kernel's device tree.
* To create an overlay you mkdir the directory:
# mkdir /config/device-tree/overlays/foo
* Either you echo the overlay firmware file to the path property file.
# echo foo.dtbo >/config/device-tree/overlays/foo/path
* Or you cat the contents of the overlay to the dtbo file
# cat foo.dtbo >/config/device-tree/overlays/foo/dtbo
The overlay file will be applied, and devices will be created/destroyed
as required.
To remove it simply rmdir the directory.
# rmdir /config/device-tree/overlays/foo
The rationalle of the dual interface (firmware & direct copy) is that each is
better suited to different use patterns. The firmware interface is what's
intended to be used by hardware managers in the kernel, while the copy interface
make sense for developers (since it avoids problems with namespaces).

View File

@@ -51,27 +51,15 @@ configfs tree is always there, whether mounted on /config or not.
An item is created via mkdir(2). The item's attributes will also An item is created via mkdir(2). The item's attributes will also
appear at this time. readdir(3) can determine what the attributes are, appear at this time. readdir(3) can determine what the attributes are,
read(2) can query their default values, and write(2) can store new read(2) can query their default values, and write(2) can store new
values. Don't mix more than one attribute in one attribute file. values. Like sysfs, attributes should be ASCII text files, preferably
with only one value per file. The same efficiency caveats from sysfs
apply. Don't mix more than one attribute in one attribute file.
There are two types of configfs attributes: Like sysfs, configfs expects write(2) to store the entire buffer at
once. When writing to configfs attributes, userspace processes should
* Normal attributes, which similar to sysfs attributes, are small ASCII text first read the entire file, modify the portions they wish to change, and
files, with a maximum size of one page (PAGE_SIZE, 4096 on i386). Preferably then write the entire buffer back. Attribute files have a maximum size
only one value per file should be used, and the same caveats from sysfs apply. of one page (PAGE_SIZE, 4096 on i386).
Configfs expects write(2) to store the entire buffer at once. When writing to
normal configfs attributes, userspace processes should first read the entire
file, modify the portions they wish to change, and then write the entire
buffer back.
* Binary attributes, which are somewhat similar to sysfs binary attributes,
but with a few slight changes to semantics. The PAGE_SIZE limitation does not
apply, but the whole binary item must fit in single kernel vmalloc'ed buffer.
The write(2) calls from user space are buffered, and the attributes'
write_bin_attribute method will be invoked on the final close, therefore it is
imperative for user-space to check the return code of close(2) in order to
verify that the operation finished successfully.
To avoid a malicious user OOMing the kernel, there's a per-binary attribute
maximum buffer value.
When an item needs to be destroyed, remove it with rmdir(2). An When an item needs to be destroyed, remove it with rmdir(2). An
item cannot be destroyed if any other item has a link to it (via item cannot be destroyed if any other item has a link to it (via
@@ -183,7 +171,6 @@ among other things. For that, it needs a type.
struct configfs_item_operations *ct_item_ops; struct configfs_item_operations *ct_item_ops;
struct configfs_group_operations *ct_group_ops; struct configfs_group_operations *ct_group_ops;
struct configfs_attribute **ct_attrs; struct configfs_attribute **ct_attrs;
struct configfs_bin_attribute **ct_bin_attrs;
}; };
The most basic function of a config_item_type is to define what The most basic function of a config_item_type is to define what
@@ -214,32 +201,6 @@ be called whenever userspace asks for a read(2) on the attribute. If an
attribute is writable and provides a ->store method, that method will be attribute is writable and provides a ->store method, that method will be
be called whenever userspace asks for a write(2) on the attribute. be called whenever userspace asks for a write(2) on the attribute.
[struct configfs_bin_attribute]
struct configfs_attribute {
struct configfs_attribute cb_attr;
void *cb_private;
size_t cb_max_size;
};
The binary attribute is used when the one needs to use binary blob to
appear as the contents of a file in the item's configfs directory.
To do so add the binary attribute to the NULL-terminated array
config_item_type->ct_bin_attrs, and the item appears in configfs, the
attribute file will appear with the configfs_bin_attribute->cb_attr.ca_name
filename. configfs_bin_attribute->cb_attr.ca_mode specifies the file
permissions.
The cb_private member is provided for use by the driver, while the
cb_max_size member specifies the maximum amount of vmalloc buffer
to be used.
If binary attribute is readable and the config_item provides a
ct_item_ops->read_bin_attribute() method, that method will be called
whenever userspace asks for a read(2) on the attribute. The converse
will happen for write(2). The reads/writes are bufferred so only a
single read/write will occur; the attributes' need not concern itself
with it.
[struct config_group] [struct config_group]
A config_item cannot live in a vacuum. The only way one can be created A config_item cannot live in a vacuum. The only way one can be created

View File

@@ -14,10 +14,3 @@ filesystem.
efivarfs is typically mounted like this, efivarfs is typically mounted like this,
mount -t efivarfs none /sys/firmware/efi/efivars mount -t efivarfs none /sys/firmware/efi/efivars
Due to the presence of numerous firmware bugs where removing non-standard
UEFI variables causes the system firmware to fail to POST, efivarfs
files that are not well-known standardized variables are created
as immutable files. This doesn't prevent removal - "chattr -i" will work -
but it does prevent this kind of failure from being accomplished
accidentally.

View File

@@ -346,7 +346,7 @@ address perms offset dev inode pathname
a7cb1000-a7cb2000 ---p 00000000 00:00 0 a7cb1000-a7cb2000 ---p 00000000 00:00 0
a7cb2000-a7eb2000 rw-p 00000000 00:00 0 a7cb2000-a7eb2000 rw-p 00000000 00:00 0
a7eb2000-a7eb3000 ---p 00000000 00:00 0 a7eb2000-a7eb3000 ---p 00000000 00:00 0
a7eb3000-a7ed5000 rw-p 00000000 00:00 0 a7eb3000-a7ed5000 rw-p 00000000 00:00 0 [stack:1001]
a7ed5000-a8008000 r-xp 00000000 03:00 4222 /lib/libc.so.6 a7ed5000-a8008000 r-xp 00000000 03:00 4222 /lib/libc.so.6
a8008000-a800a000 r--p 00133000 03:00 4222 /lib/libc.so.6 a8008000-a800a000 r--p 00133000 03:00 4222 /lib/libc.so.6
a800a000-a800b000 rw-p 00135000 03:00 4222 /lib/libc.so.6 a800a000-a800b000 rw-p 00135000 03:00 4222 /lib/libc.so.6
@@ -378,6 +378,7 @@ is not associated with a file:
[heap] = the heap of the program [heap] = the heap of the program
[stack] = the stack of the main process [stack] = the stack of the main process
[stack:1001] = the stack of the thread with tid 1001
[vdso] = the "virtual dynamic shared object", [vdso] = the "virtual dynamic shared object",
the kernel system call handler the kernel system call handler
@@ -385,8 +386,10 @@ is not associated with a file:
The /proc/PID/task/TID/maps is a view of the virtual memory from the viewpoint The /proc/PID/task/TID/maps is a view of the virtual memory from the viewpoint
of the individual tasks of a process. In this file you will see a mapping marked of the individual tasks of a process. In this file you will see a mapping marked
as [stack] if that task sees it as a stack. Hence, for the example above, the as [stack] if that task sees it as a stack. This is a key difference from the
task-level map, i.e. /proc/PID/task/TID/maps for thread 1001 will look like this: content of /proc/PID/maps, where you will see all mappings that are being used
as stack by all of those tasks. Hence, for the example above, the task-level
map, i.e. /proc/PID/task/TID/maps for thread 1001 will look like this:
08048000-08049000 r-xp 00000000 03:00 8312 /opt/test 08048000-08049000 r-xp 00000000 03:00 8312 /opt/test
08049000-0804a000 rw-p 00001000 03:00 8312 /opt/test 08049000-0804a000 rw-p 00001000 03:00 8312 /opt/test

View File

@@ -3928,8 +3928,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
sector if the number is odd); sector if the number is odd);
i = IGNORE_DEVICE (don't bind to this i = IGNORE_DEVICE (don't bind to this
device); device);
j = NO_REPORT_LUNS (don't use report luns
command, uas only);
l = NOT_LOCKABLE (don't try to lock and l = NOT_LOCKABLE (don't try to lock and
unlock ejectable media); unlock ejectable media);
m = MAX_SECTORS_64 (don't transfer more m = MAX_SECTORS_64 (don't transfer more

View File

@@ -271,9 +271,3 @@ Since the private key is used to sign modules, viruses and malware could use
the private key to sign modules and compromise the operating system. The the private key to sign modules and compromise the operating system. The
private key must be either destroyed or moved to a secure location and not kept private key must be either destroyed or moved to a secure location and not kept
in the root node of the kernel source tree. in the root node of the kernel source tree.
If you use the same private key to sign modules for multiple kernel
configurations, you must ensure that the module version information is
sufficient to prevent loading a module into a different kernel. Either
set CONFIG_MODVERSIONS=y or ensure that each configuration has a different
kernel release string by changing EXTRAVERSION or CONFIG_LOCALVERSION.

View File

@@ -181,3 +181,17 @@ For general information, go to the Intel support website at:
If an issue is identified with the released source code on the supported If an issue is identified with the released source code on the supported
kernel with a supported adapter, email the specific information related to the kernel with a supported adapter, email the specific information related to the
issue to e1000-devel@lists.sourceforge.net. issue to e1000-devel@lists.sourceforge.net.
License
=======
This software program is released under the terms of a license agreement
between you ('Licensee') and Intel. Do not use or load this software or any
associated materials (collectively, the 'Software') until you have carefully
read the full terms and conditions of the file COPYING located in this software
package. By loading or using the Software, you agree to the terms of this
Agreement. If you do not agree with the terms of this Agreement, do not install
or use the Software.
* Other names and brands may be claimed as the property of others.

View File

@@ -263,23 +263,19 @@ scmd->allowed.
3. scmd recovered 3. scmd recovered
ACTION: scsi_eh_finish_cmd() is invoked to EH-finish scmd ACTION: scsi_eh_finish_cmd() is invoked to EH-finish scmd
- shost->host_failed--
- clear scmd->eh_eflags - clear scmd->eh_eflags
- scsi_setup_cmd_retry() - scsi_setup_cmd_retry()
- move from local eh_work_q to local eh_done_q - move from local eh_work_q to local eh_done_q
LOCKING: none LOCKING: none
CONCURRENCY: at most one thread per separate eh_work_q to
keep queue manipulation lockless
4. EH completes 4. EH completes
ACTION: scsi_eh_flush_done_q() retries scmds or notifies upper ACTION: scsi_eh_flush_done_q() retries scmds or notifies upper
layer of failure. May be called concurrently but must have layer of failure.
a no more than one thread per separate eh_work_q to
manipulate the queue locklessly
- scmd is removed from eh_done_q and scmd->eh_entry is cleared - scmd is removed from eh_done_q and scmd->eh_entry is cleared
- if retry is necessary, scmd is requeued using - if retry is necessary, scmd is requeued using
scsi_queue_insert() scsi_queue_insert()
- otherwise, scsi_finish_command() is invoked for scmd - otherwise, scsi_finish_command() is invoked for scmd
- zero shost->host_failed
LOCKING: queue or finish function performs appropriate locking LOCKING: queue or finish function performs appropriate locking

View File

@@ -213,6 +213,9 @@ TTY_IO_ERROR If set, causes all subsequent userspace read/write
TTY_OTHER_CLOSED Device is a pty and the other side has closed. TTY_OTHER_CLOSED Device is a pty and the other side has closed.
TTY_OTHER_DONE Device is a pty and the other side has closed and
all pending input processing has been completed.
TTY_NO_WRITE_SPLIT Prevent driver from splitting up writes into TTY_NO_WRITE_SPLIT Prevent driver from splitting up writes into
smaller chunks. smaller chunks.

View File

@@ -32,8 +32,6 @@ Currently, these files are in /proc/sys/fs:
- nr_open - nr_open
- overflowuid - overflowuid
- overflowgid - overflowgid
- pipe-user-pages-hard
- pipe-user-pages-soft
- protected_hardlinks - protected_hardlinks
- protected_symlinks - protected_symlinks
- suid_dumpable - suid_dumpable
@@ -161,27 +159,6 @@ The default is 65534.
============================================================== ==============================================================
pipe-user-pages-hard:
Maximum total number of pages a non-privileged user may allocate for pipes.
Once this limit is reached, no new pipes may be allocated until usage goes
below the limit again. When set to 0, no limit is applied, which is the default
setting.
==============================================================
pipe-user-pages-soft:
Maximum total number of pages a non-privileged user may allocate for pipes
before the pipe size gets limited to a single page. Once this limit is reached,
new pipes will be limited to a single page in size for this user in order to
limit total memory usage, and trying to increase them using fcntl() will be
denied until usage goes below the limit again. The default value allows to
allocate up to 1024 pipes at their default size. When set to 0, no limit is
applied.
==============================================================
protected_hardlinks: protected_hardlinks:
A long-standing class of security issues is the hardlink-based A long-standing class of security issues is the hardlink-based

View File

@@ -537,18 +537,17 @@ relevant attribute files are usb2_hardware_lpm and usb3_hardware_lpm.
can write y/Y/1 or n/N/0 to the file to enable/disable can write y/Y/1 or n/N/0 to the file to enable/disable
USB2 hardware LPM manually. This is for test purpose mainly. USB2 hardware LPM manually. This is for test purpose mainly.
power/usb3_hardware_lpm_u1 power/usb3_hardware_lpm
power/usb3_hardware_lpm_u2
When a USB 3.0 lpm-capable device is plugged in to a When a USB 3.0 lpm-capable device is plugged in to a
xHCI host which supports link PM, it will check if U1 xHCI host which supports link PM, it will check if U1
and U2 exit latencies have been set in the BOS and U2 exit latencies have been set in the BOS
descriptor; if the check is is passed and the host descriptor; if the check is is passed and the host
supports USB3 hardware LPM, USB3 hardware LPM will be supports USB3 hardware LPM, USB3 hardware LPM will be
enabled for the device and these files will be created. enabled for the device and this file will be created.
The files hold a string value (enable or disable) The file holds a string value (enable or disable)
indicating whether or not USB3 hardware LPM U1 or U2 indicating whether or not USB3 hardware LPM is
is enabled for the device. enabled for the device.
USB Port Power Control USB Port Power Control
---------------------- ----------------------

View File

@@ -358,8 +358,7 @@ In the first case there are two additional complications:
- if CR4.SMEP is enabled: since we've turned the page into a kernel page, - if CR4.SMEP is enabled: since we've turned the page into a kernel page,
the kernel may now execute it. We handle this by also setting spte.nx. the kernel may now execute it. We handle this by also setting spte.nx.
If we get a user fetch or read fault, we'll change spte.u=1 and If we get a user fetch or read fault, we'll change spte.u=1 and
spte.nx=gpte.nx back. For this to work, KVM forces EFER.NX to 1 when spte.nx=gpte.nx back.
shadow paging is in use.
- if CR4.SMAP is disabled: since the page has been changed to a kernel - if CR4.SMAP is disabled: since the page has been changed to a kernel
page, it can not be reused when CR4.SMAP is enabled. We set page, it can not be reused when CR4.SMAP is enabled. We set
CR4.SMAP && !CR0.WP into shadow page's role to avoid this case. Note, CR4.SMAP && !CR0.WP into shadow page's role to avoid this case. Note,

View File

@@ -196,35 +196,3 @@ Another, more verbose way of getting PAT related debug messages is with
"debugpat" boot parameter. With this parameter, various debug messages are "debugpat" boot parameter. With this parameter, various debug messages are
printed to dmesg log. printed to dmesg log.
PAT Initialization
------------------
The following table describes how PAT is initialized under various
configurations. The PAT MSR must be updated by Linux in order to support WC
and WT attributes. Otherwise, the PAT MSR has the value programmed in it
by the firmware. Note, Xen enables WC attribute in the PAT MSR for guests.
MTRR PAT Call Sequence PAT State PAT MSR
=========================================================
E E MTRR -> PAT init Enabled OS
E D MTRR -> PAT init Disabled -
D E MTRR -> PAT disable Disabled BIOS
D D MTRR -> PAT disable Disabled -
- np/E PAT -> PAT disable Disabled BIOS
- np/D PAT -> PAT disable Disabled -
E !P/E MTRR -> PAT init Disabled BIOS
D !P/E MTRR -> PAT disable Disabled BIOS
!M !P/E MTRR stub -> PAT disable Disabled BIOS
Legend
------------------------------------------------
E Feature enabled in CPU
D Feature disabled/unsupported in CPU
np "nopat" boot option specified
!P CONFIG_X86_PAT option unset
!M CONFIG_MTRR option unset
Enabled PAT state set to enabled
Disabled PAT state set to disabled
OS PAT initializes PAT MSR with OS setting
BIOS PAT keeps PAT MSR with BIOS setting

View File

@@ -230,13 +230,13 @@ F: kernel/sys_ni.c
ABIT UGURU 1,2 HARDWARE MONITOR DRIVER ABIT UGURU 1,2 HARDWARE MONITOR DRIVER
M: Hans de Goede <hdegoede@redhat.com> M: Hans de Goede <hdegoede@redhat.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/abituguru.c F: drivers/hwmon/abituguru.c
ABIT UGURU 3 HARDWARE MONITOR DRIVER ABIT UGURU 3 HARDWARE MONITOR DRIVER
M: Alistair John Strachan <alistair@devzero.co.uk> M: Alistair John Strachan <alistair@devzero.co.uk>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/abituguru3.c F: drivers/hwmon/abituguru3.c
@@ -373,14 +373,14 @@ S: Maintained
ADM1025 HARDWARE MONITOR DRIVER ADM1025 HARDWARE MONITOR DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/adm1025 F: Documentation/hwmon/adm1025
F: drivers/hwmon/adm1025.c F: drivers/hwmon/adm1025.c
ADM1029 HARDWARE MONITOR DRIVER ADM1029 HARDWARE MONITOR DRIVER
M: Corentin Labbe <clabbe.montjoie@gmail.com> M: Corentin Labbe <clabbe.montjoie@gmail.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/adm1029.c F: drivers/hwmon/adm1029.c
@@ -425,7 +425,7 @@ F: drivers/video/backlight/adp8860_bl.c
ADS1015 HARDWARE MONITOR DRIVER ADS1015 HARDWARE MONITOR DRIVER
M: Dirk Eibach <eibach@gdsys.de> M: Dirk Eibach <eibach@gdsys.de>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/ads1015 F: Documentation/hwmon/ads1015
F: drivers/hwmon/ads1015.c F: drivers/hwmon/ads1015.c
@@ -438,7 +438,7 @@ F: drivers/macintosh/therm_adt746x.c
ADT7475 HARDWARE MONITOR DRIVER ADT7475 HARDWARE MONITOR DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/adt7475 F: Documentation/hwmon/adt7475
F: drivers/hwmon/adt7475.c F: drivers/hwmon/adt7475.c
@@ -615,7 +615,7 @@ F: include/linux/ccp.h
AMD FAM15H PROCESSOR POWER MONITORING DRIVER AMD FAM15H PROCESSOR POWER MONITORING DRIVER
M: Andreas Herrmann <herrmann.der.user@googlemail.com> M: Andreas Herrmann <herrmann.der.user@googlemail.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/fam15h_power F: Documentation/hwmon/fam15h_power
F: drivers/hwmon/fam15h_power.c F: drivers/hwmon/fam15h_power.c
@@ -779,7 +779,7 @@ F: drivers/input/mouse/bcm5974.c
APPLE SMC DRIVER APPLE SMC DRIVER
M: Henrik Rydberg <rydberg@bitmath.org> M: Henrik Rydberg <rydberg@bitmath.org>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Odd fixes S: Odd fixes
F: drivers/hwmon/applesmc.c F: drivers/hwmon/applesmc.c
@@ -1777,7 +1777,7 @@ F: include/media/as3645a.h
ASC7621 HARDWARE MONITOR DRIVER ASC7621 HARDWARE MONITOR DRIVER
M: George Joseph <george.joseph@fairview5.com> M: George Joseph <george.joseph@fairview5.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/asc7621 F: Documentation/hwmon/asc7621
F: drivers/hwmon/asc7621.c F: drivers/hwmon/asc7621.c
@@ -1864,7 +1864,7 @@ F: drivers/net/wireless/ath/carl9170/
ATK0110 HWMON DRIVER ATK0110 HWMON DRIVER
M: Luca Tettamanti <kronos.it@gmail.com> M: Luca Tettamanti <kronos.it@gmail.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/asus_atk0110.c F: drivers/hwmon/asus_atk0110.c
@@ -2984,7 +2984,7 @@ F: mm/swap_cgroup.c
CORETEMP HARDWARE MONITORING DRIVER CORETEMP HARDWARE MONITORING DRIVER
M: Fenghua Yu <fenghua.yu@intel.com> M: Fenghua Yu <fenghua.yu@intel.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/coretemp F: Documentation/hwmon/coretemp
F: drivers/hwmon/coretemp.c F: drivers/hwmon/coretemp.c
@@ -3549,7 +3549,7 @@ T: git git://git.infradead.org/users/vkoul/slave-dma.git
DME1737 HARDWARE MONITOR DRIVER DME1737 HARDWARE MONITOR DRIVER
M: Juerg Haefliger <juergh@gmail.com> M: Juerg Haefliger <juergh@gmail.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/dme1737 F: Documentation/hwmon/dme1737
F: drivers/hwmon/dme1737.c F: drivers/hwmon/dme1737.c
@@ -4097,8 +4097,8 @@ F: Documentation/efi-stub.txt
F: arch/ia64/kernel/efi.c F: arch/ia64/kernel/efi.c
F: arch/x86/boot/compressed/eboot.[ch] F: arch/x86/boot/compressed/eboot.[ch]
F: arch/x86/include/asm/efi.h F: arch/x86/include/asm/efi.h
F: arch/x86/platform/efi/ F: arch/x86/platform/efi/*
F: drivers/firmware/efi/ F: drivers/firmware/efi/*
F: include/linux/efi*.h F: include/linux/efi*.h
EFI VARIABLE FILESYSTEM EFI VARIABLE FILESYSTEM
@@ -4262,7 +4262,7 @@ F: include/video/exynos_mipi*
F71805F HARDWARE MONITORING DRIVER F71805F HARDWARE MONITORING DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/f71805f F: Documentation/hwmon/f71805f
F: drivers/hwmon/f71805f.c F: drivers/hwmon/f71805f.c
@@ -4341,7 +4341,7 @@ F: fs/*
FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER
M: Riku Voipio <riku.voipio@iki.fi> M: Riku Voipio <riku.voipio@iki.fi>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/f75375s.c F: drivers/hwmon/f75375s.c
F: include/linux/f75375s.h F: include/linux/f75375s.h
@@ -4883,8 +4883,8 @@ F: drivers/media/usb/hackrf/
HARDWARE MONITORING HARDWARE MONITORING
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
W: http://hwmon.wiki.kernel.org/ W: http://www.lm-sensors.org/
T: quilt http://jdelvare.nerim.net/devel/linux/jdelvare-hwmon/ T: quilt http://jdelvare.nerim.net/devel/linux/jdelvare-hwmon/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
S: Maintained S: Maintained
@@ -5393,7 +5393,7 @@ F: drivers/usb/atm/ueagle-atm.c
INA209 HARDWARE MONITOR DRIVER INA209 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/ina209 F: Documentation/hwmon/ina209
F: Documentation/devicetree/bindings/i2c/ina209.txt F: Documentation/devicetree/bindings/i2c/ina209.txt
@@ -5401,7 +5401,7 @@ F: drivers/hwmon/ina209.c
INA2XX HARDWARE MONITOR DRIVER INA2XX HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/ina2xx F: Documentation/hwmon/ina2xx
F: drivers/hwmon/ina2xx.c F: drivers/hwmon/ina2xx.c
@@ -5578,7 +5578,7 @@ R: Jesse Brandeburg <jesse.brandeburg@intel.com>
R: Shannon Nelson <shannon.nelson@intel.com> R: Shannon Nelson <shannon.nelson@intel.com>
R: Carolyn Wyborny <carolyn.wyborny@intel.com> R: Carolyn Wyborny <carolyn.wyborny@intel.com>
R: Don Skidmore <donald.c.skidmore@intel.com> R: Don Skidmore <donald.c.skidmore@intel.com>
R: Bruce Allan <bruce.w.allan@intel.com> R: Matthew Vick <matthew.vick@intel.com>
R: John Ronciak <john.ronciak@intel.com> R: John Ronciak <john.ronciak@intel.com>
R: Mitch Williams <mitch.a.williams@intel.com> R: Mitch Williams <mitch.a.williams@intel.com>
L: intel-wired-lan@lists.osuosl.org L: intel-wired-lan@lists.osuosl.org
@@ -5884,7 +5884,7 @@ F: drivers/isdn/hardware/eicon/
IT87 HARDWARE MONITORING DRIVER IT87 HARDWARE MONITORING DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/it87 F: Documentation/hwmon/it87
F: drivers/hwmon/it87.c F: drivers/hwmon/it87.c
@@ -5920,7 +5920,7 @@ F: drivers/media/dvb-frontends/ix2505v*
JC42.4 TEMPERATURE SENSOR DRIVER JC42.4 TEMPERATURE SENSOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/jc42.c F: drivers/hwmon/jc42.c
F: Documentation/hwmon/jc42 F: Documentation/hwmon/jc42
@@ -5970,14 +5970,14 @@ F: drivers/tty/serial/jsm/
K10TEMP HARDWARE MONITORING DRIVER K10TEMP HARDWARE MONITORING DRIVER
M: Clemens Ladisch <clemens@ladisch.de> M: Clemens Ladisch <clemens@ladisch.de>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/k10temp F: Documentation/hwmon/k10temp
F: drivers/hwmon/k10temp.c F: drivers/hwmon/k10temp.c
K8TEMP HARDWARE MONITORING DRIVER K8TEMP HARDWARE MONITORING DRIVER
M: Rudolf Marek <r.marek@assembler.cz> M: Rudolf Marek <r.marek@assembler.cz>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/k8temp F: Documentation/hwmon/k8temp
F: drivers/hwmon/k8temp.c F: drivers/hwmon/k8temp.c
@@ -6485,27 +6485,27 @@ F: net/llc/
LM73 HARDWARE MONITOR DRIVER LM73 HARDWARE MONITOR DRIVER
M: Guillaume Ligneul <guillaume.ligneul@gmail.com> M: Guillaume Ligneul <guillaume.ligneul@gmail.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/lm73.c F: drivers/hwmon/lm73.c
LM78 HARDWARE MONITOR DRIVER LM78 HARDWARE MONITOR DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/lm78 F: Documentation/hwmon/lm78
F: drivers/hwmon/lm78.c F: drivers/hwmon/lm78.c
LM83 HARDWARE MONITOR DRIVER LM83 HARDWARE MONITOR DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/lm83 F: Documentation/hwmon/lm83
F: drivers/hwmon/lm83.c F: drivers/hwmon/lm83.c
LM90 HARDWARE MONITOR DRIVER LM90 HARDWARE MONITOR DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/lm90 F: Documentation/hwmon/lm90
F: Documentation/devicetree/bindings/hwmon/lm90.txt F: Documentation/devicetree/bindings/hwmon/lm90.txt
@@ -6513,7 +6513,7 @@ F: drivers/hwmon/lm90.c
LM95234 HARDWARE MONITOR DRIVER LM95234 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/lm95234 F: Documentation/hwmon/lm95234
F: drivers/hwmon/lm95234.c F: drivers/hwmon/lm95234.c
@@ -6580,7 +6580,7 @@ F: drivers/scsi/sym53c8xx_2/
LTC4261 HARDWARE MONITOR DRIVER LTC4261 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/ltc4261 F: Documentation/hwmon/ltc4261
F: drivers/hwmon/ltc4261.c F: drivers/hwmon/ltc4261.c
@@ -6749,28 +6749,28 @@ F: include/uapi/linux/matroxfb.h
MAX16065 HARDWARE MONITOR DRIVER MAX16065 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/max16065 F: Documentation/hwmon/max16065
F: drivers/hwmon/max16065.c F: drivers/hwmon/max16065.c
MAX20751 HARDWARE MONITOR DRIVER MAX20751 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/max20751 F: Documentation/hwmon/max20751
F: drivers/hwmon/max20751.c F: drivers/hwmon/max20751.c
MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
M: "Hans J. Koch" <hjk@hansjkoch.de> M: "Hans J. Koch" <hjk@hansjkoch.de>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/max6650 F: Documentation/hwmon/max6650
F: drivers/hwmon/max6650.c F: drivers/hwmon/max6650.c
MAX6697 HARDWARE MONITOR DRIVER MAX6697 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/max6697 F: Documentation/hwmon/max6697
F: Documentation/devicetree/bindings/i2c/max6697.txt F: Documentation/devicetree/bindings/i2c/max6697.txt
@@ -7303,7 +7303,7 @@ F: drivers/scsi/NCR_D700.*
NCT6775 HARDWARE MONITOR DRIVER NCT6775 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/nct6775 F: Documentation/hwmon/nct6775
F: drivers/hwmon/nct6775.c F: drivers/hwmon/nct6775.c
@@ -8064,7 +8064,7 @@ F: drivers/video/logo/logo_parisc*
PC87360 HARDWARE MONITORING DRIVER PC87360 HARDWARE MONITORING DRIVER
M: Jim Cromie <jim.cromie@gmail.com> M: Jim Cromie <jim.cromie@gmail.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/pc87360 F: Documentation/hwmon/pc87360
F: drivers/hwmon/pc87360.c F: drivers/hwmon/pc87360.c
@@ -8076,7 +8076,7 @@ F: drivers/char/pc8736x_gpio.c
PC87427 HARDWARE MONITORING DRIVER PC87427 HARDWARE MONITORING DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/pc87427 F: Documentation/hwmon/pc87427
F: drivers/hwmon/pc87427.c F: drivers/hwmon/pc87427.c
@@ -8380,14 +8380,6 @@ L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
S: Maintained S: Maintained
F: drivers/pinctrl/samsung/ F: drivers/pinctrl/samsung/
PIN CONTROLLER - SINGLE
M: Tony Lindgren <tony@atomide.com>
M: Haojian Zhuang <haojian.zhuang@linaro.org>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
L: linux-omap@vger.kernel.org
S: Maintained
F: drivers/pinctrl/pinctrl-single.c
PIN CONTROLLER - ST SPEAR PIN CONTROLLER - ST SPEAR
M: Viresh Kumar <vireshk@kernel.org> M: Viresh Kumar <vireshk@kernel.org>
L: spear-devel@list.st.com L: spear-devel@list.st.com
@@ -8415,8 +8407,8 @@ F: drivers/rtc/rtc-puv3.c
PMBUS HARDWARE MONITORING DRIVERS PMBUS HARDWARE MONITORING DRIVERS
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
W: http://hwmon.wiki.kernel.org/ W: http://www.lm-sensors.org/
W: http://www.roeck-us.net/linux/drivers/ W: http://www.roeck-us.net/linux/drivers/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
S: Maintained S: Maintained
@@ -8610,7 +8602,7 @@ F: drivers/media/usb/pwc/*
PWM FAN DRIVER PWM FAN DRIVER
M: Kamil Debski <k.debski@samsung.com> M: Kamil Debski <k.debski@samsung.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Supported S: Supported
F: Documentation/devicetree/bindings/hwmon/pwm-fan.txt F: Documentation/devicetree/bindings/hwmon/pwm-fan.txt
F: Documentation/hwmon/pwm-fan F: Documentation/hwmon/pwm-fan
@@ -8954,13 +8946,6 @@ F: drivers/rpmsg/
F: Documentation/rpmsg.txt F: Documentation/rpmsg.txt
F: include/linux/rpmsg.h F: include/linux/rpmsg.h
RENESAS ETHERNET DRIVERS
R: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
L: netdev@vger.kernel.org
L: linux-sh@vger.kernel.org
F: drivers/net/ethernet/renesas/
F: include/linux/sh_eth.h
RESET CONTROLLER FRAMEWORK RESET CONTROLLER FRAMEWORK
M: Philipp Zabel <p.zabel@pengutronix.de> M: Philipp Zabel <p.zabel@pengutronix.de>
S: Maintained S: Maintained
@@ -9882,28 +9867,28 @@ F: Documentation/devicetree/bindings/media/i2c/nokia,smia.txt
SMM665 HARDWARE MONITOR DRIVER SMM665 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/smm665 F: Documentation/hwmon/smm665
F: drivers/hwmon/smm665.c F: drivers/hwmon/smm665.c
SMSC EMC2103 HARDWARE MONITOR DRIVER SMSC EMC2103 HARDWARE MONITOR DRIVER
M: Steve Glendinning <steve.glendinning@shawell.net> M: Steve Glendinning <steve.glendinning@shawell.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/emc2103 F: Documentation/hwmon/emc2103
F: drivers/hwmon/emc2103.c F: drivers/hwmon/emc2103.c
SMSC SCH5627 HARDWARE MONITOR DRIVER SMSC SCH5627 HARDWARE MONITOR DRIVER
M: Hans de Goede <hdegoede@redhat.com> M: Hans de Goede <hdegoede@redhat.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Supported S: Supported
F: Documentation/hwmon/sch5627 F: Documentation/hwmon/sch5627
F: drivers/hwmon/sch5627.c F: drivers/hwmon/sch5627.c
SMSC47B397 HARDWARE MONITOR DRIVER SMSC47B397 HARDWARE MONITOR DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/smsc47b397 F: Documentation/hwmon/smsc47b397
F: drivers/hwmon/smsc47b397.c F: drivers/hwmon/smsc47b397.c
@@ -10289,11 +10274,9 @@ S: Maintained
F: drivers/net/ethernet/dlink/sundance.c F: drivers/net/ethernet/dlink/sundance.c
SUPERH SUPERH
M: Yoshinori Sato <ysato@users.sourceforge.jp>
M: Rich Felker <dalias@libc.org>
L: linux-sh@vger.kernel.org L: linux-sh@vger.kernel.org
Q: http://patchwork.kernel.org/project/linux-sh/list/ Q: http://patchwork.kernel.org/project/linux-sh/list/
S: Maintained S: Orphan
F: Documentation/sh/ F: Documentation/sh/
F: arch/sh/ F: arch/sh/
F: drivers/sh/ F: drivers/sh/
@@ -10830,7 +10813,7 @@ F: include/linux/mmc/sh_mobile_sdhi.h
TMP401 HARDWARE MONITOR DRIVER TMP401 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net> M: Guenter Roeck <linux@roeck-us.net>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/tmp401 F: Documentation/hwmon/tmp401
F: drivers/hwmon/tmp401.c F: drivers/hwmon/tmp401.c
@@ -11564,14 +11547,14 @@ F: Documentation/networking/vrf.txt
VT1211 HARDWARE MONITOR DRIVER VT1211 HARDWARE MONITOR DRIVER
M: Juerg Haefliger <juergh@gmail.com> M: Juerg Haefliger <juergh@gmail.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/vt1211 F: Documentation/hwmon/vt1211
F: drivers/hwmon/vt1211.c F: drivers/hwmon/vt1211.c
VT8231 HARDWARE MONITOR DRIVER VT8231 HARDWARE MONITOR DRIVER
M: Roger Lucas <vt8231@hiddenengine.co.uk> M: Roger Lucas <vt8231@hiddenengine.co.uk>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/vt8231.c F: drivers/hwmon/vt8231.c
@@ -11590,21 +11573,21 @@ F: drivers/w1/
W83791D HARDWARE MONITORING DRIVER W83791D HARDWARE MONITORING DRIVER
M: Marc Hulsman <m.hulsman@tudelft.nl> M: Marc Hulsman <m.hulsman@tudelft.nl>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/w83791d F: Documentation/hwmon/w83791d
F: drivers/hwmon/w83791d.c F: drivers/hwmon/w83791d.c
W83793 HARDWARE MONITORING DRIVER W83793 HARDWARE MONITORING DRIVER
M: Rudolf Marek <r.marek@assembler.cz> M: Rudolf Marek <r.marek@assembler.cz>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/w83793 F: Documentation/hwmon/w83793
F: drivers/hwmon/w83793.c F: drivers/hwmon/w83793.c
W83795 HARDWARE MONITORING DRIVER W83795 HARDWARE MONITORING DRIVER
M: Jean Delvare <jdelvare@suse.com> M: Jean Delvare <jdelvare@suse.com>
L: linux-hwmon@vger.kernel.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/w83795.c F: drivers/hwmon/w83795.c

View File

@@ -1,7 +1,7 @@
VERSION = 4 VERSION = 4
PATCHLEVEL = 4 PATCHLEVEL = 4
SUBLEVEL = 21 SUBLEVEL = 0
EXTRAVERSION = EXTRAVERSION = -rc5
NAME = Blurry Fish Butt NAME = Blurry Fish Butt
# *DOCUMENTATION* # *DOCUMENTATION*
@@ -364,7 +364,7 @@ AFLAGS_MODULE =
LDFLAGS_MODULE = LDFLAGS_MODULE =
CFLAGS_KERNEL = CFLAGS_KERNEL =
AFLAGS_KERNEL = AFLAGS_KERNEL =
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage -fno-tree-loop-im CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
# Use USERINCLUDE when you must reference the UAPI directories only. # Use USERINCLUDE when you must reference the UAPI directories only.
@@ -682,10 +682,9 @@ KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior) KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
else else
# These warnings generated too much noise in a regular build. # This warning generated too much noise in a regular build.
# Use make W=1 to enable them (see scripts/Makefile.build) # Use make W=1 to enable this warning (see scripts/Makefile.build)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
endif endif
ifdef CONFIG_FRAME_POINTER ifdef CONFIG_FRAME_POINTER

View File

@@ -387,7 +387,7 @@ config ARC_HAS_LLSC
config ARC_STAR_9000923308 config ARC_STAR_9000923308
bool "Workaround for llock/scond livelock" bool "Workaround for llock/scond livelock"
default n default y
depends on ISA_ARCV2 && SMP && ARC_HAS_LLSC depends on ISA_ARCV2 && SMP && ARC_HAS_LLSC
config ARC_HAS_SWAPE config ARC_HAS_SWAPE
@@ -445,7 +445,6 @@ config LINUX_LINK_BASE
However some customers have peripherals mapped at this addr, so However some customers have peripherals mapped at this addr, so
Linux needs to be scooted a bit. Linux needs to be scooted a bit.
If you don't know what the above means, leave this setting alone. If you don't know what the above means, leave this setting alone.
This needs to match memory start address specified in Device Tree
config HIGHMEM config HIGHMEM
bool "High Memory Support" bool "High Memory Support"

View File

@@ -18,20 +18,6 @@ cflags-y += -fno-common -pipe -fno-builtin -D__linux__
cflags-$(CONFIG_ISA_ARCOMPACT) += -mA7 cflags-$(CONFIG_ISA_ARCOMPACT) += -mA7
cflags-$(CONFIG_ISA_ARCV2) += -mcpu=archs cflags-$(CONFIG_ISA_ARCV2) += -mcpu=archs
is_700 = $(shell $(CC) -dM -E - < /dev/null | grep -q "ARC700" && echo 1 || echo 0)
ifdef CONFIG_ISA_ARCOMPACT
ifeq ($(is_700), 0)
$(error Toolchain not configured for ARCompact builds)
endif
endif
ifdef CONFIG_ISA_ARCV2
ifeq ($(is_700), 1)
$(error Toolchain not configured for ARCv2 builds)
endif
endif
ifdef CONFIG_ARC_CURR_IN_REG ifdef CONFIG_ARC_CURR_IN_REG
# For a global register defintion, make sure it gets passed to every file # For a global register defintion, make sure it gets passed to every file
# We had a customer reported bug where some code built in kernel was NOT using # We had a customer reported bug where some code built in kernel was NOT using
@@ -62,6 +48,8 @@ endif
endif endif
cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables
# By default gcc 4.8 generates dwarf4 which kernel unwinder can't grok # By default gcc 4.8 generates dwarf4 which kernel unwinder can't grok
ifeq ($(atleast_gcc48),y) ifeq ($(atleast_gcc48),y)
cflags-$(CONFIG_ARC_DW2_UNWIND) += -gdwarf-2 cflags-$(CONFIG_ARC_DW2_UNWIND) += -gdwarf-2
@@ -93,7 +81,7 @@ endif
LIBGCC := $(shell $(CC) $(cflags-y) --print-libgcc-file-name) LIBGCC := $(shell $(CC) $(cflags-y) --print-libgcc-file-name)
# Modules with short calls might break for calls into builtin-kernel # Modules with short calls might break for calls into builtin-kernel
KBUILD_CFLAGS_MODULE += -mlong-calls -mno-millicode KBUILD_CFLAGS_MODULE += -mlong-calls
# Finally dump eveything into kernel build system # Finally dump eveything into kernel build system
KBUILD_CFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y)

View File

@@ -46,7 +46,6 @@
snps,pbl = < 32 >; snps,pbl = < 32 >;
clocks = <&apbclk>; clocks = <&apbclk>;
clock-names = "stmmaceth"; clock-names = "stmmaceth";
max-speed = <100>;
}; };
ehci@0x40000 { ehci@0x40000 {

View File

@@ -17,8 +17,7 @@
memory { memory {
device_type = "memory"; device_type = "memory";
/* CONFIG_LINUX_LINK_BASE needs to match low mem start */ reg = <0x0 0x80000000 0x0 0x40000000 /* 1 GB low mem */
reg = <0x0 0x80000000 0x0 0x20000000 /* 512 MB low mem */
0x1 0x00000000 0x0 0x40000000>; /* 1 GB highmem */ 0x1 0x00000000 0x0 0x40000000>; /* 1 GB highmem */
}; };

View File

@@ -374,6 +374,12 @@ static inline int is_isa_arcompact(void)
return IS_ENABLED(CONFIG_ISA_ARCOMPACT); return IS_ENABLED(CONFIG_ISA_ARCOMPACT);
} }
#if defined(CONFIG_ISA_ARCOMPACT) && !defined(_CPU_DEFAULT_A7)
#error "Toolchain not configured for ARCompact builds"
#elif defined(CONFIG_ISA_ARCV2) && !defined(_CPU_DEFAULT_HS)
#error "Toolchain not configured for ARCv2 builds"
#endif
#endif /* __ASEMBLY__ */ #endif /* __ASEMBLY__ */
#endif /* _ASM_ARC_ARCREGS_H */ #endif /* _ASM_ARC_ARCREGS_H */

View File

@@ -35,6 +35,21 @@ static inline void op##_bit(unsigned long nr, volatile unsigned long *m)\
\ \
m += nr >> 5; \ m += nr >> 5; \
\ \
/* \
* ARC ISA micro-optimization: \
* \
* Instructions dealing with bitpos only consider lower 5 bits \
* e.g (x << 33) is handled like (x << 1) by ASL instruction \
* (mem pointer still needs adjustment to point to next word) \
* \
* Hence the masking to clamp @nr arg can be elided in general. \
* \
* However if @nr is a constant (above assumed in a register), \
* and greater than 31, gcc can optimize away (x << 33) to 0, \
* as overflow, given the 32-bit ISA. Thus masking needs to be \
* done for const @nr, but no code is generated due to gcc \
* const prop. \
*/ \
nr &= 0x1f; \ nr &= 0x1f; \
\ \
__asm__ __volatile__( \ __asm__ __volatile__( \

View File

@@ -62,7 +62,9 @@ extern int ioc_exists;
#define ARC_REG_IC_IVIC 0x10 #define ARC_REG_IC_IVIC 0x10
#define ARC_REG_IC_CTRL 0x11 #define ARC_REG_IC_CTRL 0x11
#define ARC_REG_IC_IVIL 0x19 #define ARC_REG_IC_IVIL 0x19
#if defined(CONFIG_ARC_MMU_V3) || defined(CONFIG_ARC_MMU_V4)
#define ARC_REG_IC_PTAG 0x1E #define ARC_REG_IC_PTAG 0x1E
#endif
#define ARC_REG_IC_PTAG_HI 0x1F #define ARC_REG_IC_PTAG_HI 0x1F
/* Bit val in IC_CTRL */ /* Bit val in IC_CTRL */

View File

@@ -142,7 +142,7 @@
#ifdef CONFIG_ARC_CURR_IN_REG #ifdef CONFIG_ARC_CURR_IN_REG
; Retrieve orig r25 and save it with rest of callee_regs ; Retrieve orig r25 and save it with rest of callee_regs
ld r12, [r12, PT_user_r25] ld.as r12, [r12, PT_user_r25]
PUSH r12 PUSH r12
#else #else
PUSH r25 PUSH r25
@@ -198,7 +198,7 @@
; SP is back to start of pt_regs ; SP is back to start of pt_regs
#ifdef CONFIG_ARC_CURR_IN_REG #ifdef CONFIG_ARC_CURR_IN_REG
st r12, [sp, PT_user_r25] st.as r12, [sp, PT_user_r25]
#endif #endif
.endm .endm

View File

@@ -13,15 +13,6 @@
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <asm/page.h> #include <asm/page.h>
#ifdef CONFIG_ISA_ARCV2
#include <asm/barrier.h>
#define __iormb() rmb()
#define __iowmb() wmb()
#else
#define __iormb() do { } while (0)
#define __iowmb() do { } while (0)
#endif
extern void __iomem *ioremap(unsigned long physaddr, unsigned long size); extern void __iomem *ioremap(unsigned long physaddr, unsigned long size);
extern void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size, extern void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size,
unsigned long flags); unsigned long flags);
@@ -31,15 +22,6 @@ extern void iounmap(const void __iomem *addr);
#define ioremap_wc(phy, sz) ioremap(phy, sz) #define ioremap_wc(phy, sz) ioremap(phy, sz)
#define ioremap_wt(phy, sz) ioremap(phy, sz) #define ioremap_wt(phy, sz) ioremap(phy, sz)
/*
* io{read,write}{16,32}be() macros
*/
#define ioread16be(p) ({ u16 __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(); __v; })
#define ioread32be(p) ({ u32 __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(); __v; })
#define iowrite16be(v,p) ({ __iowmb(); __raw_writew((__force u16)cpu_to_be16(v), p); })
#define iowrite32be(v,p) ({ __iowmb(); __raw_writel((__force u32)cpu_to_be32(v), p); })
/* Change struct page to physical address */ /* Change struct page to physical address */
#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
@@ -117,6 +99,15 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr)
} }
#ifdef CONFIG_ISA_ARCV2
#include <asm/barrier.h>
#define __iormb() rmb()
#define __iowmb() wmb()
#else
#define __iormb() do { } while (0)
#define __iowmb() do { } while (0)
#endif
/* /*
* MMIO can also get buffered/optimized in micro-arch, so barriers needed * MMIO can also get buffered/optimized in micro-arch, so barriers needed
* Based on ARM model for the typical use case * Based on ARM model for the typical use case
@@ -138,23 +129,15 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr)
#define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); }) #define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); })
/* /*
* Relaxed API for drivers which can handle barrier ordering themselves * Relaxed API for drivers which can handle any ordering themselves
*
* Also these are defined to perform little endian accesses.
* To provide the typical device register semantics of fixed endian,
* swap the byte order for Big Endian
*
* http://lkml.kernel.org/r/201603100845.30602.arnd@arndb.de
*/ */
#define readb_relaxed(c) __raw_readb(c) #define readb_relaxed(c) __raw_readb(c)
#define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16) \ #define readw_relaxed(c) __raw_readw(c)
__raw_readw(c)); __r; }) #define readl_relaxed(c) __raw_readl(c)
#define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \
__raw_readl(c)); __r; })
#define writeb_relaxed(v,c) __raw_writeb(v,c) #define writeb_relaxed(v,c) __raw_writeb(v,c)
#define writew_relaxed(v,c) __raw_writew((__force u16) cpu_to_le16(v),c) #define writew_relaxed(v,c) __raw_writew(v,c)
#define writel_relaxed(v,c) __raw_writel((__force u32) cpu_to_le32(v),c) #define writel_relaxed(v,c) __raw_writel(v,c)
#include <asm-generic/io.h> #include <asm-generic/io.h>

View File

@@ -22,7 +22,6 @@
#define AUX_IRQ_CTRL 0x00E #define AUX_IRQ_CTRL 0x00E
#define AUX_IRQ_ACT 0x043 /* Active Intr across all levels */ #define AUX_IRQ_ACT 0x043 /* Active Intr across all levels */
#define AUX_IRQ_LVL_PEND 0x200 /* Pending Intr across all levels */ #define AUX_IRQ_LVL_PEND 0x200 /* Pending Intr across all levels */
#define AUX_IRQ_HINT 0x201 /* For generating Soft Interrupts */
#define AUX_IRQ_PRIORITY 0x206 #define AUX_IRQ_PRIORITY 0x206
#define ICAUSE 0x40a #define ICAUSE 0x40a
#define AUX_IRQ_SELECT 0x40b #define AUX_IRQ_SELECT 0x40b
@@ -113,16 +112,6 @@ static inline int arch_irqs_disabled(void)
return arch_irqs_disabled_flags(arch_local_save_flags()); return arch_irqs_disabled_flags(arch_local_save_flags());
} }
static inline void arc_softirq_trigger(int irq)
{
write_aux_reg(AUX_IRQ_HINT, irq);
}
static inline void arc_softirq_clear(int irq)
{
write_aux_reg(AUX_IRQ_HINT, 0);
}
#else #else
.macro IRQ_DISABLE scratch .macro IRQ_DISABLE scratch

View File

@@ -188,10 +188,10 @@ static inline int arch_irqs_disabled(void)
.endm .endm
.macro IRQ_ENABLE scratch .macro IRQ_ENABLE scratch
TRACE_ASM_IRQ_ENABLE
lr \scratch, [status32] lr \scratch, [status32]
or \scratch, \scratch, (STATUS_E1_MASK | STATUS_E2_MASK) or \scratch, \scratch, (STATUS_E1_MASK | STATUS_E2_MASK)
flag \scratch flag \scratch
TRACE_ASM_IRQ_ENABLE
.endm .endm
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */

View File

@@ -23,7 +23,7 @@
* @dt_compat: Array of device tree 'compatible' strings * @dt_compat: Array of device tree 'compatible' strings
* (XXX: although only 1st entry is looked at) * (XXX: although only 1st entry is looked at)
* @init_early: Very early callback [called from setup_arch()] * @init_early: Very early callback [called from setup_arch()]
* @init_per_cpu: for each CPU as it is coming up (SMP as well as UP) * @init_cpu_smp: for each CPU as it is coming up (SMP as well as UP)
* [(M):init_IRQ(), (o):start_kernel_secondary()] * [(M):init_IRQ(), (o):start_kernel_secondary()]
* @init_machine: arch initcall level callback (e.g. populate static * @init_machine: arch initcall level callback (e.g. populate static
* platform devices or parse Devicetree) * platform devices or parse Devicetree)
@@ -35,7 +35,7 @@ struct machine_desc {
const char **dt_compat; const char **dt_compat;
void (*init_early)(void); void (*init_early)(void);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
void (*init_per_cpu)(unsigned int); void (*init_cpu_smp)(unsigned int);
#endif #endif
void (*init_machine)(void); void (*init_machine)(void);
void (*init_late)(void); void (*init_late)(void);

View File

@@ -110,7 +110,7 @@
#define ___DEF (_PAGE_PRESENT | _PAGE_CACHEABLE) #define ___DEF (_PAGE_PRESENT | _PAGE_CACHEABLE)
/* Set of bits not changed in pte_modify */ /* Set of bits not changed in pte_modify */
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_SPECIAL) #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
/* More Abbrevaited helpers */ /* More Abbrevaited helpers */
#define PAGE_U_NONE __pgprot(___DEF) #define PAGE_U_NONE __pgprot(___DEF)

View File

@@ -48,7 +48,7 @@ extern int smp_ipi_irq_setup(int cpu, int irq);
* @init_early_smp: A SMP specific h/w block can init itself * @init_early_smp: A SMP specific h/w block can init itself
* Could be common across platforms so not covered by * Could be common across platforms so not covered by
* mach_desc->init_early() * mach_desc->init_early()
* @init_per_cpu: Called for each core so SMP h/w block driver can do * @init_irq_cpu: Called for each core so SMP h/w block driver can do
* any needed setup per cpu (e.g. IPI request) * any needed setup per cpu (e.g. IPI request)
* @cpu_kick: For Master to kickstart a cpu (optionally at a PC) * @cpu_kick: For Master to kickstart a cpu (optionally at a PC)
* @ipi_send: To send IPI to a @cpu * @ipi_send: To send IPI to a @cpu
@@ -57,7 +57,7 @@ extern int smp_ipi_irq_setup(int cpu, int irq);
struct plat_smp_ops { struct plat_smp_ops {
const char *info; const char *info;
void (*init_early_smp)(void); void (*init_early_smp)(void);
void (*init_per_cpu)(int cpu); void (*init_irq_cpu)(int cpu);
void (*cpu_kick)(int cpu, unsigned long pc); void (*cpu_kick)(int cpu, unsigned long pc);
void (*ipi_send)(int cpu); void (*ipi_send)(int cpu);
void (*ipi_clear)(int irq); void (*ipi_clear)(int irq);

View File

@@ -112,6 +112,7 @@ struct unwind_frame_info {
extern int arc_unwind(struct unwind_frame_info *frame); extern int arc_unwind(struct unwind_frame_info *frame);
extern void arc_unwind_init(void); extern void arc_unwind_init(void);
extern void arc_unwind_setup(void);
extern void *unwind_add_table(struct module *module, const void *table_start, extern void *unwind_add_table(struct module *module, const void *table_start,
unsigned long table_size); unsigned long table_size);
extern void unwind_remove_table(void *handle, int init_only); extern void unwind_remove_table(void *handle, int init_only);
@@ -151,6 +152,9 @@ static inline void arc_unwind_init(void)
{ {
} }
static inline void arc_unwind_setup(void)
{
}
#define unwind_add_table(a, b, c) #define unwind_add_table(a, b, c)
#define unwind_remove_table(a, b) #define unwind_remove_table(a, b)

View File

@@ -45,12 +45,11 @@ VECTOR reserved ; Reserved slots
VECTOR handle_interrupt ; (16) Timer0 VECTOR handle_interrupt ; (16) Timer0
VECTOR handle_interrupt ; unused (Timer1) VECTOR handle_interrupt ; unused (Timer1)
VECTOR handle_interrupt ; unused (WDT) VECTOR handle_interrupt ; unused (WDT)
VECTOR handle_interrupt ; (19) Inter core Interrupt (IPI) VECTOR handle_interrupt ; (19) ICI (inter core interrupt)
VECTOR handle_interrupt ; (20) perf Interrupt VECTOR handle_interrupt
VECTOR handle_interrupt ; (21) Software Triggered Intr (Self IPI) VECTOR handle_interrupt
VECTOR handle_interrupt ; unused VECTOR handle_interrupt
VECTOR handle_interrupt ; (23) unused VECTOR handle_interrupt ; (23) End of fixed IRQs
# End of fixed IRQs
.rept CONFIG_ARC_NUMBER_OF_INTERRUPTS - 8 .rept CONFIG_ARC_NUMBER_OF_INTERRUPTS - 8
VECTOR handle_interrupt VECTOR handle_interrupt
@@ -212,11 +211,7 @@ debug_marker_syscall:
; (since IRQ NOT allowed in DS in ARCv2, this can only happen if orig ; (since IRQ NOT allowed in DS in ARCv2, this can only happen if orig
; entry was via Exception in DS which got preempted in kernel). ; entry was via Exception in DS which got preempted in kernel).
; ;
; IRQ RTIE won't reliably restore DE bit and/or BTA, needs workaround ; IRQ RTIE won't reliably restore DE bit and/or BTA, needs handling
;
; Solution is return from Intr w/o any delay slot quirks into a kernel trampoline
; and from pure kernel mode return to delay slot which handles DS bit/BTA correctly
.Lintr_ret_to_delay_slot: .Lintr_ret_to_delay_slot:
debug_marker_ds: debug_marker_ds:
@@ -227,23 +222,18 @@ debug_marker_ds:
ld r2, [sp, PT_ret] ld r2, [sp, PT_ret]
ld r3, [sp, PT_status32] ld r3, [sp, PT_status32]
; STAT32 for Int return created from scratch
; (No delay dlot, disable Further intr in trampoline)
bic r0, r3, STATUS_U_MASK|STATUS_DE_MASK|STATUS_IE_MASK|STATUS_L_MASK bic r0, r3, STATUS_U_MASK|STATUS_DE_MASK|STATUS_IE_MASK|STATUS_L_MASK
st r0, [sp, PT_status32] st r0, [sp, PT_status32]
mov r1, .Lintr_ret_to_delay_slot_2 mov r1, .Lintr_ret_to_delay_slot_2
st r1, [sp, PT_ret] st r1, [sp, PT_ret]
; Orig exception PC/STAT32 safekept @orig_r0 and @event stack slots
st r2, [sp, 0] st r2, [sp, 0]
st r3, [sp, 4] st r3, [sp, 4]
b .Lisr_ret_fast_path b .Lisr_ret_fast_path
.Lintr_ret_to_delay_slot_2: .Lintr_ret_to_delay_slot_2:
; Trampoline to restore orig exception PC/STAT32/BTA/AUX_USER_SP
sub sp, sp, SZ_PT_REGS sub sp, sp, SZ_PT_REGS
st r9, [sp, -4] st r9, [sp, -4]
@@ -253,19 +243,11 @@ debug_marker_ds:
ld r9, [sp, 4] ld r9, [sp, 4]
sr r9, [erstatus] sr r9, [erstatus]
; restore AUX_USER_SP if returning to U mode
bbit0 r9, STATUS_U_BIT, 1f
ld r9, [sp, PT_sp]
sr r9, [AUX_USER_SP]
1:
ld r9, [sp, 8] ld r9, [sp, 8]
sr r9, [erbta] sr r9, [erbta]
ld r9, [sp, -4] ld r9, [sp, -4]
add sp, sp, SZ_PT_REGS add sp, sp, SZ_PT_REGS
; return from pure kernel mode to delay slot
rtie rtie
END(ret_from_exception) END(ret_from_exception)

View File

@@ -106,21 +106,10 @@ static struct irq_chip arcv2_irq_chip = {
static int arcv2_irq_map(struct irq_domain *d, unsigned int irq, static int arcv2_irq_map(struct irq_domain *d, unsigned int irq,
irq_hw_number_t hw) irq_hw_number_t hw)
{ {
/* if (irq == TIMER0_IRQ || irq == IPI_IRQ)
* core intc IRQs [16, 23]:
* Statically assigned always private-per-core (Timers, WDT, IPI, PCT)
*/
if (hw < 24) {
/*
* A subsequent request_percpu_irq() fails if percpu_devid is
* not set. That in turns sets NOAUTOEN, meaning each core needs
* to call enable_percpu_irq()
*/
irq_set_percpu_devid(irq);
irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_percpu_irq); irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_percpu_irq);
} else { else
irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_level_irq); irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_level_irq);
}
return 0; return 0;
} }

View File

@@ -29,11 +29,11 @@ void __init init_IRQ(void)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* a SMP H/w block could do IPI IRQ request here */ /* a SMP H/w block could do IPI IRQ request here */
if (plat_smp_ops.init_per_cpu) if (plat_smp_ops.init_irq_cpu)
plat_smp_ops.init_per_cpu(smp_processor_id()); plat_smp_ops.init_irq_cpu(smp_processor_id());
if (machine_desc->init_per_cpu) if (machine_desc->init_cpu_smp)
machine_desc->init_per_cpu(smp_processor_id()); machine_desc->init_cpu_smp(smp_processor_id());
#endif #endif
} }
@@ -51,18 +51,6 @@ void arch_do_IRQ(unsigned int irq, struct pt_regs *regs)
set_irq_regs(old_regs); set_irq_regs(old_regs);
} }
/*
* API called for requesting percpu interrupts - called by each CPU
* - For boot CPU, actually request the IRQ with genirq core + enables
* - For subsequent callers only enable called locally
*
* Relies on being called by boot cpu first (i.e. request called ahead) of
* any enable as expected by genirq. Hence Suitable only for TIMER, IPI
* which are guaranteed to be setup on boot core first.
* Late probed peripherals such as perf can't use this as there no guarantee
* of being called on boot CPU first.
*/
void arc_request_percpu_irq(int irq, int cpu, void arc_request_percpu_irq(int irq, int cpu,
irqreturn_t (*isr)(int irq, void *dev), irqreturn_t (*isr)(int irq, void *dev),
const char *irq_nm, const char *irq_nm,
@@ -72,17 +60,14 @@ void arc_request_percpu_irq(int irq, int cpu,
if (!cpu) { if (!cpu) {
int rc; int rc;
#ifdef CONFIG_ISA_ARCOMPACT
/* /*
* A subsequent request_percpu_irq() fails if percpu_devid is * These 2 calls are essential to making percpu IRQ APIs work
* not set. That in turns sets NOAUTOEN, meaning each core needs * Ideally these details could be hidden in irq chip map function
* to call enable_percpu_irq() * but the issue is IPIs IRQs being static (non-DT) and platform
* * specific, so we can't identify them there.
* For ARCv2, this is done in irq map function since we know
* which irqs are strictly per cpu
*/ */
irq_set_percpu_devid(irq); irq_set_percpu_devid(irq);
#endif irq_modify_status(irq, IRQ_NOAUTOEN, 0); /* @irq, @clr, @set */
rc = request_percpu_irq(irq, isr, irq_nm, percpu_dev); rc = request_percpu_irq(irq, isr, irq_nm, percpu_dev);
if (rc) if (rc)

View File

@@ -11,12 +11,9 @@
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <asm/irqflags-arcv2.h>
#include <asm/mcip.h> #include <asm/mcip.h>
#include <asm/setup.h> #include <asm/setup.h>
#define SOFTIRQ_IRQ 21
static char smp_cpuinfo_buf[128]; static char smp_cpuinfo_buf[128];
static int idu_detected; static int idu_detected;
@@ -25,7 +22,6 @@ static DEFINE_RAW_SPINLOCK(mcip_lock);
static void mcip_setup_per_cpu(int cpu) static void mcip_setup_per_cpu(int cpu)
{ {
smp_ipi_irq_setup(cpu, IPI_IRQ); smp_ipi_irq_setup(cpu, IPI_IRQ);
smp_ipi_irq_setup(cpu, SOFTIRQ_IRQ);
} }
static void mcip_ipi_send(int cpu) static void mcip_ipi_send(int cpu)
@@ -33,12 +29,6 @@ static void mcip_ipi_send(int cpu)
unsigned long flags; unsigned long flags;
int ipi_was_pending; int ipi_was_pending;
/* ARConnect can only send IPI to others */
if (unlikely(cpu == raw_smp_processor_id())) {
arc_softirq_trigger(SOFTIRQ_IRQ);
return;
}
/* /*
* NOTE: We must spin here if the other cpu hasn't yet * NOTE: We must spin here if the other cpu hasn't yet
* serviced a previous message. This can burn lots * serviced a previous message. This can burn lots
@@ -73,11 +63,6 @@ static void mcip_ipi_clear(int irq)
unsigned long flags; unsigned long flags;
unsigned int __maybe_unused copy; unsigned int __maybe_unused copy;
if (unlikely(irq == SOFTIRQ_IRQ)) {
arc_softirq_clear(irq);
return;
}
raw_spin_lock_irqsave(&mcip_lock, flags); raw_spin_lock_irqsave(&mcip_lock, flags);
/* Who sent the IPI */ /* Who sent the IPI */
@@ -147,7 +132,7 @@ static void mcip_probe_n_setup(void)
struct plat_smp_ops plat_smp_ops = { struct plat_smp_ops plat_smp_ops = {
.info = smp_cpuinfo_buf, .info = smp_cpuinfo_buf,
.init_early_smp = mcip_probe_n_setup, .init_early_smp = mcip_probe_n_setup,
.init_per_cpu = mcip_setup_per_cpu, .init_irq_cpu = mcip_setup_per_cpu,
.ipi_send = mcip_ipi_send, .ipi_send = mcip_ipi_send,
.ipi_clear = mcip_ipi_clear, .ipi_clear = mcip_ipi_clear,
}; };

View File

@@ -428,11 +428,12 @@ static irqreturn_t arc_pmu_intr(int irq, void *dev)
#endif /* CONFIG_ISA_ARCV2 */ #endif /* CONFIG_ISA_ARCV2 */
static void arc_cpu_pmu_irq_init(void *data) void arc_cpu_pmu_irq_init(void)
{ {
int irq = *(int *)data; struct arc_pmu_cpu *pmu_cpu = this_cpu_ptr(&arc_pmu_cpu);
enable_percpu_irq(irq, IRQ_TYPE_NONE); arc_request_percpu_irq(arc_pmu->irq, smp_processor_id(), arc_pmu_intr,
"ARC perf counters", pmu_cpu);
/* Clear all pending interrupt flags */ /* Clear all pending interrupt flags */
write_aux_reg(ARC_REG_PCT_INT_ACT, 0xffffffff); write_aux_reg(ARC_REG_PCT_INT_ACT, 0xffffffff);
@@ -514,6 +515,7 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
if (has_interrupts) { if (has_interrupts) {
int irq = platform_get_irq(pdev, 0); int irq = platform_get_irq(pdev, 0);
unsigned long flags;
if (irq < 0) { if (irq < 0) {
pr_err("Cannot get IRQ number for the platform\n"); pr_err("Cannot get IRQ number for the platform\n");
@@ -522,12 +524,24 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
arc_pmu->irq = irq; arc_pmu->irq = irq;
/* intc map function ensures irq_set_percpu_devid() called */ /*
request_percpu_irq(irq, arc_pmu_intr, "ARC perf counters", * arc_cpu_pmu_irq_init() needs to be called on all cores for
this_cpu_ptr(&arc_pmu_cpu)); * their respective local PMU.
* However we use opencoded on_each_cpu() to ensure it is called
on_each_cpu(arc_cpu_pmu_irq_init, &irq, 1); * on core0 first, so that arc_request_percpu_irq() sets up
* AUTOEN etc. Otherwise enable_percpu_irq() fails to enable
* perf IRQ on non master cores.
* see arc_request_percpu_irq()
*/
preempt_disable();
local_irq_save(flags);
arc_cpu_pmu_irq_init();
local_irq_restore(flags);
smp_call_function((smp_call_func_t)arc_cpu_pmu_irq_init, 0, 1);
preempt_enable();
/* Clean all pending interrupt flags */
write_aux_reg(ARC_REG_PCT_INT_ACT, 0xffffffff);
} else } else
arc_pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT; arc_pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;

View File

@@ -332,6 +332,10 @@ static void arc_chk_core_config(void)
pr_warn("CONFIG_ARC_FPU_SAVE_RESTORE needed for working apps\n"); pr_warn("CONFIG_ARC_FPU_SAVE_RESTORE needed for working apps\n");
else if (!cpu->extn.fpu_dp && fpu_enabled) else if (!cpu->extn.fpu_dp && fpu_enabled)
panic("FPU non-existent, disable CONFIG_ARC_FPU_SAVE_RESTORE\n"); panic("FPU non-existent, disable CONFIG_ARC_FPU_SAVE_RESTORE\n");
if (is_isa_arcv2() && IS_ENABLED(CONFIG_SMP) && cpu->isa.atomic &&
!IS_ENABLED(CONFIG_ARC_STAR_9000923308))
panic("llock/scond livelock workaround missing\n");
} }
/* /*
@@ -425,6 +429,7 @@ void __init setup_arch(char **cmdline_p)
#endif #endif
arc_unwind_init(); arc_unwind_init();
arc_unwind_setup();
} }
static int __init customize_machine(void) static int __init customize_machine(void)

View File

@@ -132,11 +132,11 @@ void start_kernel_secondary(void)
pr_info("## CPU%u LIVE ##: Executing Code...\n", cpu); pr_info("## CPU%u LIVE ##: Executing Code...\n", cpu);
/* Some SMP H/w setup - for each cpu */ /* Some SMP H/w setup - for each cpu */
if (plat_smp_ops.init_per_cpu) if (plat_smp_ops.init_irq_cpu)
plat_smp_ops.init_per_cpu(cpu); plat_smp_ops.init_irq_cpu(cpu);
if (machine_desc->init_per_cpu) if (machine_desc->init_cpu_smp)
machine_desc->init_per_cpu(cpu); machine_desc->init_cpu_smp(cpu);
arc_local_timer_setup(); arc_local_timer_setup();

View File

@@ -142,7 +142,7 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
* prelogue is setup (callee regs saved and then fp set and not other * prelogue is setup (callee regs saved and then fp set and not other
* way around * way around
*/ */
pr_warn_once("CONFIG_ARC_DW2_UNWIND needs to be enabled\n"); pr_warn("CONFIG_ARC_DW2_UNWIND needs to be enabled\n");
return 0; return 0;
#endif #endif

View File

@@ -170,23 +170,6 @@ static struct unwind_table *find_table(unsigned long pc)
static unsigned long read_pointer(const u8 **pLoc, static unsigned long read_pointer(const u8 **pLoc,
const void *end, signed ptrType); const void *end, signed ptrType);
static void init_unwind_hdr(struct unwind_table *table,
void *(*alloc) (unsigned long));
/*
* wrappers for header alloc (vs. calling one vs. other at call site)
* to elide section mismatches warnings
*/
static void *__init unw_hdr_alloc_early(unsigned long sz)
{
return __alloc_bootmem_nopanic(sz, sizeof(unsigned int),
MAX_DMA_ADDRESS);
}
static void *unw_hdr_alloc(unsigned long sz)
{
return kmalloc(sz, GFP_KERNEL);
}
static void init_unwind_table(struct unwind_table *table, const char *name, static void init_unwind_table(struct unwind_table *table, const char *name,
const void *core_start, unsigned long core_size, const void *core_start, unsigned long core_size,
@@ -226,8 +209,6 @@ void __init arc_unwind_init(void)
__start_unwind, __end_unwind - __start_unwind, __start_unwind, __end_unwind - __start_unwind,
NULL, 0); NULL, 0);
/*__start_unwind_hdr, __end_unwind_hdr - __start_unwind_hdr);*/ /*__start_unwind_hdr, __end_unwind_hdr - __start_unwind_hdr);*/
init_unwind_hdr(&root_table, unw_hdr_alloc_early);
} }
static const u32 bad_cie, not_fde; static const u32 bad_cie, not_fde;
@@ -260,7 +241,7 @@ static void swap_eh_frame_hdr_table_entries(void *p1, void *p2, int size)
e2->fde = v; e2->fde = v;
} }
static void init_unwind_hdr(struct unwind_table *table, static void __init setup_unwind_table(struct unwind_table *table,
void *(*alloc) (unsigned long)) void *(*alloc) (unsigned long))
{ {
const u8 *ptr; const u8 *ptr;
@@ -296,10 +277,10 @@ static void init_unwind_hdr(struct unwind_table *table,
if (cie == &not_fde) if (cie == &not_fde)
continue; continue;
if (cie == NULL || cie == &bad_cie) if (cie == NULL || cie == &bad_cie)
goto ret_err; return;
ptrType = fde_pointer_type(cie); ptrType = fde_pointer_type(cie);
if (ptrType < 0) if (ptrType < 0)
goto ret_err; return;
ptr = (const u8 *)(fde + 2); ptr = (const u8 *)(fde + 2);
if (!read_pointer(&ptr, (const u8 *)(fde + 1) + *fde, if (!read_pointer(&ptr, (const u8 *)(fde + 1) + *fde,
@@ -315,15 +296,13 @@ static void init_unwind_hdr(struct unwind_table *table,
} }
if (tableSize || !n) if (tableSize || !n)
goto ret_err; return;
hdrSize = 4 + sizeof(unsigned long) + sizeof(unsigned int) hdrSize = 4 + sizeof(unsigned long) + sizeof(unsigned int)
+ 2 * n * sizeof(unsigned long); + 2 * n * sizeof(unsigned long);
header = alloc(hdrSize); header = alloc(hdrSize);
if (!header) if (!header)
goto ret_err; return;
header->version = 1; header->version = 1;
header->eh_frame_ptr_enc = DW_EH_PE_abs | DW_EH_PE_native; header->eh_frame_ptr_enc = DW_EH_PE_abs | DW_EH_PE_native;
header->fde_count_enc = DW_EH_PE_abs | DW_EH_PE_data4; header->fde_count_enc = DW_EH_PE_abs | DW_EH_PE_data4;
@@ -361,10 +340,18 @@ static void init_unwind_hdr(struct unwind_table *table,
table->hdrsz = hdrSize; table->hdrsz = hdrSize;
smp_wmb(); smp_wmb();
table->header = (const void *)header; table->header = (const void *)header;
return; }
ret_err: static void *__init balloc(unsigned long sz)
panic("Attention !!! Dwarf FDE parsing errors\n");; {
return __alloc_bootmem_nopanic(sz,
sizeof(unsigned int),
__pa(MAX_DMA_ADDRESS));
}
void __init arc_unwind_setup(void)
{
setup_unwind_table(&root_table, balloc);
} }
#ifdef CONFIG_MODULES #ifdef CONFIG_MODULES
@@ -390,8 +377,6 @@ void *unwind_add_table(struct module *module, const void *table_start,
table_start, table_size, table_start, table_size,
NULL, 0); NULL, 0);
init_unwind_hdr(table, unw_hdr_alloc);
#ifdef UNWIND_DEBUG #ifdef UNWIND_DEBUG
unw_debug("Table added for [%s] %lx %lx\n", unw_debug("Table added for [%s] %lx %lx\n",
module->name, table->core.pc, table->core.range); module->name, table->core.pc, table->core.range);
@@ -454,7 +439,6 @@ void unwind_remove_table(void *handle, int init_only)
info.init_only = init_only; info.init_only = init_only;
unlink_table(&info); /* XXX: SMP */ unlink_table(&info); /* XXX: SMP */
kfree(table->header);
kfree(table); kfree(table);
} }
@@ -604,6 +588,9 @@ static signed fde_pointer_type(const u32 *cie)
const u8 *ptr = (const u8 *)(cie + 2); const u8 *ptr = (const u8 *)(cie + 2);
unsigned version = *ptr; unsigned version = *ptr;
if (version != 1)
return -1; /* unsupported */
if (*++ptr) { if (*++ptr) {
const char *aug; const char *aug;
const u8 *end = (const u8 *)(cie + 1) + *cie; const u8 *end = (const u8 *)(cie + 1) + *cie;
@@ -1015,7 +1002,9 @@ int arc_unwind(struct unwind_frame_info *frame)
ptr = (const u8 *)(cie + 2); ptr = (const u8 *)(cie + 2);
end = (const u8 *)(cie + 1) + *cie; end = (const u8 *)(cie + 1) + *cie;
frame->call_frame = 1; frame->call_frame = 1;
if (*++ptr) { if ((state.version = *ptr) != 1)
cie = NULL; /* unsupported version */
else if (*++ptr) {
/* check if augmentation size is first (thus present) */ /* check if augmentation size is first (thus present) */
if (*ptr == 'z') { if (*ptr == 'z') {
while (++ptr < end && *ptr) { while (++ptr < end && *ptr) {

View File

@@ -914,15 +914,6 @@ void arc_cache_init(void)
printk(arc_cache_mumbojumbo(0, str, sizeof(str))); printk(arc_cache_mumbojumbo(0, str, sizeof(str)));
/*
* Only master CPU needs to execute rest of function:
* - Assume SMP so all cores will have same cache config so
* any geomtry checks will be same for all
* - IOC setup / dma callbacks only need to be setup once
*/
if (cpu)
return;
if (IS_ENABLED(CONFIG_ARC_HAS_ICACHE)) { if (IS_ENABLED(CONFIG_ARC_HAS_ICACHE)) {
struct cpuinfo_arc_cache *ic = &cpuinfo_arc700[cpu].icache; struct cpuinfo_arc_cache *ic = &cpuinfo_arc700[cpu].icache;

View File

@@ -111,7 +111,7 @@ void __kunmap_atomic(void *kv)
} }
EXPORT_SYMBOL(__kunmap_atomic); EXPORT_SYMBOL(__kunmap_atomic);
static noinline pte_t * __init alloc_kmap_pgtable(unsigned long kvaddr) noinline pte_t *alloc_kmap_pgtable(unsigned long kvaddr)
{ {
pgd_t *pgd_k; pgd_t *pgd_k;
pud_t *pud_k; pud_t *pud_k;
@@ -127,7 +127,7 @@ static noinline pte_t * __init alloc_kmap_pgtable(unsigned long kvaddr)
return pte_k; return pte_k;
} }
void __init kmap_init(void) void kmap_init(void)
{ {
/* Due to recursive include hell, we can't do this in processor.h */ /* Due to recursive include hell, we can't do this in processor.h */
BUILD_BUG_ON(PAGE_OFFSET < (VMALLOC_END + FIXMAP_SIZE + PKMAP_SIZE)); BUILD_BUG_ON(PAGE_OFFSET < (VMALLOC_END + FIXMAP_SIZE + PKMAP_SIZE));

View File

@@ -51,9 +51,7 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
int in_use = 0; int in_use = 0;
if (!low_mem_sz) { if (!low_mem_sz) {
if (base != low_mem_start) BUG_ON(base != low_mem_start);
panic("CONFIG_LINUX_LINK_BASE != DT memory { }");
low_mem_sz = size; low_mem_sz = size;
in_use = 1; in_use = 1;
} else { } else {

View File

@@ -162,9 +162,10 @@ choice
mobile SoCs in the Kona family of chips (e.g. bcm28155, mobile SoCs in the Kona family of chips (e.g. bcm28155,
bcm11351, etc...) bcm11351, etc...)
config DEBUG_BCM63XX_UART config DEBUG_BCM63XX
bool "Kernel low-level debugging on BCM63XX UART" bool "Kernel low-level debugging on BCM63XX UART"
depends on ARCH_BCM_63XX depends on ARCH_BCM_63XX
select DEBUG_UART_BCM63XX
config DEBUG_BERLIN_UART config DEBUG_BERLIN_UART
bool "Marvell Berlin SoC Debug UART" bool "Marvell Berlin SoC Debug UART"
@@ -1355,7 +1356,7 @@ config DEBUG_LL_INCLUDE
default "debug/vf.S" if DEBUG_VF_UART default "debug/vf.S" if DEBUG_VF_UART
default "debug/vt8500.S" if DEBUG_VT8500_UART0 default "debug/vt8500.S" if DEBUG_VT8500_UART0
default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1 default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1
default "debug/bcm63xx.S" if DEBUG_BCM63XX_UART default "debug/bcm63xx.S" if DEBUG_UART_BCM63XX
default "debug/digicolor.S" if DEBUG_DIGICOLOR_UA0 default "debug/digicolor.S" if DEBUG_DIGICOLOR_UA0
default "mach/debug-macro.S" default "mach/debug-macro.S"
@@ -1371,6 +1372,10 @@ config DEBUG_UART_8250
ARCH_IOP33X || ARCH_IXP4XX || \ ARCH_IOP33X || ARCH_IXP4XX || \
ARCH_LPC32XX || ARCH_MV78XX0 || ARCH_ORION5X || ARCH_RPC ARCH_LPC32XX || ARCH_MV78XX0 || ARCH_ORION5X || ARCH_RPC
# Compatibility options for BCM63xx
config DEBUG_UART_BCM63XX
def_bool ARCH_BCM_63XX
config DEBUG_UART_PHYS config DEBUG_UART_PHYS
hex "Physical base address of debug UART" hex "Physical base address of debug UART"
default 0x00100a00 if DEBUG_NETX_UART default 0x00100a00 if DEBUG_NETX_UART
@@ -1465,7 +1470,7 @@ config DEBUG_UART_PHYS
default 0xfffb0000 if DEBUG_OMAP1UART1 || DEBUG_OMAP7XXUART1 default 0xfffb0000 if DEBUG_OMAP1UART1 || DEBUG_OMAP7XXUART1
default 0xfffb0800 if DEBUG_OMAP1UART2 || DEBUG_OMAP7XXUART2 default 0xfffb0800 if DEBUG_OMAP1UART2 || DEBUG_OMAP7XXUART2
default 0xfffb9800 if DEBUG_OMAP1UART3 || DEBUG_OMAP7XXUART3 default 0xfffb9800 if DEBUG_OMAP1UART3 || DEBUG_OMAP7XXUART3
default 0xfffe8600 if DEBUG_BCM63XX_UART default 0xfffe8600 if DEBUG_UART_BCM63XX
default 0xfffff700 if ARCH_IOP33X default 0xfffff700 if ARCH_IOP33X
depends on ARCH_EP93XX || \ depends on ARCH_EP93XX || \
DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
@@ -1477,7 +1482,7 @@ config DEBUG_UART_PHYS
DEBUG_RCAR_GEN2_SCIF0 || DEBUG_RCAR_GEN2_SCIF2 || \ DEBUG_RCAR_GEN2_SCIF0 || DEBUG_RCAR_GEN2_SCIF2 || \
DEBUG_RMOBILE_SCIFA0 || DEBUG_RMOBILE_SCIFA1 || \ DEBUG_RMOBILE_SCIFA0 || DEBUG_RMOBILE_SCIFA1 || \
DEBUG_RMOBILE_SCIFA4 || DEBUG_S3C24XX_UART || \ DEBUG_RMOBILE_SCIFA4 || DEBUG_S3C24XX_UART || \
DEBUG_BCM63XX_UART || DEBUG_ASM9260_UART || \ DEBUG_UART_BCM63XX || DEBUG_ASM9260_UART || \
DEBUG_SIRFSOC_UART || DEBUG_DIGICOLOR_UA0 || \ DEBUG_SIRFSOC_UART || DEBUG_DIGICOLOR_UA0 || \
DEBUG_AT91_UART DEBUG_AT91_UART
@@ -1518,7 +1523,7 @@ config DEBUG_UART_VIRT
default 0xfb10c000 if DEBUG_REALVIEW_PB1176_PORT default 0xfb10c000 if DEBUG_REALVIEW_PB1176_PORT
default 0xfc40ab00 if DEBUG_BRCMSTB_UART default 0xfc40ab00 if DEBUG_BRCMSTB_UART
default 0xfc705000 if DEBUG_ZTE_ZX default 0xfc705000 if DEBUG_ZTE_ZX
default 0xfcfe8600 if DEBUG_BCM63XX_UART default 0xfcfe8600 if DEBUG_UART_BCM63XX
default 0xfd000000 if ARCH_SPEAR3XX || ARCH_SPEAR6XX default 0xfd000000 if ARCH_SPEAR3XX || ARCH_SPEAR6XX
default 0xfd000000 if ARCH_SPEAR13XX default 0xfd000000 if ARCH_SPEAR13XX
default 0xfd012000 if ARCH_MV78XX0 default 0xfd012000 if ARCH_MV78XX0
@@ -1569,7 +1574,7 @@ config DEBUG_UART_VIRT
DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \ DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \
DEBUG_NETX_UART || \ DEBUG_NETX_UART || \
DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART || \ DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART || \
DEBUG_BCM63XX_UART || DEBUG_ASM9260_UART || \ DEBUG_UART_BCM63XX || DEBUG_ASM9260_UART || \
DEBUG_SIRFSOC_UART || DEBUG_DIGICOLOR_UA0 DEBUG_SIRFSOC_UART || DEBUG_DIGICOLOR_UA0
config DEBUG_UART_8250_SHIFT config DEBUG_UART_8250_SHIFT

View File

@@ -3,4 +3,4 @@ zImage
xipImage xipImage
bootpImage bootpImage
uImage uImage
*.dtb* *.dtb

View File

@@ -5,8 +5,6 @@ dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-b-plus.dtb
dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-cm.dtb dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-cm.dtb
dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-cm.dtb dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-cm.dtb
dtb-$(CONFIG_ARCH_BCM2709) += bcm2709-rpi-2-b.dtb dtb-$(CONFIG_ARCH_BCM2709) += bcm2709-rpi-2-b.dtb
dtb-$(CONFIG_ARCH_BCM2709) += bcm2710-rpi-3-b.dtb
dtb-$(CONFIG_ARCH_BCM2709) += bcm2710-rpi-cm3.dtb
# Raspberry Pi # Raspberry Pi
ifeq ($(CONFIG_ARCH_BCM2708),y) ifeq ($(CONFIG_ARCH_BCM2708),y)
@@ -814,5 +812,5 @@ clean-files := *.dtb
# Enable fixups to support overlays on BCM2708 platforms # Enable fixups to support overlays on BCM2708 platforms
ifeq ($(RPI_DT_OVERLAYS),y) ifeq ($(RPI_DT_OVERLAYS),y)
DTC_FLAGS ?= -@ -H epapr DTC_FLAGS ?= -@
endif endif

View File

@@ -792,8 +792,3 @@
tx-num-evt = <32>; tx-num-evt = <32>;
rx-num-evt = <32>; rx-num-evt = <32>;
}; };
&synctimer_32kclk {
assigned-clocks = <&mux_synctimer32k_ck>;
assigned-clock-parents = <&clkdiv32k_ick>;
};

View File

@@ -529,7 +529,7 @@
}; };
sata@a0000 { sata@a0000 {
compatible = "marvell,armada-370-sata"; compatible = "marvell,orion-sata";
reg = <0xa0000 0x5000>; reg = <0xa0000 0x5000>;
interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&gateclk 14>, <&gateclk 20>; clocks = <&gateclk 14>, <&gateclk 20>;

View File

@@ -58,8 +58,8 @@
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000
MBUS_ID(0x09, 0x19) 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0xf1100000 0x10000
MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0xf1110000 0x10000>;
internal-regs { internal-regs {
@@ -117,7 +117,7 @@
}; };
/* USB part of the eSATA/USB 2.0 port */ /* USB part of the eSATA/USB 2.0 port */
usb@58000 { usb@50000 {
status = "okay"; status = "okay";
}; };
@@ -245,7 +245,7 @@
button@2 { button@2 {
label = "Factory Reset Button"; label = "Factory Reset Button";
linux,code = <KEY_RESTART>; linux,code = <KEY_RESTART>;
gpios = <&gpio0 29 GPIO_ACTIVE_LOW>; gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
}; };
}; };
@@ -260,7 +260,7 @@
}; };
sata { sata {
gpios = <&gpio1 22 GPIO_ACTIVE_LOW>; gpios = <&gpio1 22 GPIO_ACTIVE_HIGH>;
default-state = "off"; default-state = "off";
}; };
}; };
@@ -313,7 +313,7 @@
&pinctrl { &pinctrl {
keys_pin: keys-pin { keys_pin: keys-pin {
marvell,pins = "mpp24", "mpp29"; marvell,pins = "mpp24", "mpp47";
marvell,function = "gpio"; marvell,function = "gpio";
}; };

View File

@@ -303,6 +303,16 @@
gpio = <&expander0 4 GPIO_ACTIVE_HIGH>; gpio = <&expander0 4 GPIO_ACTIVE_HIGH>;
}; };
reg_usb2_1_vbus: v5-vbus1 {
compatible = "regulator-fixed";
regulator-name = "v5.0-vbus1";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
regulator-always-on;
gpio = <&expander0 4 GPIO_ACTIVE_HIGH>;
};
reg_sata0: pwr-sata0 { reg_sata0: pwr-sata0 {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "pwr_en_sata0"; regulator-name = "pwr_en_sata0";

View File

@@ -70,8 +70,8 @@
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
pcie-controller { pcie-controller {
status = "okay"; status = "okay";

View File

@@ -76,8 +76,8 @@
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x1000000 MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x1000000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
devbus-bootcs { devbus-bootcs {
status = "okay"; status = "okay";

View File

@@ -95,8 +95,8 @@
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x1000000 MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x1000000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
devbus-bootcs { devbus-bootcs {
status = "okay"; status = "okay";

View File

@@ -65,8 +65,8 @@
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
pcie-controller { pcie-controller {
status = "okay"; status = "okay";

View File

@@ -70,8 +70,8 @@
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
pcie-controller { pcie-controller {
status = "okay"; status = "okay";
@@ -304,13 +304,13 @@
button@1 { button@1 {
label = "WPS"; label = "WPS";
linux,code = <KEY_WPS_BUTTON>; linux,code = <KEY_WPS_BUTTON>;
gpios = <&gpio1 0 GPIO_ACTIVE_LOW>; gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
}; };
button@2 { button@2 {
label = "Factory Reset Button"; label = "Factory Reset Button";
linux,code = <KEY_RESTART>; linux,code = <KEY_RESTART>;
gpios = <&gpio1 1 GPIO_ACTIVE_LOW>; gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
}; };
}; };

View File

@@ -68,8 +68,8 @@
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
internal-regs { internal-regs {
serial@12000 { serial@12000 {

View File

@@ -64,8 +64,8 @@
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
pcie-controller { pcie-controller {
status = "okay"; status = "okay";

View File

@@ -65,9 +65,9 @@
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x01, 0x2f) 0 0 0xe8000000 0x8000000 MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x8000000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
devbus-bootcs { devbus-bootcs {
status = "okay"; status = "okay";

View File

@@ -78,8 +78,8 @@
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000 ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000
MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
MBUS_ID(0x09, 0x09) 0 0 0xf1100000 0x10000 MBUS_ID(0x09, 0x09) 0 0 0xf8100000 0x10000
MBUS_ID(0x09, 0x05) 0 0 0xf1110000 0x10000>; MBUS_ID(0x09, 0x05) 0 0 0xf8110000 0x10000>;
pcie-controller { pcie-controller {
status = "okay"; status = "okay";

View File

@@ -303,7 +303,6 @@
regulator-name = "mmc0-card-supply"; regulator-name = "mmc0-card-supply";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on;
}; };
gpio_keys { gpio_keys {

View File

@@ -86,12 +86,10 @@
macb0: ethernet@f8020000 { macb0: ethernet@f8020000 {
phy-mode = "rmii"; phy-mode = "rmii";
status = "okay"; status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_macb0_rmii &pinctrl_macb0_phy_irq>;
phy0: ethernet-phy@1 { phy0: ethernet-phy@1 {
interrupt-parent = <&pioE>; interrupt-parent = <&pioE>;
interrupts = <1 IRQ_TYPE_LEVEL_LOW>; interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
reg = <1>; reg = <1>;
}; };
}; };
@@ -154,10 +152,6 @@
atmel,pins = atmel,pins =
<AT91_PIOE 8 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; <AT91_PIOE 8 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
}; };
pinctrl_macb0_phy_irq: macb0_phy_irq_0 {
atmel,pins =
<AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
};
}; };
}; };
}; };
@@ -268,6 +262,5 @@
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
vin-supply = <&vcc_3v3_reg>; vin-supply = <&vcc_3v3_reg>;
regulator-always-on;
}; };
}; };

View File

@@ -160,15 +160,8 @@
}; };
macb0: ethernet@f8020000 { macb0: ethernet@f8020000 {
pinctrl-0 = <&pinctrl_macb0_rmii &pinctrl_macb0_phy_irq>;
phy-mode = "rmii"; phy-mode = "rmii";
status = "okay"; status = "okay";
ethernet-phy@1 {
reg = <0x1>;
interrupt-parent = <&pioE>;
interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
};
}; };
mmc1: mmc@fc000000 { mmc1: mmc@fc000000 {
@@ -200,10 +193,6 @@
pinctrl@fc06a000 { pinctrl@fc06a000 {
board { board {
pinctrl_macb0_phy_irq: macb0_phy_irq {
atmel,pins =
<AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
};
pinctrl_mmc0_cd: mmc0_cd { pinctrl_mmc0_cd: mmc0_cd {
atmel,pins = atmel,pins =
<AT91_PIOE 5 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; <AT91_PIOE 5 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;

View File

@@ -106,7 +106,7 @@
pmc: pmc@fffffc00 { pmc: pmc@fffffc00 {
compatible = "atmel,at91sam9x5-pmc", "syscon"; compatible = "atmel,at91sam9x5-pmc", "syscon";
reg = <0xfffffc00 0x200>; reg = <0xfffffc00 0x100>;
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>; interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
interrupt-controller; interrupt-controller;
#address-cells = <1>; #address-cells = <1>;

View File

@@ -37,11 +37,6 @@
brcm,pins = <18 19 20 21>; brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */ brcm,function = <4>; /* alt0 */
}; };
audio_pins: audio_pins {
brcm,pins = <40 45>;
brcm,function = <4>;
};
}; };
&sdhost { &sdhost {
@@ -64,7 +59,7 @@
pinctrl-0 = <&spi0_pins &spi0_cs_pins>; pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>; cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{ spidev@0{
compatible = "spidev"; compatible = "spidev";
reg = <0>; /* CE0 */ reg = <0>; /* CE0 */
#address-cells = <1>; #address-cells = <1>;
@@ -72,7 +67,7 @@
spi-max-frequency = <500000>; spi-max-frequency = <500000>;
}; };
spidev1: spidev@1{ spidev@1{
compatible = "spidev"; compatible = "spidev";
reg = <1>; /* CE1 */ reg = <1>; /* CE1 */
#address-cells = <1>; #address-cells = <1>;
@@ -121,20 +116,10 @@
}; };
}; };
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ { / {
__overrides__ { __overrides__ {
uart0 = <&uart0>,"status"; uart0 = <&uart0>,"status";
uart0_clkrate = <&clk_uart0>,"clock-frequency:0"; uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
uart1 = <&uart1>,"status";
i2s = <&i2s>,"status"; i2s = <&i2s>,"status";
spi = <&spi0>,"status"; spi = <&spi0>,"status";
i2c0 = <&i2c0>,"status"; i2c0 = <&i2c0>,"status";
@@ -156,9 +141,5 @@
audio = <&audio>,"status"; audio = <&audio>,"status";
watchdog = <&watchdog>,"status"; watchdog = <&watchdog>,"status";
random = <&random>,"status"; random = <&random>,"status";
sd_overclock = <&sdhost>,"brcm,overclock-50:0";
sd_force_pio = <&sdhost>,"brcm,force-pio?";
sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
sd_debug = <&sdhost>,"brcm,debug";
}; };
}; };

View File

@@ -37,11 +37,6 @@
brcm,pins = <28 29 30 31>; brcm,pins = <28 29 30 31>;
brcm,function = <6>; /* alt2 */ brcm,function = <6>; /* alt2 */
}; };
audio_pins: audio_pins {
brcm,pins = <40 45>;
brcm,function = <4>;
};
}; };
&sdhost { &sdhost {
@@ -64,7 +59,7 @@
pinctrl-0 = <&spi0_pins &spi0_cs_pins>; pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>; cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{ spidev@0{
compatible = "spidev"; compatible = "spidev";
reg = <0>; /* CE0 */ reg = <0>; /* CE0 */
#address-cells = <1>; #address-cells = <1>;
@@ -72,7 +67,7 @@
spi-max-frequency = <500000>; spi-max-frequency = <500000>;
}; };
spidev1: spidev@1{ spidev@1{
compatible = "spidev"; compatible = "spidev";
reg = <1>; /* CE1 */ reg = <1>; /* CE1 */
#address-cells = <1>; #address-cells = <1>;
@@ -115,20 +110,10 @@
}; };
}; };
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ { / {
__overrides__ { __overrides__ {
uart0 = <&uart0>,"status"; uart0 = <&uart0>,"status";
uart0_clkrate = <&clk_uart0>,"clock-frequency:0"; uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
uart1 = <&uart1>,"status";
i2s = <&i2s>,"status"; i2s = <&i2s>,"status";
spi = <&spi0>,"status"; spi = <&spi0>,"status";
i2c0 = <&i2c0>,"status"; i2c0 = <&i2c0>,"status";
@@ -146,9 +131,5 @@
audio = <&audio>,"status"; audio = <&audio>,"status";
watchdog = <&watchdog>,"status"; watchdog = <&watchdog>,"status";
random = <&random>,"status"; random = <&random>,"status";
sd_overclock = <&sdhost>,"brcm,overclock-50:0";
sd_force_pio = <&sdhost>,"brcm,force-pio?";
sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
sd_debug = <&sdhost>,"brcm,debug";
}; };
}; };

View File

@@ -35,11 +35,6 @@
brcm,pins = <18 19 20 21>; brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */ brcm,function = <4>; /* alt0 */
}; };
audio_pins: audio_pins {
brcm,pins;
brcm,function;
};
}; };
&spi0 { &spi0 {
@@ -47,7 +42,7 @@
pinctrl-0 = <&spi0_pins &spi0_cs_pins>; pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>; cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{ spidev@0{
compatible = "spidev"; compatible = "spidev";
reg = <0>; /* CE0 */ reg = <0>; /* CE0 */
#address-cells = <1>; #address-cells = <1>;
@@ -55,7 +50,7 @@
spi-max-frequency = <500000>; spi-max-frequency = <500000>;
}; };
spidev1: spidev@1{ spidev@1{
compatible = "spidev"; compatible = "spidev";
reg = <1>; /* CE1 */ reg = <1>; /* CE1 */
#address-cells = <1>; #address-cells = <1>;
@@ -94,7 +89,6 @@
__overrides__ { __overrides__ {
uart0 = <&uart0>,"status"; uart0 = <&uart0>,"status";
uart0_clkrate = <&clk_uart0>,"clock-frequency:0"; uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
uart1 = <&uart1>,"status";
i2s = <&i2s>,"status"; i2s = <&i2s>,"status";
spi = <&spi0>,"status"; spi = <&spi0>,"status";
i2c0 = <&i2c0>,"status"; i2c0 = <&i2c0>,"status";
@@ -103,5 +97,6 @@
i2c0_baudrate = <&i2c0>,"clock-frequency:0"; i2c0_baudrate = <&i2c0>,"clock-frequency:0";
i2c1_baudrate = <&i2c1>,"clock-frequency:0"; i2c1_baudrate = <&i2c1>,"clock-frequency:0";
i2c2_baudrate = <&i2c2>,"clock-frequency:0"; i2c2_baudrate = <&i2c2>,"clock-frequency:0";
core_freq = <&clk_core>,"clock-frequency:0";
}; };
}; };

View File

@@ -7,13 +7,6 @@
}; };
}; };
&gpio {
mmc_pins: mmc_pins {
brcm,pins = <48 49 50 51 52 53>;
brcm,function = <7>; /* alt3 */
};
};
&leds { &leds {
act_led: act { act_led: act {
label = "led0"; label = "led0";
@@ -22,14 +15,12 @@
}; };
}; };
&sdhost { &sdhost {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&sdhost_pins>; pinctrl-0 = <&sdhost_pins>;
non-removable;
bus-width = <4>; bus-width = <4>;
non-removable;
status = "okay"; status = "okay";
brcm,overclock-50 = <0>;
}; };
&fb { &fb {
@@ -38,8 +29,6 @@
/ { / {
__overrides__ { __overrides__ {
core_freq = <&clk_core>,"clock-frequency:0";
act_led_gpio = <&act_led>,"gpios:4"; act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8"; act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger"; act_led_trigger = <&act_led>,"linux,default-trigger";
@@ -47,6 +36,5 @@
audio = <&audio>,"status"; audio = <&audio>,"status";
watchdog = <&watchdog>,"status"; watchdog = <&watchdog>,"status";
random = <&random>,"status"; random = <&random>,"status";
sd_overclock = <&mmc>,"brcm,overclock-50:0";
}; };
}; };

View File

@@ -1,8 +1,3 @@
#include "dt-bindings/clock/bcm2835.h"
#include <dt-bindings/clock/bcm2835-aux.h>
#include "dt-bindings/power/raspberrypi-power.h"
#include "dt-bindings/gpio/gpio.h"
#include "dt-bindings/pinctrl/bcm2835.h"
#include "skeleton.dtsi" #include "skeleton.dtsi"
/ { / {
@@ -10,7 +5,6 @@
aliases { aliases {
audio = &audio; audio = &audio;
aux = &aux;
sound = &sound; sound = &sound;
soc = &soc; soc = &soc;
dma = &dma; dma = &dma;
@@ -25,8 +19,6 @@
spi0 = &spi0; spi0 = &spi0;
i2c0 = &i2c0; i2c0 = &i2c0;
uart1 = &uart1; uart1 = &uart1;
spi1 = &spi1;
spi2 = &spi2;
mmc = &mmc; mmc = &mmc;
i2c1 = &i2c1; i2c1 = &i2c1;
i2c2 = &i2c2; i2c2 = &i2c2;
@@ -38,6 +30,17 @@
clocks = &clocks; clocks = &clocks;
}; };
/* Onboard audio */
audio: audio {
compatible = "brcm,bcm2835-audio";
brcm,pwm-channels = <8>;
status = "disabled";
};
/* External sound card */
sound: sound {
};
soc: soc { soc: soc {
compatible = "simple-bus"; compatible = "simple-bus";
#address-cells = <1>; #address-cells = <1>;
@@ -57,32 +60,10 @@
<1 24>, <1 24>,
<1 25>, <1 25>,
<1 26>, <1 26>,
/* dma channel 11-14 share one irq */ <1 27>;
<1 27>,
<1 27>,
<1 27>,
<1 27>,
/* unused shared irq for all channels */
<1 28>;
interrupt-names = "dma0",
"dma1",
"dma2",
"dma3",
"dma4",
"dma5",
"dma6",
"dma7",
"dma8",
"dma9",
"dma10",
"dma11",
"dma12",
"dma13",
"dma14",
"dma-shared-all";
#dma-cells = <1>; #dma-cells = <1>;
brcm,dma-channel-mask = <0x7f34>; brcm,dma-channel-mask = <0x0f35>;
}; };
intc: interrupt-controller@7e00b200 { intc: interrupt-controller@7e00b200 {
@@ -111,10 +92,9 @@
reg = <0x7e101000 0x2000>; reg = <0x7e101000 0x2000>;
/* CPRMAN derives everything from the platform's /* CPRMAN derives everything from the platform's
* oscillator except for a few clocks that may * oscillator.
* derive from something else derived from CPRMAN..
*/ */
clocks = <&clk_osc>, <&dsi1 0>, <&dsi1 1>, <&dsi1 2>; clocks = <&clk_osc>;
status = "disabled"; status = "disabled";
}; };
@@ -152,16 +132,15 @@
reg = <0x7e202000 0x100>; reg = <0x7e202000 0x100>;
interrupts = <2 24>; interrupts = <2 24>;
clocks = <&clk_core>; clocks = <&clk_core>;
dmas = <&dma 13>; dmas = <&dma 13>,
dma-names = "rx-tx"; <&dma 13>;
brcm,overclock-50 = <0>; dma-names = "tx", "rx";
brcm,pio-limit = <1>; brcm,pio-limit = <1>;
status = "disabled"; status = "disabled";
}; };
i2s: i2s@7e203000 { i2s: i2s@7e203000 {
compatible = "brcm,bcm2835-i2s"; compatible = "brcm,bcm2835-i2s";
#sound-dai-cells = <0>;
reg = <0x7e203000 0x24>, reg = <0x7e203000 0x24>,
<0x7e101098 0x08>; <0x7e101098 0x08>;
@@ -185,7 +164,7 @@
* add more gpios if necessary as <&gpio 6 1> * add more gpios if necessary as <&gpio 6 1>
* (but do not forget to make them output!) * (but do not forget to make them output!)
*/ */
cs-gpios = <&gpio 8 1>, <&gpio 7 1>; cs-gpios = <0>, <0>;
}; };
i2c0: i2c@7e205000 { i2c0: i2c@7e205000 {
@@ -198,29 +177,6 @@
status = "disabled"; status = "disabled";
}; };
pixelvalve0: pixelvalve@7e206000 {
compatible = "brcm,bcm2835-pixelvalve0";
reg = <0x7e206000 0x100>;
status = "disabled";
};
dpi: dpi@7e208000 {
compatible = "brcm,bcm2835-dpi";
reg = <0x7e208000 0x8c>;
clocks = <&cprman BCM2835_CLOCK_VPU>,
<&cprman BCM2835_CLOCK_DPI>;
clock-names = "core", "pixel";
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
pixelvalve1: pixelvalve@7e207000 {
compatible = "brcm,bcm2835-pixelvalve1";
reg = <0x7e207000 0x100>;
status = "disabled";
};
pwm: pwm@7e20c000 { pwm: pwm@7e20c000 {
compatible = "brcm,bcm2835-pwm"; compatible = "brcm,bcm2835-pwm";
reg = <0x7e20c000 0x28>; reg = <0x7e20c000 0x28>;
@@ -229,14 +185,6 @@
status = "disabled"; status = "disabled";
}; };
aux: aux@0x7e215004 {
compatible = "brcm,bcm2835-aux";
#clock-cells = <1>;
reg = <0x7e215000 0x8>;
clocks = <&clk_core>;
status = "disabled";
};
uart1: uart@7e215040 { uart1: uart@7e215040 {
compatible = "brcm,bcm2835-aux-uart", "ns16550"; compatible = "brcm,bcm2835-aux-uart", "ns16550";
reg = <0x7e215040 0x40>; reg = <0x7e215040 0x40>;
@@ -247,81 +195,17 @@
status = "disabled"; status = "disabled";
}; };
spi1: spi@7e215080 {
compatible = "brcm,bcm2835-aux-spi";
reg = <0x7e215080 0x40>, <0x7e215000 0x8>;
interrupts = <1 29>;
clocks = <&aux BCM2835_AUX_CLOCK_SPI1>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi2: spi@7e2150C0 {
compatible = "brcm,bcm2835-aux-spi";
reg = <0x7e2150C0 0x40>, <0x7e215000 0x8>;
interrupts = <1 29>;
clocks = <&aux BCM2835_AUX_CLOCK_SPI2>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
mmc: mmc@7e300000 { mmc: mmc@7e300000 {
compatible = "brcm,bcm2835-mmc"; compatible = "brcm,bcm2835-mmc";
reg = <0x7e300000 0x100>; reg = <0x7e300000 0x100>;
interrupts = <2 30>; interrupts = <2 30>;
clocks = <&clk_mmc>; clocks = <&clk_mmc>;
dmas = <&dma 11>; dmas = <&dma 11>,
dma-names = "rx-tx"; <&dma 11>;
brcm,overclock-50 = <0>; dma-names = "tx", "rx";
status = "disabled"; status = "disabled";
}; };
hvs: hvs@7e400000 {
compatible = "brcm,bcm2835-hvs";
reg = <0x7e400000 0x6000>;
status = "disabled";
};
firmwarekms: firmwarekms@7e600000 {
compatible = "raspberrypi,rpi-firmware-kms";
/* SMI interrupt reg */
reg = <0x7e600000 0x100>;
interrupts = <2 16>;
brcm,firmware = <&firmware>;
status = "disabled";
};
smi: smi@7e600000 {
compatible = "brcm,bcm2835-smi";
reg = <0x7e600000 0x44>, <0x7e1010b0 0x8>;
interrupts = <2 16>;
brcm,smi-clock-source = <6>;
brcm,smi-clock-divisor = <4>;
dmas = <&dma 4>;
dma-names = "rx-tx";
status = "disabled";
};
dsi1: dsi@7e700000 {
#address-cells = <1>;
#size-cells = <0>;
#clock-cells = <1>;
compatible = "brcm,bcm2835-dsi1";
reg = <0x7e700000 0x8c>;
interrupts = <2 12>;
clocks = <&cprman BCM2835_PLLD_DSI1>,
<&cprman BCM2835_CLOCK_DSI1E>,
<&cprman BCM2835_CLOCK_DSI1P>;
clock-names = "phy", "escape", "pixel";
clock-output-names = "dsi1_byte", "dsi1_ddr2", "dsi1_ddr";
status = "disabled";
power-domains = <&power RPI_POWER_DOMAIN_DSI1>;
};
i2c1: i2c@7e804000 { i2c1: i2c@7e804000 {
compatible = "brcm,bcm2708-i2c"; compatible = "brcm,bcm2708-i2c";
reg = <0x7e804000 0x1000>; reg = <0x7e804000 0x1000>;
@@ -345,21 +229,14 @@
status = "disabled"; status = "disabled";
}; };
pixelvalve2: pixelvalve@7e807000 { smi: smi@7e600000 {
compatible = "brcm,bcm2835-pixelvalve2"; compatible = "brcm,bcm2835-smi";
reg = <0x7e807000 0x100>; reg = <0x7e600000 0x44>, <0x7e1010b0 0x8>;
status = "disabled"; interrupts = <2 16>;
}; brcm,smi-clock-source = <6>;
brcm,smi-clock-divisor = <4>;
hdmi: hdmi@7e902000 { dmas = <&dma 4>;
compatible = "brcm,bcm2835-hdmi"; dma-names = "rx-tx";
reg = <0x7e902000 0x600>,
<0x7e808000 0x100>;
ddc = <&i2c2>;
clocks = <&cprman BCM2835_PLLH_PIX>,
<&cprman BCM2835_CLOCK_HSM>;
clock-names = "pixel", "hdmi";
power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
status = "disabled"; status = "disabled";
}; };
@@ -371,24 +248,11 @@
<1 9>; <1 9>;
}; };
v3d: v3d@7ec00000 {
compatible = "brcm,vc4-v3d";
reg = <0x7ec00000 0x1000>;
power-domains = <&power RPI_POWER_DOMAIN_V3D>;
status = "disabled";
};
firmware: firmware { firmware: firmware {
compatible = "raspberrypi,bcm2835-firmware"; compatible = "raspberrypi,bcm2835-firmware";
mboxes = <&mailbox>; mboxes = <&mailbox>;
}; };
power: power {
compatible = "raspberrypi,bcm2835-power";
firmware = <&firmware>;
#power-domain-cells = <1>;
};
leds: leds { leds: leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
}; };
@@ -411,23 +275,6 @@
compatible = "brcm,bcm2835-thermal"; compatible = "brcm,bcm2835-thermal";
firmware = <&firmware>; firmware = <&firmware>;
}; };
gpu: gpu {
compatible = "brcm,bcm2835-vc4";
status = "disabled";
};
/* Onboard audio */
audio: audio {
compatible = "brcm,bcm2835-audio";
brcm,pwm-channels = <8>;
status = "disabled";
};
/* External sound card */
sound: sound {
status = "disabled";
};
}; };
clocks: clocks { clocks: clocks {

View File

@@ -37,11 +37,6 @@
brcm,pins = <18 19 20 21>; brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */ brcm,function = <4>; /* alt0 */
}; };
audio_pins: audio_pins {
brcm,pins = <40 45>;
brcm,function = <4>;
};
}; };
&sdhost { &sdhost {
@@ -64,7 +59,7 @@
pinctrl-0 = <&spi0_pins &spi0_cs_pins>; pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>; cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{ spidev@0{
compatible = "spidev"; compatible = "spidev";
reg = <0>; /* CE0 */ reg = <0>; /* CE0 */
#address-cells = <1>; #address-cells = <1>;
@@ -72,7 +67,7 @@
spi-max-frequency = <500000>; spi-max-frequency = <500000>;
}; };
spidev1: spidev@1{ spidev@1{
compatible = "spidev"; compatible = "spidev";
reg = <1>; /* CE1 */ reg = <1>; /* CE1 */
#address-cells = <1>; #address-cells = <1>;
@@ -121,20 +116,10 @@
}; };
}; };
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ { / {
__overrides__ { __overrides__ {
uart0 = <&uart0>,"status"; uart0 = <&uart0>,"status";
uart0_clkrate = <&clk_uart0>,"clock-frequency:0"; uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
uart1 = <&uart1>,"status";
i2s = <&i2s>,"status"; i2s = <&i2s>,"status";
spi = <&spi0>,"status"; spi = <&spi0>,"status";
i2c0 = <&i2c0>,"status"; i2c0 = <&i2c0>,"status";
@@ -156,9 +141,5 @@
audio = <&audio>,"status"; audio = <&audio>,"status";
watchdog = <&watchdog>,"status"; watchdog = <&watchdog>,"status";
random = <&random>,"status"; random = <&random>,"status";
sd_overclock = <&sdhost>,"brcm,overclock-50:0";
sd_force_pio = <&sdhost>,"brcm,force-pio?";
sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
sd_debug = <&sdhost>,"brcm,debug";
}; };
}; };

View File

@@ -1,207 +0,0 @@
/dts-v1/;
#include "bcm2710.dtsi"
/ {
compatible = "brcm,bcm2710","brcm,bcm2709";
model = "Raspberry Pi 3 Model B";
};
&gpio {
sdhost_pins: sdhost_pins {
brcm,pins = <48 49 50 51 52 53>;
brcm,function = <4>; /* alt0 */
};
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
sdio_pins: sdio_pins {
brcm,pins = <34 35 36 37 38 39>;
brcm,function = <7>; // alt3 = SD1
brcm,pull = <0 2 2 2 2 2>;
};
bt_pins: bt_pins {
brcm,pins = <43>;
brcm,function = <4>; /* alt0:GPCLK2 */
brcm,pull = <0>;
};
uart0_pins: uart0_pins {
brcm,pins = <32 33>;
brcm,function = <7>; /* alt3=UART0 */
brcm,pull = <0 2>;
};
uart1_pins: uart1_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
audio_pins: audio_pins {
brcm,pins = <40 41>;
brcm,function = <4>;
};
};
&sdhost {
pinctrl-names = "default";
pinctrl-0 = <&sdhost_pins>;
bus-width = <4>;
status = "okay";
};
&mmc {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
non-removable;
bus-width = <4>;
status = "okay";
brcm,overclock-50 = <0>;
};
&soc {
virtgpio: virtgpio {
compatible = "brcm,bcm2835-virtgpio";
gpio-controller;
#gpio-cells = <2>;
firmware = <&firmware>;
status = "okay";
};
};
&fb {
status = "okay";
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins &bt_pins>;
status = "okay";
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <500000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <500000>;
};
};
&i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
#sound-dai-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&random {
status = "okay";
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&virtgpio 0 0>;
};
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
chosen {
bootargs = "8250.nr_uarts=1";
};
};
/ {
__overrides__ {
uart0 = <&uart0>,"status";
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
uart1 = <&uart1>,"status";
i2s = <&i2s>,"status";
spi = <&spi0>,"status";
i2c0 = <&i2c0>,"status";
i2c1 = <&i2c1>,"status";
i2c2_iknowwhatimdoing = <&i2c2>,"status";
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
core_freq = <&clk_core>,"clock-frequency:0";
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
audio = <&audio>,"status";
watchdog = <&watchdog>,"status";
random = <&random>,"status";
sd_overclock = <&sdhost>,"brcm,overclock-50:0";
sd_force_pio = <&sdhost>,"brcm,force-pio?";
sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
sd_debug = <&sdhost>,"brcm,debug";
};
};

View File

@@ -1,164 +0,0 @@
/dts-v1/;
#include "bcm2710.dtsi"
/ {
compatible = "brcm,bcm2710","brcm,bcm2709";
model = "Raspberry Pi Compute Module 3";
};
&gpio {
mmc_pins: mmc_pins {
brcm,pins = <48 49 50 51 52 53>;
brcm,function = <7>; /* alt3 */
brcm,pull = <0 2 2 2 2 2>;
};
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
audio_pins: audio_pins {
brcm,pins;
brcm,function;
};
};
&mmc {
pinctrl-names = "default";
pinctrl-0 = <&mmc_pins>;
non-removable;
bus-width = <4>;
status = "okay";
brcm,overclock-50 = <0>;
};
&soc {
virtgpio: virtgpio {
compatible = "brcm,bcm2835-virtgpio";
gpio-controller;
#gpio-cells = <2>;
firmware = <&firmware>;
status = "okay";
};
};
&fb {
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <500000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <500000>;
};
};
&i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
#sound-dai-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&random {
status = "okay";
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&virtgpio 0 0>;
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
uart0 = <&uart0>,"status";
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
uart1 = <&uart1>,"status";
i2s = <&i2s>,"status";
spi = <&spi0>,"status";
i2c0 = <&i2c0>,"status";
i2c1 = <&i2c1>,"status";
i2c2_iknowwhatimdoing = <&i2c2>,"status";
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
core_freq = <&clk_core>,"clock-frequency:0";
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
audio = <&audio>,"status";
watchdog = <&watchdog>,"status";
random = <&random>,"status";
sd_overclock = <&sdhost>,"brcm,overclock-50:0";
sd_force_pio = <&sdhost>,"brcm,force-pio?";
sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
sd_debug = <&sdhost>,"brcm,debug";
};
};

View File

@@ -1,102 +0,0 @@
#include "bcm2708_common.dtsi"
/ {
compatible = "brcm,bcm2710","brcm,bcm2709";
model = "BCM2710";
chosen {
/* No padding required - the boot loader can do that. */
bootargs = "";
};
soc {
ranges = <0x7e000000 0x3f000000 0x01000000>,
<0x40000000 0x40000000 0x00040000>;
local_intc: local_intc {
compatible = "brcm,bcm2836-l1-intc";
reg = <0x40000000 0x100>;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&local_intc>;
};
arm-pmu {
compatible = "arm,cortex-a7-pmu";
interrupt-parent = <&local_intc>;
interrupts = <9>;
};
gpiomem {
compatible = "brcm,bcm2835-gpiomem";
reg = <0x7e200000 0x1000>;
status = "okay";
};
timer {
compatible = "arm,armv7-timer";
clock-frequency = <19200000>;
interrupt-parent = <&local_intc>;
interrupts = <0>, // PHYS_SECURE_PPI
<1>, // PHYS_NONSECURE_PPI
<3>, // VIRT_PPI
<2>; // HYP_PPI
always-on;
};
syscon@40000000 {
compatible = "brcm,bcm2836-arm-local", "syscon";
reg = <0x40000000 0x100>;
};
};
cpus: cpus {
#address-cells = <1>;
#size-cells = <0>;
v7_cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x000>;
clock-frequency = <800000000>;
};
v7_cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x001>;
clock-frequency = <800000000>;
};
v7_cpu2: cpu@2 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x002>;
clock-frequency = <800000000>;
};
v7_cpu3: cpu@3 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x003>;
clock-frequency = <800000000>;
};
};
__overrides__ {
arm_freq = <&v7_cpu0>, "clock-frequency:0",
<&v7_cpu1>, "clock-frequency:0",
<&v7_cpu2>, "clock-frequency:0",
<&v7_cpu3>, "clock-frequency:0";
};
};
&watchdog {
status = "okay";
};
&intc {
compatible = "brcm,bcm2836-armctrl-ic";
interrupt-parent = <&local_intc>;
interrupts = <8>;
};

View File

@@ -1497,16 +1497,6 @@
0x48485200 0x2E00>; 0x48485200 0x2E00>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
/*
* Do not allow gating of cpsw clock as workaround
* for errata i877. Keeping internal clock disabled
* causes the device switching characteristics
* to degrade over time and eventually fail to meet
* the data manual delay time/skew specs.
*/
ti,no-idle;
/* /*
* rx_thresh_pend * rx_thresh_pend
* rx_pend * rx_pend

View File

@@ -298,8 +298,6 @@
compatible = "maxim,max8997-pmic"; compatible = "maxim,max8997-pmic";
reg = <0x66>; reg = <0x66>;
interrupt-parent = <&gpx0>;
interrupts = <7 0>;
max8997,pmic-buck1-uses-gpio-dvs; max8997,pmic-buck1-uses-gpio-dvs;
max8997,pmic-buck2-uses-gpio-dvs; max8997,pmic-buck2-uses-gpio-dvs;

View File

@@ -154,7 +154,7 @@
&fec { &fec {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet>; pinctrl-0 = <&pinctrl_enet>;
phy-mode = "rgmii-id"; phy-mode = "rgmii";
phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>; phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>;
status = "okay"; status = "okay";
}; };

View File

@@ -94,7 +94,7 @@
&fec { &fec {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet>; pinctrl-0 = <&pinctrl_enet>;
phy-mode = "rgmii-id"; phy-mode = "rgmii";
phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>; phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
status = "okay"; status = "okay";
}; };

View File

@@ -154,7 +154,7 @@
&fec { &fec {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet>; pinctrl-0 = <&pinctrl_enet>;
phy-mode = "rgmii-id"; phy-mode = "rgmii";
phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>; phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
status = "okay"; status = "okay";
}; };

View File

@@ -155,7 +155,7 @@
&fec { &fec {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet>; pinctrl-0 = <&pinctrl_enet>;
phy-mode = "rgmii-id"; phy-mode = "rgmii";
phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>; phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
status = "okay"; status = "okay";
}; };

View File

@@ -145,7 +145,7 @@
&fec { &fec {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet>; pinctrl-0 = <&pinctrl_enet>;
phy-mode = "rgmii-id"; phy-mode = "rgmii";
phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>; phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
status = "okay"; status = "okay";
}; };

View File

@@ -113,14 +113,14 @@
&clks { &clks {
assigned-clocks = <&clks IMX6QDL_PLL4_BYPASS_SRC>, assigned-clocks = <&clks IMX6QDL_PLL4_BYPASS_SRC>,
<&clks IMX6QDL_PLL4_BYPASS>, <&clks IMX6QDL_PLL4_BYPASS>,
<&clks IMX6QDL_CLK_PLL4_POST_DIV>,
<&clks IMX6QDL_CLK_LDB_DI0_SEL>, <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
<&clks IMX6QDL_CLK_LDB_DI1_SEL>, <&clks IMX6QDL_CLK_LDB_DI1_SEL>;
<&clks IMX6QDL_CLK_PLL4_POST_DIV>;
assigned-clock-parents = <&clks IMX6QDL_CLK_LVDS2_IN>, assigned-clock-parents = <&clks IMX6QDL_CLK_LVDS2_IN>,
<&clks IMX6QDL_PLL4_BYPASS_SRC>, <&clks IMX6QDL_PLL4_BYPASS_SRC>,
<&clks IMX6QDL_CLK_PLL3_USB_OTG>, <&clks IMX6QDL_CLK_PLL3_USB_OTG>,
<&clks IMX6QDL_CLK_PLL3_USB_OTG>; <&clks IMX6QDL_CLK_PLL3_USB_OTG>;
assigned-clock-rates = <0>, <0>, <0>, <0>, <24576000>; assigned-clock-rates = <0>, <0>, <24576000>;
}; };
&ecspi1 { &ecspi1 {

View File

@@ -122,7 +122,6 @@
interrupt-parent = <&gpio5>; interrupt-parent = <&gpio5>;
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>; /* gpio 152 */ interrupts = <24 IRQ_TYPE_LEVEL_HIGH>; /* gpio 152 */
ref-clock-frequency = <26000000>; ref-clock-frequency = <26000000>;
tcxo-clock-frequency = <26000000>;
}; };
}; };

View File

@@ -189,7 +189,3 @@
}; };
}; };
&uart3 {
interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH
&omap4_pmx_core OMAP4_UART3_RX>;
};

View File

@@ -130,16 +130,6 @@
}; };
}; };
&gpio8 {
/* TI trees use GPIO instead of msecure, see also muxing */
p234 {
gpio-hog;
gpios = <10 GPIO_ACTIVE_HIGH>;
output-high;
line-name = "gpio8_234/msecure";
};
};
&omap5_pmx_core { &omap5_pmx_core {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = < pinctrl-0 = <
@@ -223,13 +213,6 @@
>; >;
}; };
/* TI trees use GPIO mode; msecure mode does not work reliably? */
palmas_msecure_pins: palmas_msecure_pins {
pinctrl-single,pins = <
OMAP5_IOPAD(0x180, PIN_OUTPUT | MUX_MODE6) /* gpio8_234 */
>;
};
usbhost_pins: pinmux_usbhost_pins { usbhost_pins: pinmux_usbhost_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
0x84 (PIN_INPUT | MUX_MODE0) /* usbb2_hsic_strobe */ 0x84 (PIN_INPUT | MUX_MODE0) /* usbb2_hsic_strobe */
@@ -295,12 +278,6 @@
&usbhost_wkup_pins &usbhost_wkup_pins
>; >;
palmas_sys_nirq_pins: pinmux_palmas_sys_nirq_pins {
pinctrl-single,pins = <
OMAP5_IOPAD(0x068, PIN_INPUT_PULLUP | MUX_MODE0) /* sys_nirq1 */
>;
};
usbhost_wkup_pins: pinmux_usbhost_wkup_pins { usbhost_wkup_pins: pinmux_usbhost_wkup_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
0x1A (PIN_OUTPUT | MUX_MODE0) /* fref_clk1_out, USB hub clk */ 0x1A (PIN_OUTPUT | MUX_MODE0) /* fref_clk1_out, USB hub clk */
@@ -368,8 +345,6 @@
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>; #interrupt-cells = <2>;
ti,system-power-controller; ti,system-power-controller;
pinctrl-names = "default";
pinctrl-0 = <&palmas_sys_nirq_pins &palmas_msecure_pins>;
extcon_usb3: palmas_usb { extcon_usb3: palmas_usb {
compatible = "ti,palmas-usb-vid"; compatible = "ti,palmas-usb-vid";
@@ -383,14 +358,6 @@
#clock-cells = <0>; #clock-cells = <0>;
}; };
rtc {
compatible = "ti,palmas-rtc";
interrupt-parent = <&palmas>;
interrupts = <8 IRQ_TYPE_NONE>;
ti,backup-battery-chargeable;
ti,backup-battery-charge-high-current;
};
palmas_pmic { palmas_pmic {
compatible = "ti,palmas-pmic"; compatible = "ti,palmas-pmic";
interrupt-parent = <&palmas>; interrupt-parent = <&palmas>;

View File

@@ -12,101 +12,65 @@ ifeq ($(CONFIG_ARCH_BCM2835),y)
RPI_DT_OVERLAYS=y RPI_DT_OVERLAYS=y
endif endif
dtbo-$(RPI_DT_OVERLAYS) += adau1977-adc.dtbo dtb-$(RPI_DT_OVERLAYS) += ads7846-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += ads1015.dtbo dtb-$(RPI_DT_OVERLAYS) += at86rf233-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += ads7846.dtbo dtb-$(RPI_DT_OVERLAYS) += bmp085_i2c-sensor-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += akkordion-iqdacplus.dtbo dtb-$(RPI_DT_OVERLAYS) += dht11-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += at86rf233.dtbo dtb-$(RPI_DT_OVERLAYS) += enc28j60-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += audioinjector-wm8731-audio.dtbo dtb-$(RPI_DT_OVERLAYS) += gpio-ir-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += audremap.dtbo dtb-$(RPI_DT_OVERLAYS) += gpio-poweroff-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += bmp085_i2c-sensor.dtbo dtb-$(RPI_DT_OVERLAYS) += hifiberry-amp-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += dht11.dtbo dtb-$(RPI_DT_OVERLAYS) += hifiberry-dac-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += dionaudio-loco.dtbo dtb-$(RPI_DT_OVERLAYS) += hifiberry-dacplus-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += dpi18.dtbo dtb-$(RPI_DT_OVERLAYS) += hifiberry-digi-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += dpi24.dtbo dtb-$(RPI_DT_OVERLAYS) += hy28a-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += dwc-otg.dtbo dtb-$(RPI_DT_OVERLAYS) += hy28b-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += dwc2.dtbo dtb-$(RPI_DT_OVERLAYS) += i2c-rtc-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += enc28j60.dtbo dtb-$(RPI_DT_OVERLAYS) += i2c-gpio-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += gpio-ir.dtbo dtb-$(RPI_DT_OVERLAYS) += i2s-mmap-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += gpio-poweroff.dtbo dtb-$(RPI_DT_OVERLAYS) += iqaudio-dac-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += hifiberry-amp.dtbo dtb-$(RPI_DT_OVERLAYS) += iqaudio-dacplus-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += hifiberry-dac.dtbo dtb-$(RPI_DT_OVERLAYS) += lirc-rpi-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += hifiberry-dacplus.dtbo dtb-$(RPI_DT_OVERLAYS) += mcp2515-can0-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += hifiberry-digi.dtbo dtb-$(RPI_DT_OVERLAYS) += mcp2515-can1-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += hifiberry-digi-pro.dtbo dtb-$(RPI_DT_OVERLAYS) += mmc-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += hy28a.dtbo dtb-$(RPI_DT_OVERLAYS) += mz61581-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += hy28b.dtbo dtb-$(RPI_DT_OVERLAYS) += piscreen-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += i2c-gpio.dtbo dtb-$(RPI_DT_OVERLAYS) += piscreen2r-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += i2c-mux.dtbo dtb-$(RPI_DT_OVERLAYS) += pitft28-capacitive-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += i2c-pwm-pca9685a.dtbo dtb-$(RPI_DT_OVERLAYS) += pitft28-resistive-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += i2c-rtc.dtbo dtb-$(RPI_DT_OVERLAYS) += pps-gpio-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += i2c0-bcm2708.dtbo dtb-$(RPI_DT_OVERLAYS) += pwm-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += i2c1-bcm2708.dtbo dtb-$(RPI_DT_OVERLAYS) += pwm-2chan-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += i2s-gpio28-31.dtbo dtb-$(RPI_DT_OVERLAYS) += raspidac3-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += i2s-mmap.dtbo dtb-$(RPI_DT_OVERLAYS) += rpi-backlight-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += iqaudio-dac.dtbo dtb-$(RPI_DT_OVERLAYS) += rpi-dac-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += iqaudio-dacplus.dtbo dtb-$(RPI_DT_OVERLAYS) += rpi-display-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += iqaudio-digi-wm8804-audio.dtbo dtb-$(RPI_DT_OVERLAYS) += rpi-ft5406-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += justboom-dac.dtbo dtb-$(RPI_DT_OVERLAYS) += rpi-proto-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += justboom-digi.dtbo dtb-$(RPI_DT_OVERLAYS) += rpi-sense-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += lirc-rpi.dtbo dtb-$(RPI_DT_OVERLAYS) += sdhost-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += mcp23017.dtbo dtb-$(RPI_DT_OVERLAYS) += sdio-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += mcp23s17.dtbo dtb-$(RPI_DT_OVERLAYS) += smi-dev-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += mcp2515-can0.dtbo dtb-$(RPI_DT_OVERLAYS) += smi-nand-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += mcp2515-can1.dtbo dtb-$(RPI_DT_OVERLAYS) += smi-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += mmc.dtbo dtb-$(RPI_DT_OVERLAYS) += spi-gpio35-39-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += mz61581.dtbo dtb-$(RPI_DT_OVERLAYS) += tinylcd35-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += pi3-act-led.dtbo dtb-$(RPI_DT_OVERLAYS) += uart1-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += pi3-disable-bt.dtbo dtb-$(RPI_DT_OVERLAYS) += vc4-kms-v3d-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += pi3-miniuart-bt.dtbo dtb-$(RPI_DT_OVERLAYS) += vga666-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += piscreen.dtbo dtb-$(RPI_DT_OVERLAYS) += w1-gpio-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += piscreen2r.dtbo dtb-$(RPI_DT_OVERLAYS) += w1-gpio-pullup-overlay.dtb
dtbo-$(RPI_DT_OVERLAYS) += pitft22.dtbo
dtbo-$(RPI_DT_OVERLAYS) += pitft28-capacitive.dtbo
dtbo-$(RPI_DT_OVERLAYS) += pitft28-resistive.dtbo
dtbo-$(RPI_DT_OVERLAYS) += pps-gpio.dtbo
dtbo-$(RPI_DT_OVERLAYS) += pwm.dtbo
dtbo-$(RPI_DT_OVERLAYS) += pwm-2chan.dtbo
dtbo-$(RPI_DT_OVERLAYS) += qca7000.dtbo
dtbo-$(RPI_DT_OVERLAYS) += raspidac3.dtbo
dtbo-$(RPI_DT_OVERLAYS) += rpi-backlight.dtbo
dtbo-$(RPI_DT_OVERLAYS) += rpi-dac.dtbo
dtbo-$(RPI_DT_OVERLAYS) += rpi-display.dtbo
dtbo-$(RPI_DT_OVERLAYS) += rpi-ft5406.dtbo
dtbo-$(RPI_DT_OVERLAYS) += rpi-proto.dtbo
dtbo-$(RPI_DT_OVERLAYS) += rpi-sense.dtbo
dtbo-$(RPI_DT_OVERLAYS) += rra-digidac1-wm8741-audio.dtbo
dtbo-$(RPI_DT_OVERLAYS) += sc16is750-i2c.dtbo
dtbo-$(RPI_DT_OVERLAYS) += sc16is752-spi1.dtbo
dtbo-$(RPI_DT_OVERLAYS) += sdhost.dtbo
dtbo-$(RPI_DT_OVERLAYS) += sdio.dtbo
dtbo-$(RPI_DT_OVERLAYS) += sdio-1bit.dtbo
dtbo-$(RPI_DT_OVERLAYS) += sdtweak.dtbo
dtbo-$(RPI_DT_OVERLAYS) += smi.dtbo
dtbo-$(RPI_DT_OVERLAYS) += smi-dev.dtbo
dtbo-$(RPI_DT_OVERLAYS) += smi-nand.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi-gpio35-39.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi-rtc.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi0-hw-cs.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi1-1cs.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi1-2cs.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi1-3cs.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi2-1cs.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi2-2cs.dtbo
dtbo-$(RPI_DT_OVERLAYS) += spi2-3cs.dtbo
dtbo-$(RPI_DT_OVERLAYS) += tinylcd35.dtbo
dtbo-$(RPI_DT_OVERLAYS) += uart1.dtbo
dtbo-$(RPI_DT_OVERLAYS) += vc4-fkms-v3d.dtbo
dtbo-$(RPI_DT_OVERLAYS) += vc4-kms-v3d.dtbo
dtbo-$(RPI_DT_OVERLAYS) += vga666.dtbo
dtbo-$(RPI_DT_OVERLAYS) += w1-gpio.dtbo
dtbo-$(RPI_DT_OVERLAYS) += w1-gpio-pullup.dtbo
dtbo-$(RPI_DT_OVERLAYS) += wittypi.dtbo
targets += dtbs dtbs_install targets += dtbs dtbs_install
targets += $(dtbo-y) targets += $(dtb-y)
endif endif
always := $(dtbo-y) always := $(dtb-y)
clean-files := *.dtbo clean-files := *.dtb
# Enable fixups to support overlays on BCM2708 platforms
ifeq ($(RPI_DT_OVERLAYS),y)
DTC_FLAGS ?= -@
endif

View File

@@ -53,8 +53,8 @@ have its contents deleted (or commented out).
Using Overlays Using Overlays
============== ==============
Overlays are loaded using the "dtoverlay" directive. As an example, consider Overlays are loaded using the "dtoverlay" directive. As an example, consider the
the popular lirc-rpi module, the Linux Infrared Remote Control driver. In the popular lirc-rpi module, the Linux Infrared Remote Control driver. In the
pre-DT world this would be loaded from /etc/modules, with an explicit pre-DT world this would be loaded from /etc/modules, with an explicit
"modprobe lirc-rpi" command, or programmatically by lircd. With DT enabled, "modprobe lirc-rpi" command, or programmatically by lircd. With DT enabled,
this becomes a line in config.txt: this becomes a line in config.txt:
@@ -110,23 +110,10 @@ Params:
(default "off") (default "off")
random Set to "on" to enable the hardware random random Set to "on" to enable the hardware random
number generator (default "on") number generator (default "off")
sd_overclock Clock (in MHz) to use when the MMC framework
requests 50MHz
sd_force_pio Disable DMA support for SD driver (default off)
sd_pio_limit Number of blocks above which to use DMA for
SD card (default 1)
sd_debug Enable debug output from SD driver (default off)
uart0 Set to "off" to disable uart0 (default "on") uart0 Set to "off" to disable uart0 (default "on")
uart1 Set to "on" or "off" to enable or disable uart1
(default varies)
watchdog Set to "on" to enable the hardware watchdog watchdog Set to "on" to enable the hardware watchdog
(default "off") (default "off")
@@ -136,14 +123,12 @@ Params:
act_led_activelow Set to "on" to invert the sense of the LED act_led_activelow Set to "on" to invert the sense of the LED
(default "off") (default "off")
N.B. For Pi3 see pi3-act-led overlay.
act_led_gpio Set which GPIO to use for the activity LED act_led_gpio Set which GPIO to use for the activity LED
(in case you want to connect it to an external (in case you want to connect it to an external
device) device)
(default "16" on a non-Plus board, "47" on a (default "16" on a non-Plus board, "47" on a
Plus or Pi 2) Plus or Pi 2)
N.B. For Pi3 see pi3-act-led overlay.
pwr_led_trigger pwr_led_trigger
pwr_led_activelow pwr_led_activelow
@@ -161,35 +146,6 @@ Params:
and the other i2c baudrate parameters. and the other i2c baudrate parameters.
Name: adau1977-adc
Info: Overlay for activation of ADAU1977 ADC codec over I2C for control
and I2S for data.
Load: dtoverlay=adau1977-adc
Params: <None>
Name: ads1015
Info: Overlay for activation of Texas Instruments ADS1015 ADC over I2C
Load: dtoverlay=ads1015,<param>=<val>
Params: addr I2C bus address of device. Set based on how the
addr pin is wired. (default=0x48 assumes addr
is pulled to GND)
cha_enable Enable virtual channel a. (default=true)
cha_cfg Set the configuration for virtual channel a.
(default=4 configures this channel for the
voltage at A0 with respect to GND)
cha_datarate Set the datarate (samples/sec) for this channel.
(default=4 sets 1600 sps)
cha_gain Set the gain of the Programmable Gain
Amplifier for this channel. (default=2 sets the
full scale of the channel to 2.048 Volts)
Channel (ch) parameters can be set for each enabled channel.
A maximum of 4 channels can be enabled (letters a thru d).
For more information refer to the device datasheet at:
http://www.ti.com/lit/ds/symlink/ads1015.pdf
Name: ads7846 Name: ads7846
Info: ADS7846 Touch controller Info: ADS7846 Touch controller
Load: dtoverlay=ads7846,<param>=<val> Load: dtoverlay=ads7846,<param>=<val>
@@ -215,26 +171,6 @@ Params: cs SPI bus Chip Select (default 1)
www.kernel.org/doc/Documentation/devicetree/bindings/input/ads7846.txt www.kernel.org/doc/Documentation/devicetree/bindings/input/ads7846.txt
Name: akkordion-iqdacplus
Info: Configures the Digital Dreamtime Akkordion Music Player (based on the
OEM IQAudIO DAC+ or DAC Zero module).
Load: dtoverlay=akkordion-iqdacplus,<param>=<val>
Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
Digital volume control. Enable with
dtoverlay=akkordion-iqdacplus,24db_digital_gain
(The default behaviour is that the Digital
volume control is limited to a maximum of
0dB. ie. it can attenuate but not provide
gain. For most users, this will be desired
as it will prevent clipping. By appending
the 24db_digital_gain parameter, the Digital
volume control will allow up to 24dB of
gain. If this parameter is enabled, it is the
responsibility of the user to ensure that
the Digital volume control is set to a value
that does not result in clipping/distortion!)
Name: at86rf233 Name: at86rf233
Info: Configures the Atmel AT86RF233 802.15.4 low-power WPAN transceiver, Info: Configures the Atmel AT86RF233 802.15.4 low-power WPAN transceiver,
connected to spi0.0 connected to spi0.0
@@ -242,26 +178,11 @@ Load: dtoverlay=at86rf233,<param>=<val>
Params: interrupt GPIO used for INT (default 23) Params: interrupt GPIO used for INT (default 23)
reset GPIO used for Reset (default 24) reset GPIO used for Reset (default 24)
sleep GPIO used for Sleep (default 25) sleep GPIO used for Sleep (default 25)
speed SPI bus speed in Hz (default 3000000) speed SPI bus speed in Hz (default 6000000)
trim Fine tuning of the internal capacitance trim Fine tuning of the internal capacitance
arrays (0=+0pF, 15=+4.5pF, default 15) arrays (0=+0pF, 15=+4.5pF, default 15)
Name: audioinjector-wm8731-audio
Info: Configures the audioinjector.net audio add on soundcard
Load: dtoverlay=audioinjector-wm8731-audio
Params: <None>
Name: audremap
Info: Switches PWM sound output to pins 12 (Right) & 13 (Left)
Load: dtoverlay=audremap,<param>=<val>
Params: swap_lr Reverse the channel allocation, which will also
swap the audio jack outputs (default off)
enable_jack Don't switch off the audio jack output
(default off)
Name: bmp085_i2c-sensor Name: bmp085_i2c-sensor
Info: Configures the BMP085/BMP180 digital barometric pressure and temperature Info: Configures the BMP085/BMP180 digital barometric pressure and temperature
sensors from Bosch Sensortec sensors from Bosch Sensortec
@@ -277,49 +198,6 @@ Params: gpiopin GPIO connected to the sensor's DATA output.
(default 4) (default 4)
Name: dionaudio-loco
Info: Configures the Dion Audio LOCO DAC-AMP
Load: dtoverlay=dionaudio-loco
Params: <None>
Name: dpi18
Info: Overlay for a generic 18-bit DPI display
This uses GPIOs 0-21 (so no I2C, uart etc.), and activates the output
2-3 seconds after the kernel has started.
Load: dtoverlay=dpi18
Params: <None>
Name: dpi24
Info: Overlay for a generic 24-bit DPI display
This uses GPIOs 0-27 (so no I2C, uart etc.), and activates the output
2-3 seconds after the kernel has started.
Load: dtoverlay=dpi24
Params: <None>
Name: dwc-otg
Info: Selects the dwc_otg USB controller driver which has fiq support. This
is the default on all except the Pi Zero which defaults to dwc2.
Load: dtoverlay=dwc-otg
Params: <None>
Name: dwc2
Info: Selects the dwc2 USB controller driver
Load: dtoverlay=dwc2,<param>=<val>
Params: dr_mode Dual role mode: "host", "peripheral" or "otg"
g-rx-fifo-size Size of rx fifo size in gadget mode
g-np-tx-fifo-size Size of non-periodic tx fifo size in gadget
mode
g-tx-fifo-size Size of periodic tx fifo per endpoint
(except ep0) in gadget mode
[ The ds1307-rtc overlay has been deleted. See i2c-rtc. ] [ The ds1307-rtc overlay has been deleted. See i2c-rtc. ]
@@ -348,7 +226,7 @@ Params: gpio_pin Input pin number. Default is 18.
Name: gpio-poweroff Name: gpio-poweroff
Info: Drives a GPIO high or low on poweroff (including halt) Info: Drives a GPIO high or low on reboot
Load: dtoverlay=gpio-poweroff,<param>=<val> Load: dtoverlay=gpio-poweroff,<param>=<val>
Params: gpiopin GPIO for signalling (default 26) Params: gpiopin GPIO for signalling (default 26)
@@ -374,34 +252,13 @@ Params: <None>
Name: hifiberry-dacplus Name: hifiberry-dacplus
Info: Configures the HifiBerry DAC+ audio card Info: Configures the HifiBerry DAC+ audio card
Load: dtoverlay=hifiberry-dacplus,<param>=<val> Load: dtoverlay=hifiberry-dacplus
Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
Digital volume control. Enable with
"dtoverlay=hifiberry-dacplus,24db_digital_gain"
(The default behaviour is that the Digital
volume control is limited to a maximum of
0dB. ie. it can attenuate but not provide
gain. For most users, this will be desired
as it will prevent clipping. By appending
the 24dB_digital_gain parameter, the Digital
volume control will allow up to 24dB of
gain. If this parameter is enabled, it is the
responsibility of the user to ensure that
the Digital volume control is set to a value
that does not result in clipping/distortion!)
slave Force DAC+ Pro into slave mode, using Pi as
master for bit clock and frame clock.
Name: hifiberry-digi
Info: Configures the HifiBerry Digi and Digi+ audio card
Load: dtoverlay=hifiberry-digi
Params: <None> Params: <None>
Name: hifiberry-digi-pro Name: hifiberry-digi
Info: Configures the HifiBerry Digi+ Pro audio card Info: Configures the HifiBerry Digi audio card
Load: dtoverlay=hifiberry-digi-pro Load: dtoverlay=hifiberry-digi
Params: <None> Params: <None>
@@ -454,38 +311,13 @@ Params: i2c_gpio_sda GPIO used for I2C data (default "23")
(default "2" = ~100kHz) (default "2" = ~100kHz)
Name: i2c-mux
Info: Adds support for a number of I2C bus multiplexers on i2c_arm
Load: dtoverlay=i2c-mux,<param>=<val>
Params: pca9542 Select the NXP PCA9542 device
pca9545 Select the NXP PCA9545 device
pca9548 Select the NXP PCA9548 device
addr Change I2C address of the device (default 0x70)
[ The i2c-mux-pca9548a overlay has been deleted. See i2c-mux. ]
Name: i2c-pwm-pca9685a
Info: Adds support for an NXP PCA9685A I2C PWM controller on i2c_arm
Load: dtoverlay=i2c-pwm-pca9685a,<param>=<val>
Params: addr I2C address of PCA9685A (default 0x40)
Name: i2c-rtc Name: i2c-rtc
Info: Adds support for a number of I2C Real Time Clock devices Info: Adds support for a number of I2C Real Time Clock devices
Load: dtoverlay=i2c-rtc,<param>=<val> Load: dtoverlay=i2c-rtc,<param>=<val>
Params: ds1307 Select the DS1307 device Params: ds1307 Select the DS1307 device
ds1339 Select the DS1339 device
ds3231 Select the DS3231 device ds3231 Select the DS3231 device
mcp7940x Select the MCP7940x device
mcp7941x Select the MCP7941x device mcp7941x Select the MCP7941x device
pcf2127 Select the PCF2127 device pcf2127 Select the PCF2127 device
@@ -494,38 +326,6 @@ Params: ds1307 Select the DS1307 device
pcf8563 Select the PCF8563 device pcf8563 Select the PCF8563 device
trickle-resistor-ohms Resistor value for trickle charge (DS1339-only)
wakeup-source Specify that the RTC can be used as a wakeup
source
Name: i2c0-bcm2708
Info: Enable the i2c_bcm2708 driver for the i2c0 bus. Not all pin combinations
are usable on all platforms.
Load: dtoverlay=i2c0-bcm2708,<param>=<val>
Params: sda0_pin GPIO pin for SDA0 (deprecated - use pins_*)
scl0_pin GPIO pin for SCL0 (deprecated - use pins_*)
pins_0_1 Use pins 0 and 1 (default)
pins_28_29 Use pins 28 and 29
pins_44_45 Use pins 44 and 45
pins_46_47 Use pins 46 and 47
Name: i2c1-bcm2708
Info: Enable the i2c_bcm2708 driver for the i2c1 bus
Load: dtoverlay=i2c1-bcm2708,<param>=<val>
Params: sda1_pin GPIO pin for SDA1 (2 or 44 - default 2)
scl1_pin GPIO pin for SCL1 (3 or 45 - default 3)
pin_func Alternative pin function (4 (alt0), 6 (alt2) -
default 4)
Name: i2s-gpio28-31
Info: move I2S function block to GPIO 28 to 31
Load: dtoverlay=i2s-gpio28-31
Params: <None>
Name: i2s-mmap Name: i2s-mmap
Info: Enables mmap support in the bcm2708-i2s driver Info: Enables mmap support in the bcm2708-i2s driver
@@ -535,78 +335,13 @@ Params: <None>
Name: iqaudio-dac Name: iqaudio-dac
Info: Configures the IQaudio DAC audio card Info: Configures the IQaudio DAC audio card
Load: dtoverlay=iqaudio-dac,<param> Load: dtoverlay=iqaudio-dac
Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec Params: <None>
Digital volume control. Enable with
"dtoverlay=iqaudio-dac,24db_digital_gain"
(The default behaviour is that the Digital
volume control is limited to a maximum of
0dB. ie. it can attenuate but not provide
gain. For most users, this will be desired
as it will prevent clipping. By appending
the 24db_digital_gain parameter, the Digital
volume control will allow up to 24dB of
gain. If this parameter is enabled, it is the
responsibility of the user to ensure that
the Digital volume control is set to a value
that does not result in clipping/distortion!)
Name: iqaudio-dacplus Name: iqaudio-dacplus
Info: Configures the IQaudio DAC+ audio card Info: Configures the IQaudio DAC+ audio card
Load: dtoverlay=iqaudio-dacplus,<param>=<val> Load: dtoverlay=iqaudio-dacplus
Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
Digital volume control. Enable with
"dtoverlay=iqaudio-dacplus,24db_digital_gain"
(The default behaviour is that the Digital
volume control is limited to a maximum of
0dB. ie. it can attenuate but not provide
gain. For most users, this will be desired
as it will prevent clipping. By appending
the 24db_digital_gain parameter, the Digital
volume control will allow up to 24dB of
gain. If this parameter is enabled, it is the
responsibility of the user to ensure that
the Digital volume control is set to a value
that does not result in clipping/distortion!)
auto_mute_amp If specified, unmute/mute the IQaudIO amp when
starting/stopping audio playback.
unmute_amp If specified, unmute the IQaudIO amp once when
the DAC driver module loads.
Name: iqaudio-digi-wm8804-audio
Info: Configures the IQAudIO Digi WM8804 audio card
Load: dtoverlay=iqaudio-digi-wm8804-audio,<param>=<val>
Params: card_name Override the default, "IQAudIODigi", card name.
dai_name Override the default, "IQAudIO Digi", dai name.
dai_stream_name Override the default, "IQAudIO Digi HiFi",
dai stream name.
Name: justboom-dac
Info: Configures the JustBoom DAC HAT, Amp HAT, DAC Zero and Amp Zero audio
cards
Load: dtoverlay=justboom-dac,<param>=<val>
Params: 24db_digital_gain Allow gain to be applied via the PCM512x codec
Digital volume control. Enable with
"dtoverlay=justboom-dac,24db_digital_gain"
(The default behaviour is that the Digital
volume control is limited to a maximum of
0dB. ie. it can attenuate but not provide
gain. For most users, this will be desired
as it will prevent clipping. By appending
the 24dB_digital_gain parameter, the Digital
volume control will allow up to 24dB of
gain. If this parameter is enabled, it is the
responsibility of the user to ensure that
the Digital volume control is set to a value
that does not result in clipping/distortion!)
Name: justboom-digi
Info: Configures the JustBoom Digi HAT and Digi Zero audio cards
Load: dtoverlay=justboom-digi
Params: <None> Params: <None>
@@ -636,39 +371,6 @@ Params: gpio_out_pin GPIO for output (default "17")
(default "off") (default "off")
Name: mcp23017
Info: Configures the MCP23017 I2C GPIO expander
Load: dtoverlay=mcp23017,<param>=<val>
Params: gpiopin Gpio pin connected to the INTA output of the
MCP23017 (default: 4)
addr I2C address of the MCP23017 (default: 0x20)
Name: mcp23s17
Info: Configures the MCP23S08/17 SPI GPIO expanders.
If devices are present on SPI1 or SPI2, those interfaces must be enabled
with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
If interrupts are enabled for a device on a given CS# on a SPI bus, that
device must be the only one present on that SPI bus/CS#.
Load: dtoverlay=mcp23s17,<param>=<val>
Params: s08-spi<n>-<m>-present 4-bit integer, bitmap indicating MCP23S08
devices present on SPI<n>, CS#<m>
s17-spi<n>-<m>-present 8-bit integer, bitmap indicating MCP23S17
devices present on SPI<n>, CS#<m>
s08-spi<n>-<m>-int-gpio integer, enables interrupts on a single
MCP23S08 device on SPI<n>, CS#<m>, specifies
the GPIO pin to which INT output of MCP23S08
is connected.
s17-spi<n>-<m>-int-gpio integer, enables mirrored interrupts on a
single MCP23S17 device on SPI<n>, CS#<m>,
specifies the GPIO pin to which either INTA
or INTB output of MCP23S17 is connected.
Name: mcp2515-can0 Name: mcp2515-can0
Info: Configures the MCP2515 CAN controller on spi0.0 Info: Configures the MCP2515 CAN controller on spi0.0
Load: dtoverlay=mcp2515-can0,<param>=<val> Load: dtoverlay=mcp2515-can0,<param>=<val>
@@ -694,6 +396,7 @@ Info: Selects the bcm2835-mmc SD/MMC driver, optionally with overclock
Load: dtoverlay=mmc,<param>=<val> Load: dtoverlay=mmc,<param>=<val>
Params: overclock_50 Clock (in MHz) to use when the MMC framework Params: overclock_50 Clock (in MHz) to use when the MMC framework
requests 50MHz requests 50MHz
force_pio Disable DMA support
Name: mz61581 Name: mz61581
@@ -721,45 +424,6 @@ Params: speed Display SPI bus speed
[ The pcf8563-rtc overlay has been deleted. See i2c-rtc. ] [ The pcf8563-rtc overlay has been deleted. See i2c-rtc. ]
Name: pi3-act-led
Info: Pi3 uses a GPIO expander to drive the LEDs which can only be accessed
from the VPU. There is a special driver for this with a separate DT
node, which has the unfortunate consequence of breaking the
act_led_gpio and act_led_activelow dtparams.
This overlay changes the GPIO controller back to the standard one and
restores the dtparams.
Load: dtoverlay=pi3-act-led,<param>=<val>
Params: activelow Set to "on" to invert the sense of the LED
(default "off")
gpio Set which GPIO to use for the activity LED
(in case you want to connect it to an external
device)
REQUIRED
Name: pi3-disable-bt
Info: Disable Pi3 Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15
N.B. To disable the systemd service that initialises the modem so it
doesn't use the UART, use 'sudo systemctl disable hciuart'.
Load: dtoverlay=pi3-disable-bt
Params: <None>
Name: pi3-miniuart-bt
Info: Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore
UART0/ttyAMA0 over GPIOs 14 & 15. Note that this may reduce the maximum
usable baudrate.
N.B. It is also necessary to edit /lib/systemd/system/hciuart.service
and replace ttyAMA0 with ttyS0, unless you have a system with udev rules
that create /dev/serial0 and /dev/serial1, in which case use
/dev/serial1 instead because it will always be correct. Furthermore,
you must also set core_freq=250 in config.txt or the miniuart will not
work.
Load: dtoverlay=pi3-miniuart-bt
Params: <None>
Name: piscreen Name: piscreen
Info: PiScreen display by OzzMaker.com Info: PiScreen display by OzzMaker.com
Load: dtoverlay=piscreen,<param>=<val> Load: dtoverlay=piscreen,<param>=<val>
@@ -788,18 +452,6 @@ Params: speed Display SPI bus speed
xohms Touchpanel sensitivity (X-plate resistance) xohms Touchpanel sensitivity (X-plate resistance)
Name: pitft22
Info: Adafruit PiTFT 2.2" screen
Load: dtoverlay=pitft22,<param>=<val>
Params: speed Display SPI bus speed
rotate Display rotation {0,90,180,270}
fps Delay between frame updates
debug Debug output level {0-7}
Name: pitft28-capacitive Name: pitft28-capacitive
Info: Adafruit PiTFT 2.8" capacitive touch screen Info: Adafruit PiTFT 2.8" capacitive touch screen
Load: dtoverlay=pitft28-capacitive,<param>=<val> Load: dtoverlay=pitft28-capacitive,<param>=<val>
@@ -838,8 +490,6 @@ Name: pps-gpio
Info: Configures the pps-gpio (pulse-per-second time signal via GPIO). Info: Configures the pps-gpio (pulse-per-second time signal via GPIO).
Load: dtoverlay=pps-gpio,<param>=<val> Load: dtoverlay=pps-gpio,<param>=<val>
Params: gpiopin Input GPIO (default "18") Params: gpiopin Input GPIO (default "18")
assert_falling_edge When present, assert is indicated by a falling
edge, rather than by a rising edge
Name: pwm Name: pwm
@@ -882,14 +532,6 @@ Params: pin Output pin (default 18) - see table
clock PWM clock frequency (informational) clock PWM clock frequency (informational)
Name: qca7000
Info: I2SE's Evaluation Board for PLC Stamp micro
Load: dtoverlay=qca7000,<param>=<val>
Params: int_pin GPIO pin for interrupt signal (default 23)
speed SPI bus speed (default 12 MHz)
Name: raspidac3 Name: raspidac3
Info: Configures the RaspiDAV Rev.3x audio card Info: Configures the RaspiDAV Rev.3x audio card
Load: dtoverlay=raspidac3 Load: dtoverlay=raspidac3
@@ -912,11 +554,14 @@ Name: rpi-display
Info: RPi-Display - 2.8" Touch Display by Watterott Info: RPi-Display - 2.8" Touch Display by Watterott
Load: dtoverlay=rpi-display,<param>=<val> Load: dtoverlay=rpi-display,<param>=<val>
Params: speed Display SPI bus speed Params: speed Display SPI bus speed
rotate Display rotation {0,90,180,270} rotate Display rotation {0,90,180,270}
fps Delay between frame updates fps Delay between frame updates
debug Debug output level {0-7} debug Debug output level {0-7}
xohms Touchpanel sensitivity (X-plate resistance) xohms Touchpanel sensitivity (X-plate resistance)
swapxy Swap x and y axis
Name: rpi-ft5406 Name: rpi-ft5406
@@ -937,38 +582,8 @@ Load: dtoverlay=rpi-sense
Params: <None> Params: <None>
Name: rra-digidac1-wm8741-audio
Info: Configures the Red Rocks Audio DigiDAC1 soundcard
Load: dtoverlay=rra-digidac1-wm8741-audio
Params: <None>
Name: sc16is750-i2c
Info: Overlay for the NXP SC16IS750 UART with I2C Interface
Enables the chip on I2C1 at 0x48. To select another address,
please refer to table 10 in reference manual.
Load: dtoverlay=sc16is750-i2c,<param>=<val>
Params: int_pin GPIO used for IRQ (default 24)
addr Address (default 0x48)
Name: sc16is752-spi1
Info: Overlay for the NXP SC16IS752 Dual UART with SPI Interface
Enables the chip on SPI1.
N.B.: spi1 is only accessible on devices with a 40pin header, eg:
A+, B+, Zero and PI2 B; as well as the Compute Module.
Load: dtoverlay=sc16is752-spi1,<param>=<val>
Params: int_pin GPIO used for IRQ (default 24)
Name: sdhost Name: sdhost
Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock. Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock
N.B. This overlay is designed for situations where the mmc driver is
the default, so it disables the other (mmc) interface - this will kill
WiFi on a Pi3. If this isn't what you want, either use the sdtweak
overlay or the new sd_* dtparams of the base DTBs.
Load: dtoverlay=sdhost,<param>=<val> Load: dtoverlay=sdhost,<param>=<val>
Params: overclock_50 Clock (in MHz) to use when the MMC framework Params: overclock_50 Clock (in MHz) to use when the MMC framework
requests 50MHz requests 50MHz
@@ -985,51 +600,6 @@ Name: sdio
Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock, Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock,
and enables SDIO via GPIOs 22-27. and enables SDIO via GPIOs 22-27.
Load: dtoverlay=sdio,<param>=<val> Load: dtoverlay=sdio,<param>=<val>
Params: overclock_50 SD Clock (in MHz) to use when the MMC framework
requests 50MHz
sdio_overclock SDIO Clock (in MHz) to use when the MMC
framework requests 50MHz
force_pio Disable DMA support (default off)
pio_limit Number of blocks above which to use DMA
(default 1)
debug Enable debug output (default off)
poll_once Disable SDIO-device polling every second
(default on: polling once at boot-time)
bus_width Set the SDIO host bus width (default 4 bits)
Name: sdio-1bit
Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock,
and enables 1-bit SDIO via GPIOs 22-25.
Load: dtoverlay=sdio-1bit,<param>=<val>
Params: overclock_50 SD Clock (in MHz) to use when the MMC framework
requests 50MHz
sdio_overclock SDIO Clock (in MHz) to use when the MMC
framework requests 50MHz
force_pio Disable DMA support (default off)
pio_limit Number of blocks above which to use DMA
(default 1)
debug Enable debug output (default off)
poll_once Disable SDIO-device polling every second
(default on: polling once at boot-time)
Name: sdtweak
Info: Tunes the bcm2835-sdhost SD/MMC driver
N.B. This functionality is now available via the sd_* dtparams in the
base DTB.
Load: dtoverlay=sdtweak,<param>=<val>
Params: overclock_50 Clock (in MHz) to use when the MMC framework Params: overclock_50 Clock (in MHz) to use when the MMC framework
requests 50MHz requests 50MHz
@@ -1040,6 +610,9 @@ Params: overclock_50 Clock (in MHz) to use when the MMC framework
debug Enable debug output (default off) debug Enable debug output (default off)
poll_once Disable SDIO-device polling every second
(default on: polling once at boot-time)
Name: smi Name: smi
Info: Enables the Secondary Memory Interface peripheral. Uses GPIOs 2-25! Info: Enables the Secondary Memory Interface peripheral. Uses GPIOs 2-25!
@@ -1065,117 +638,6 @@ Load: dtoverlay=spi-gpio35-39
Params: <None> Params: <None>
Name: spi-rtc
Info: Adds support for a number of SPI Real Time Clock devices
Load: dtoverlay=spi-rtc,<param>=<val>
Params: pcf2123 Select the PCF2123 device
Name: spi0-hw-cs
Info: Re-enables hardware CS/CE (chip selects) for SPI0
Load: dtoverlay=spi0-hw-cs
Params: <None>
Name: spi1-1cs
Info: Enables spi1 with a single chip select (CS) line and associated spidev
dev node. The gpio pin number for the CS line and spidev device node
creation are configurable.
N.B.: spi1 is only accessible on devices with a 40pin header, eg:
A+, B+, Zero and PI2 B; as well as the Compute Module.
Load: dtoverlay=spi1-1cs,<param>=<val>
Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI1_CE0).
cs0_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev1.0 (default
is 'okay' or enabled).
Name: spi1-2cs
Info: Enables spi1 with two chip select (CS) lines and associated spidev
dev nodes. The gpio pin numbers for the CS lines and spidev device node
creation are configurable.
N.B.: spi1 is only accessible on devices with a 40pin header, eg:
A+, B+, Zero and PI2 B; as well as the Compute Module.
Load: dtoverlay=spi1-2cs,<param>=<val>
Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI1_CE0).
cs1_pin GPIO pin for CS1 (default 17 - BCM SPI1_CE1).
cs0_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev1.0 (default
is 'okay' or enabled).
cs1_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev1.1 (default
is 'okay' or enabled).
Name: spi1-3cs
Info: Enables spi1 with three chip select (CS) lines and associated spidev
dev nodes. The gpio pin numbers for the CS lines and spidev device node
creation are configurable.
N.B.: spi1 is only accessible on devices with a 40pin header, eg:
A+, B+, Zero and PI2 B; as well as the Compute Module.
Load: dtoverlay=spi1-3cs,<param>=<val>
Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI1_CE0).
cs1_pin GPIO pin for CS1 (default 17 - BCM SPI1_CE1).
cs2_pin GPIO pin for CS2 (default 16 - BCM SPI1_CE2).
cs0_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev1.0 (default
is 'okay' or enabled).
cs1_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev1.1 (default
is 'okay' or enabled).
cs2_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev1.2 (default
is 'okay' or enabled).
Name: spi2-1cs
Info: Enables spi2 with a single chip select (CS) line and associated spidev
dev node. The gpio pin number for the CS line and spidev device node
creation are configurable.
N.B.: spi2 is only accessible with the Compute Module.
Load: dtoverlay=spi2-1cs,<param>=<val>
Params: cs0_pin GPIO pin for CS0 (default 43 - BCM SPI2_CE0).
cs0_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev2.0 (default
is 'okay' or enabled).
Name: spi2-2cs
Info: Enables spi2 with two chip select (CS) lines and associated spidev
dev nodes. The gpio pin numbers for the CS lines and spidev device node
creation are configurable.
N.B.: spi2 is only accessible with the Compute Module.
Load: dtoverlay=spi2-2cs,<param>=<val>
Params: cs0_pin GPIO pin for CS0 (default 43 - BCM SPI2_CE0).
cs1_pin GPIO pin for CS1 (default 44 - BCM SPI2_CE1).
cs0_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev2.0 (default
is 'okay' or enabled).
cs1_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev2.1 (default
is 'okay' or enabled).
Name: spi2-3cs
Info: Enables spi2 with three chip select (CS) lines and associated spidev
dev nodes. The gpio pin numbers for the CS lines and spidev device node
creation are configurable.
N.B.: spi2 is only accessible with the Compute Module.
Load: dtoverlay=spi2-3cs,<param>=<val>
Params: cs0_pin GPIO pin for CS0 (default 43 - BCM SPI2_CE0).
cs1_pin GPIO pin for CS1 (default 44 - BCM SPI2_CE1).
cs2_pin GPIO pin for CS2 (default 45 - BCM SPI2_CE2).
cs0_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev2.0 (default
is 'okay' or enabled).
cs1_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev2.1 (default
is 'okay' or enabled).
cs2_spidev Set to 'disabled' to stop the creation of a
userspace device node /dev/spidev2.2 (default
is 'okay' or enabled).
Name: tinylcd35 Name: tinylcd35
Info: 3.5" Color TFT Display by www.tinylcd.com Info: 3.5" Color TFT Display by www.tinylcd.com
Options: Touch, RTC, keypad Options: Touch, RTC, keypad
@@ -1215,27 +677,12 @@ Params: txd1_pin GPIO pin for TXD1 (14, 32 or 40 - default 14)
rxd1_pin GPIO pin for RXD1 (15, 33 or 41 - default 15) rxd1_pin GPIO pin for RXD1 (15, 33 or 41 - default 15)
Name: vc4-fkms-v3d
Info: Enable Eric Anholt's DRM VC4 V3D driver on top of the dispmanx
display stack.
Load: dtoverlay=vc4-fkms-v3d,<param>
Params: cma-256 CMA is 256MB, 256MB-aligned (needs 1GB)
cma-192 CMA is 192MB, 256MB-aligned (needs 1GB)
cma-128 CMA is 128MB, 128MB-aligned
cma-96 CMA is 96MB, 128MB-aligned
cma-64 CMA is 64MB, 64MB-aligned
Name: vc4-kms-v3d Name: vc4-kms-v3d
Info: Enable Eric Anholt's DRM VC4 HDMI/HVS/V3D driver. Running startx or Info: Enable Eric Anholt's DRM VC4 HDMI/HVS/V3D driver. Running startx or
booting to GUI while this overlay is in use will cause interesting booting to GUI while this overlay is in use will cause interesting
lockups. lockups.
Load: dtoverlay=vc4-kms-v3d,<param> Load: dtoverlay=vc4-kms-v3d
Params: cma-256 CMA is 256MB, 256MB-aligned (needs 1GB) Params: <None>
cma-192 CMA is 192MB, 256MB-aligned (needs 1GB)
cma-128 CMA is 128MB, 128MB-aligned
cma-96 CMA is 96MB, 128MB-aligned
cma-64 CMA is 64MB, 64MB-aligned
Name: vga666 Name: vga666
@@ -1268,14 +715,6 @@ Params: gpiopin GPIO for I/O (default "4")
extpullup GPIO for external pullup (default "5") extpullup GPIO for external pullup (default "5")
Name: wittypi
Info: Configures the wittypi RTC module.
Load: dtoverlay=wittypi,<param>=<val>
Params: led_gpio GPIO for LED (default "17")
led_trigger Choose which activity the LED tracks (default
"default-on")
Troubleshooting Troubleshooting
=============== ===============

View File

@@ -1,53 +0,0 @@
// Definitions for ADAU1977 ADC
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2708";
fragment@0 {
target = <&soc>;
__overlay__ {
codec_supply: fixedregulator@0 {
compatible = "regulator-fixed";
regulator-name = "AVDD";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
};
};
fragment@1 {
target = <&i2c>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
adau1977: codec@11 {
compatible = "adi,adau1977";
reg = <0x11>;
reset-gpios = <&gpio 5 0>;
AVDD-supply = <&codec_supply>;
};
};
};
fragment@2 {
target = <&i2s>;
__overlay__ {
status = "okay";
};
};
fragment@3 {
target = <&sound>;
__overlay__ {
compatible = "adi,adau1977-adc";
i2s-controller = <&i2s>;
status = "okay";
};
};
};

Some files were not shown because too many files have changed in this diff Show More