- Sep 29, 2023
-
-
Maxime Ripard authored
The BCM2712 HVS has registers to report the size of the various SRAM the driver uses, and their size actually differ depending on the stepping. The initialisation of the memory pools happen in the __vc4_hvs_alloc() function that also allocates the main HVS structure, that will then hold the pointer to the memory mapping of the registers. This creates some kind of circular dependency that we can break by passing the mapping pointer as an argument for __vc4_hvs_alloc() to use to query to get the SRAM sizes and initialise the memory pools accordingly. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
With the introduction of the support for BCM2712, the check of whether we're running on vc5 or not to compute the LBM alignment requirement doesn't work anymore. Moreover, the LBM size will need to be computed in words for the BCM2712, while we've had sizes in bytes so far. Aligning on either 64 or 32 words is thus fairly harmful on BCM2712, so let's just explicitly align the size when needed, and then call drm_mm_insert_node_generic() with an alignment of 1. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
The BCM2712 will have a fairly different dlist, that will feature one Pointer 0 word for each plane. Let's prepare by changing the ptr0_offset variable that holds the offset in a dlist of the pointer 0 word to an array. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
The HVS register set has been heavily modified in the BCM2712, and we'll thus need a separate debugfs_reg32 array for it. The name hvs_regs is thus a bit too generic, so let's rename it to something more specific. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
Just like the HVS itself, the COB parameters will be fairly different in the BCM2712. Let's move the COB parameters computation and its initialisation to a separate function that will be easier to extend in the future. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
Since the BCM2712 will feature a significantly different HVS, let's move the hardware initialisation part of our bind function into a separate function. That way, it will be easier to extend in the future. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
We currently enable the EOF interrupts through the CRTC destroy_state implementation. However, nothing guarantees that we can't call destroy_state multiple times in a row, and therefore before the EOF interrupt even happens. This means we would enable the interrupt multiple times but disable it only once. It wasn't an issue so far since the interrupts were only enabled by setting a bit in a register, but with BCM2712 we will use an external interrupt controller, with a refcounted interrupt. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
Since we'll support BCM2712 soon, let's move the logic to enable and disable the end-of-frame interrupts to a switch to extend it more easily. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
Since we'll support BCM2712 soon, let's move the logic behind vc4_hvs_get_fifo_from_output() to a switch to extend it more easily. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
The V3D IP has been separate since BCM2711, so let's make sure we issue a WARN if we're running not only on BCM2711, but also anything newer. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
With the introduction of the BCM2712 support, we will get yet another generation of display engine to support. The binary check of whether it's VC5 or not thus doesn't work anymore, especially since some parts of the driver will have changed with BCM2711, and some others with BCM2712. Let's introduce an enum to store the generation the driver is running on, which should provide more flexibility. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
We access multiple times the vc4_crtc_state->assigned_channel variable in the vc4_crtc_get_scanout_position() function, so let's store it in a local variable. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
The vc4_plane_atomic_check() directly returns the result of the final function it calls. Using the already defined ret variable to check its content on error, and a separate return 0 on success, makes it easier to extend. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
LBM allocations need a different size depending on the line length, format, etc. This can get tricky, and fail. Let's add some more prints to ease the debugging when it does. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
We need to allocate a few additional structures when checking our atomic_state, especially related to hardware SRAM that will hold the plane descriptors (DLIST) and the current line context (LBM) during composition. Since those allocation can fail, let's add some error message in that case to help debug what goes wrong. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
DLIST generation can get pretty tricky and there's not a lot of debug in the driver to help. Let's add a few more to track the generated DLIST size. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
The VC4 HDMI driver has a bunch of accessors to read from a register. The read accessor was warning when accessing an unknown register, but the write one was just returning silently. Let's make sure we warn also when writing to an unknown register. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
The audio clock is used by the HDMI controller driver and we were using it to get its audio rate and compute the dividers needed to reach a given audio sample rate. However, we were never enabling it, which was resulting in lockups on the BCM2712. Fixes: 632ee3aa ("drm/vc4: hdmi: Add audio-related callbacks") Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Dave Stevenson authored
The code was assuming that it was a single buffer with offsets, when kmstest uses separate buffers and 0 offsets for each plane. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
-
Dom Cobley authored
Kodi video planes come through with all zeros for fullscreen Without this check, we WARN when writing width-1, height-1 to destination dlist Signed-off-by: Dom Cobley <popcornmix@gmail.com>
-
Dom Cobley authored
If kms/fkms overlay is not present we have no matching drivers and so match is NULL. It is not safe to call component_master_add_with_match with a null match argument. So don't do that Signed-off-by: Dom Cobley <popcornmix@gmail.com>
-
Jonathan Bell authored
Parse devicetree for a charger voltage and apply it. If nonzero and a valid voltage, the firmware will enable charging, otherwise the charger circuit is disabled. Add sysfs attributes to read back the supported charge voltage range, the measured battery voltage, and the charger setpoint. Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
-
Jonathan Bell authored
Add property for bcm2712 firmware RTC driver charger control Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
-
Phil Elwell authored
Raspberry Pi 5s have a power/suspend button that is only accessible to the firmware. Add a driver to read it and generate key events. Signed-off-by: Phil Elwell <phil@raspberrypi.com>
-
Phil Elwell authored
Add bindings for the firmware-based button driver. Signed-off-by: Phil Elwell <phil@raspberrypi.com>
-
Phil Elwell authored
Add bindings for the firmware-based button driver. Signed-off-by: Phil Elwell <phil@raspberrypi.com>
-
Nick Hollinghurst authored
The delay seems to be required to reliably read model ID. (The same delay is already used when starting the camera.) Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
-
Phil Elwell authored
Some platforms include a fan-speed register that reports RPM directly as an alternative to counting interrupts from the fan tachometer input. Add support for reading a register at a given offset (rpm-offset) within a block declared in another node (rpm-regmap). This indirection allows the usual address mapping to be performed, and for address sharing with another driver. Signed-off-by: Phil Elwell <phil@raspberrypi.com>
-
Dom Cobley authored
Add binding for the new RTC driver for Raspberry Pi. This platform has an RTC managed by firmware, and this RTC driver provides the simple mailbox interface to access it. Signed-off-by: Dom Cobley <popcornmix@gmail.com>
-
Dom Cobley authored
This supports setting and reading the real time clock and supports wakeup alarms. To support wake up alarms you want this bootloader config: POWER_OFF_ON_HALT=1 WAKE_ON_GPIO=0 You can test with: echo +600 | sudo tee /sys/class/rtc/rtc0/wakealarm sudo halt That will halt (in an almost no power state), then wake and restart after 10 minutes. Signed-off-by: Dom Cobley <popcornmix@gmail.com>
-
Dom Cobley authored
We currently see these regularly: [ 25.157560] irq 31, desc: 00000000c15e6d2c, depth: 0, count: 0, unhandled: 0 [ 25.164658] ->handle_irq(): 00000000b1775675, brcmstb_l2_intc_irq_handle+0x0/0x1a8 [ 25.172352] ->irq_data.chip(): 00000000fea59f1c, gic_chip_mode1+0x0/0x108 [ 25.179166] ->action(): 000000003eda6d6f [ 25.183096] ->action->handler(): 000000002c09e646, bad_chained_irq+0x0/0x58 [ 25.190084] IRQ_LEVEL set [ 25.193142] IRQ_NOPROBE set [ 25.196198] IRQ_NOREQUEST set [ 25.199255] IRQ_NOTHREAD set with: $ cat /proc/interrupts | grep 31: 31: 1 0 0 0 GICv2 129 Level (null) The interrupt is described in DT with IRQ_TYPE_LEVEL_HIGH But the current compatible string uses the controller in edge triggered mode (as that config matches our register layout). Add a new compatible structure for level driven interrupt with our register layout. We had already been using this compatible string in device tree, so no change needed there. Signed-off-by: Dom Cobley <popcornmix@gmail.com>
-
Nick Hollinghurst authored
Add a driver for BCM2712 IOMMUs. There is a small driver for the Shared IOMMU TLB Cache. Each IOMMU instance is a separate device. IOMMUs are set up with a "pass-through" range covering the lowest 40BGytes (which should cover all of SDRAM) for the benefit of non-IOMMU-aware devices that share a physical IOMMU; and translation for addresses in the range 40GB to 42GB. An optional parameter adds a DMA offset (which otherwise would be lost?) to virtual addresses for DMA masters on a bus such as PCIe. Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
-
Dom Cobley authored
The previous commit broke support on older devices. Make the breaking parts of patch conditional on the device being used. Fixes: 6e1856ac7c39 ("dmaengine: bcm2835: HACK: Support DMA-Lite channels") Signed-off-by: Dom Cobley <popcornmix@gmail.com>
-
Dom Cobley authored
As the shifted address also applies to bcm2712, give the function a more specific name. Signed-off-by: Dom Cobley <popcornmix@gmail.com>
-
Jonathan Bell authored
It's really a function of the board whether or not to use this feature as it may require MAC compatibility as well as interop testing. Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
-
Maxime Ripard authored
BCM2712 has an extra clock exposed by the firmware called DISP, and used by (at least) the HVS. Let's add it to the list of clocks to register in Linux. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Maxime Ripard authored
The BCM2712 has a DMA-Lite controller that is basically a BCM2835-style DMA controller that supports 40 bits DMA addresses. We need it for HDMI audio to work, but this breaks BCM2835-38 so we should rework this later. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-
Phil Elwell authored
BCM2712 has 6 40-bit channels - DMA6 to DMA11. Add a new compatible string to indicate that the current platform is BCM2712. Signed-off-by: Phil Elwell <phil@raspberrypi.com>
-
Jonathan Bell authored
The SAR ADC architecture may complete a conversion but instability in the comparator can corrupt the result. Such corruption is signalled in the CS ERR bit, asserted alongside each conversion result. Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
-
Jonathan Bell authored
This functionality is now provided by raspberrypi-gpiomem. Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
-