Linux 6.6 LTS release – Highlights, Arm, RISC-V and MIPS architectures

The Linux 6.6 release has just been announced by Linus Torvalds on the Linux Kernel Mailing List (LKML):

So this last week has been pretty calm, and I have absolutely no excuses to delay the v6.6 release any more, so here it is.

There’s a random smattering of fixes all over, and apart from some bigger fixes to the r8152 driver, it’s all fairly small. Below is the shortlog for last week for anybody who really wants to get a flavor of the details. It’s short enough to scroll through.

This obviously means that the merge window for 6.7 opens tomorrow, and I appreciate how many early pull requests I have lined up, with 40+ ready to go. That will make it a bit easier for me to deal with it, since I’ll be on the road for the first week of the merge window.

Linus

About two months ago, Linux 6.5 was released with initial USB4 v2 support with up to 80Gbps bandwidth, further updates to Rust support, simultaneous multi-threading (SMT) for the Loongarch architecture along with the ability to build the Loongarch kernel with the Clang compiler, the addition arm64’s permission-indirection extension (PIE) for future security features, support for NVIDIA IGX Orin and Jetson Orin Nano boards, and many other changes.

Linux 6.6 release

Linux 6.6 highlights

Some notable changes and updates made to the Linux 6.6 kernel include:

  • Intel’s shadow stack hardware support to prevent exploits. Shadow stack works by maintaining a secondary (shadow) stack that cannot be directly modified. When managing the stack, the processor pushes the return address to both the normal stack and the special permissioned shadow stack. Upon return, the processor pops the shadow stack copy and compares it to the normal stack copy. If the two differ, the processor raises a control protection fault, which can prevent exploits that were attempting to modify the stack. This implementation supports shadow stack on 64-bit kernels only, with support for 32-bit only via IA32 emulation, and only for userspace. Read the relevant LWN article for further insights
  • EEVDF task scheduler – The EEVDF (“Earliest Eligible Virtual Deadline First”) scheduler replaces CFS that was merged in Linux 2.6.23. The new algorithm is designed to ensure that processes that are not getting the attention they should are automatically picked the next time, while processes that got more than they deserved are “punished”. This is done in a clean, algorithmic way, where as CFS used heuristics and tunable knobs to attempt to guess which processes needed more attention. The new EEVDF scheduler should improve the latency of tasks that would be left behind by CFS while letting other tasks be routinely over-scheduled. This research paper (PDF) provides more details.
  • Faster asynchronous Direct I/O using io_uring with up to a 37% improvement in throughput/latency for low queue depth IO.

Update: Linux 6.6 will be an LTS kernel supported until December 2026

Arm changes in Linux 6.6

As usual, there were again a large number of changes and updates for the Arm architecture in Linux 6.6:

  • Allwinner
    • Allwinner T113 – CAN Bus
    • Allwinner A31/A31s – QSPI support
    • Clock driver
      • Parameter name correction for ccu_nkm_round_rate()
      • Implement CLK_SET_RATE_PARENT for NKM clocks, i.e. consider alternative parent rates when determining clock rates
      • Set CLK_SET_RATE_PARENT for A64 pll-mipi
      • Support finding closest (as opposed to closest but not higher) clock rate for NM, NKM, mux and div type clocks, as use it for A64 pll-video0
      • Prefer current parent rate if able to generate ideal clock rate for NKM clocks
    • Device tree – Add Allwinner V3s xHCI USB
    • New board – Orange Pi Zero 3 (Note: WiFi/BT not supported at this time)
  • Rockchip
    • PHY -Added Rockchip RV1126 inno-dsi phy, RK3588 USB and PCIe support
    • IOMMU – Lift page-table allocation restrictions on newer hardware
    • Clock driver
      • Add PLL rates for Rockchip RK3568
      • Add the display clock tree for Rockchip RV1126
    • PCIe controller driver – Use 64-bit mask on MSI 64-bit PCI address to avoid zeroing out the upper 32 bits
    • Arm64 defconfig
      • Enable drivers for the Odroid-M1 board
      • Enable GPIO_SYSCON
      • Enable Rockchip OTP memory driver
      • Enable PHY_ROCKCHIP_NANENG_COMBO_PHY
    • New devices and boards – N/A
  • Amlogic
    • Watchdog – Add support for Amlogic-T7 SoCs
    • IRQ driver – New driver for Amlogic C3 SoCs
    • Clock driver
      • dt-bindings: expose all Amlogic clock ids
      • Migrate Amlogic gxbb clock controllers dt-bindings to schema
    • Various other driver changes
      • Add C3 Power Domains
      • Explicitly include correct DT includes in Amlogic SoC drivers
      • Fix to avoid potential NULL pointer dereference in meson_sm
      • Merge of genpd-v6.5-rc1-1 to move genpd amlogic drivers
    • ARM64 DT changes for Linux 6.6:
      • Add initial support for A311D2
      • Add gpio_intc, power domain for C3 SoC
      • Again some DT bindings fixes & cleanups
    • New boards – Amlogic AN400 (Amlogic T7/A311D2) board, Khadas VIM4
  • Samsung
    • PHY driver – Samsung Exynos850 USB support
    • Drivers – Minor cleanup of headers and maintainer entries for Samsung SoC drivers.
    • DTS ARM changes for Linux 6.6
      • Galaxy S II: correct LCD screen’s physical size.
      • Add Samsung Galaxy Tab 3 8.0 boards (Exynos4212).
      • Galaxy S3 family: add USB connector and USB OTG. Full USB OTG still seems not to work, but at least HDMI improved and dtbs_check is happy.
      • Fix issues pointed out by dtbs_check and W=1: unit addresses, use ‘gpios’ suffix over ‘gpio’, update i2c-arb device node to newer binding.
      • Few white-space cleanups.
    • Samsung DTS ARM64 changes
      • Add dedicated compatibles for PWM block.
      • Add PWM to ExynosAutov9 SADK board.
      • Few white-space and other cleanups.
    • New Devices – Samsung Galaxy Tab 3 8.0 boards (WiFi, 3G, and LTE models)
  • Qualcomm
    • PHY Driver
      • Add Qualcomm SA8775p PCIe support, M31 USB PHY driver
      • Qualcomm SM8150 combo PHY with reworking of QMP PCIe driver
    • DMA Engine – Qualcomm SM6115 and QCM2290 dmaengine support
    • PCIe controller driver:
      • Add DT and driver support for interconnect bandwidth voting for ‘pcie-mem’ and ‘cpu-pcie’ interconnects
      • Fix broken SDX65 ‘compatible’ DT property
      • Configure controller so MHI bus master clock will be switched off while in ASPM L1.x states
      • Use alignment restriction from EPF core in EPF MHI driver
      • Add MHI and Endpoint eDMA support
      • Add Snapdragon SM8450 support to the EPF MHI driversupport
      • Use iATU for EPF MHI transfers smaller than 4K to avoid eDMA setup latency
      • Add sa8775p DT binding and driver support
    • Clock driver
      • Qualcomm IPQ5018 Global Clock Controller driver
      • The MSM8996 core bus framework gains support for MSM8996 Pro.
      • Network-related resets are added on IPQ4019
      • SM6350 GPU clock controller clock supplies are corrected.
      • The SM83550 Video clock controller is extended to support SC8280XP.
      • And plenty of other (small) changes whose list is too long to be posted here…
    • Pincontrol driver
      • Qualcomm SM8350 and SM6115 LPASS (Low Power Audio Sub-System) pin control support
      • Qualcomm PMX75 and PM7550BA (Power Management) pin control support
      • Qualcomm PMC8180 and PMC8180C (Power Management) pin control support
    • Networking
      • Qualcomm Wi-Fi 7 (ath12k) driver gains extremely High Throughput (EHT) PHY support
      • Add support for ualcomm WCN3988 and WCN7850 Bluetooth chips
    • New SoCs
      • Qualcomm IPQ5018 for wireless access points
      • Qualcomm SM4450 (Snapdragon 4 Gen 2)  new low-end mobile phone platform.
    • ARM32 DTS updates
      • GCC and LCC clock controller parent clocks are introduced on MDM9615.
      • The newly introduced RPM representation is introduced across multiple platforms.Voltage ADC channel names are corrected across multiple platforms.
      • APQ8064 gains a definition for GSBI4.
      • The XO clock for SDHCI is corrected, as is the USB node name, on IPQ4019. USB node name is also corrected for SDX55.
      • The correct PMIC is included on SDX65 MTP.
      • The incorrect spi-max-frequency property is removed from controllers on IPQ8064 and MSM8960.
      • OCMEM and the display subsystem are added to MSM8226.
      • Reset line is added to the PM8941 and the APQ8074 Dragonboard, while a few properties of the Sony Xperia Z2 Tablet touchscreen are corrected.
    • Arm64 DTS updates for Linux 6.6
      • A shared definition of the IPQ5332 RDP is introduced, as is GPIO-based LEDs and buttons.
      • IPQ9574 – RDP433 USB, CPU cooling maps and regulators are added.
      • MSM8916 – D3 camera mezzanine is improved and refactored out to its own dts. The Samsung Galaxy S4 Mini gains support for its PMIC with charger, while Samsung Galaxy J5 and E5 gains touchscreen support.
      • MSM8939 – A few fixes and initial support for Samsung Galaxy A7 is added.
      • MSM8996 – Support for scaling the cache bus fabric, missing interrupt for the USB2 controller is added. The touchscreen vio supply on Xiaomi Mi 5 is corrected, and a few other cleanups are introduced across other devices.
      • MSM8998 – Display controller introduced, a few clock fixes are introduced and missing power domains are added for the multimedia subsystem iommu.
      • Reserved memory-regions and reserved GPIO lists are updated for the QDU/QRU1000 IDPs.
      • QCM2290 – Added USB3 PHY. The RB1 board gains regulators and GPU is enabled for the RB2.
      • SA8775P – PCIe and Ethernet support is introduced and enabled for the Ride board.
      • SC7180 – PSCI integration is refactored, to allow supporting devices with the Qualcomm firmware. BWMON is introduced, alongside the CPUfreq-based bus voting.
      • SC8180X – A number of fixes. pmic_glink is introduced and wired up on the Primus and Lenovo Flex 5G devices to provide support for external displays.
      • SC8280XP – Missing SCM interconnect is added and the PDC is marked as wakeup-parent of TLMM. On the CRD the gpio for vreg_misc_3p3 is corrected and a few regulators are renamed to align with schematics. The Lenovo Thinkpad X13s gains camera activity LED and a set of previously reserved GPIOs are released.
      • SA8540P Ride platform gains RTC support.SDM670 – CPU and L3 frequency scaling is added. The PDC is introduced and wired up as wakeup-parent of the TLMM.
      • SDM845  – The UFS controller gains interconnect path description, power-domain information is added to GCC and minimum frequency of the UFS ICE is corrected. On RB3 continuous splash memory region is described, and the camera subsystem is enabled. On the Lenovo Yoga C630 a missing power supply for the display panel is added, and the debug
        UART is introduced.
      • SDX75 – RPMh power-domains and SPMI controller are introduced, the PMX75 PMIC is described and added to the IDP.
      • SM6115 – GPU description is added and display enabled on the Lenovo Tab P11.
      • SM635 – BWMON is introduced for LLCC and DDR scaling. Display and GPU is added, and the PDC is registered as wakeup-parent of TLMM.
      • SM6375 – L3 cache scaling is introduced.
      • SM8150 – The DSI PHY compatible and an interrupt for I2C7 are corrected and on the Sony Xperia 1 and 5, the ramoops pmsg size is corrected.
      • SM8250 – BWMONs are introduced for DDR and LLCC scaling, the UFS node gains interconnect paths, SMMU is marked as DMA coherent and dynamic power coefficients are updated. On Sony Xperia 0 II and 5 II GPIO line names are updated.
      • SM8350 – Missing cluster sleep states and LMH interrupts are added, the CPU compatibles are corrected and APR and LPASS pinctrl support is introduced. The HDK gains uSD card support and PMK8350 is added.
      • SM8450 – Support for RNG and RPMh stats are added, the ICE handling is extracted from the UFS node and the display subsystem gains a missing interconnect path. Thermal description is improved for the HDK.
      • SM8550 M- TP and QRD the pmic_glink is introduced to provide DisplayPort output. A missing regulator supply is also added.
      • A few platforms that happens to share the RPMH power-domain resource identifier constants are migrated to new generic defines. ADC channel names are generalized on various PMICs.
      • A variety of devices gain chassis-type, and the GIC_SPI constant is replacing the 0 across a few different platforms.
    • Arm defconfig updates – N/A
    • Arm64 defconfig updates
      • Mark the MSM8996 global clock controller as buildin, to avoid boot issues.
      • The SC8280XP GPU clock controller is enabled, to enable GPU support.
      • A series of drivers needed to boot the IPQ5018 platform is enabled
      • The ethernet PHY to enable Ethernet on SA8775P is enabled.
    • New devices and boards
      • RDP432-C2 board (IPQ5018)
      • Ride board (SA8775P)
  • MediaTek
    • Thermal control
      • Various fixes for Mediatek LVTS
      • Remove redundant dev_err_probe(), because the underlying function already called it, from the Mediatek sensor
    • PHY – Mediatek dsi driver clock updates
    • SMMU – Add MT8188 IOMMU Support
    • Audio SoC – Support for Mediatek MT7986 (Filogic 830)
    • Networking – Add Bluetooth support for Mediatek MT2925
    • DRM Next
      • Small mtk-dpi cleanups
      • DisplayPort: support eDP and aux-bus
      • Fix uninitialized symbol
      • Do not check for 0 return after calling platform_get_irq()
      • Convert to platform remove callback returning void
      • Fix coverity issues
      • Fix potential memory leak if vmap() fail
      • Fix void-pointer-to-enum-cast warning
      • Rid W=1 warnings from GPU
  • Other new Arm hardware platforms and SoCs
    • Intel – Agilex5 FPGA SoC with Cortex-A76/A55 cores
    • Texas Instruments – AM62P5, a variant of the existing Sitara AM62x family
  • Raspberry Pi related changes
    • Add support for the following Raspberry Pi displays:
      • DFROBOT DRF0678 7in 800×480 TFT DSI capacitive touch
      • DFROBOT DRF0550 5in 800×480 TFT DSI capacitive touch

RISC-V Linux 6.6 updates

Work on the RISC-V architecture continues with some of the changes including:

  • Support for the new “riscv,isa-extensions” and “riscv,isa-base” device tree interfaces for probing extensions
  • Support for userspace access to the performance counters
  • Support for more instructions in kprobes
  • Crash kernels can be allocated above 4GiB
  • Support for KCFI
  • Support for ELFs in !MMU configurations
  • ARCH_KMALLOC_MINALIGN has been reduced to 8
  • mmap() defaults to sv48-sized addresses, with longer addresses hidden behind a hint (similar to Arm and Intel)
  • Various fixes and cleanups
  • Alibaba T-Head TH1520
    • Cchange TH1520 files to dual license (GPL-2.0 or MIT)
    • Add BeagleV Ahead board (sufficient only for booting to a console, with work on the mmc, clocks and ethernet sides of things under way)
  • Allwinner D1 – Driver for the CAN Bus controllers (tested on Lichee Panel RV86), add D1 GPADC node in DT file
  • StarFive JH7110
    • PHY – DHPY Rx, USB and PCIe support
    • Added clock drivers
    • Added ASoC driver (I2S)
    • Added support for QSPI
    • Device trees for Linux 6.6
      • Bindings to get clock ID defines out of the binding headers. Getting these (and the syscon bindings) in unblocked a swathe of stuff sitting on the list. Added are: new clock controllers and sycons, ethernet support, thermal sensors, USB and PCIe PHYs, hwrng, mmc and a few more besides for the VisionFive v2.
      • The original VisionFive and BeagleV Starlight got some the thermal sensor support too, as that is supported by the same driver. These changes make the board actually usable with
        something other than an initramfs.
      • Overlay support by way of the -@ flag set during dtb building, is added also.

MIPS “cleanups and fixes”

Nothing much happens on MIPS in Linux 6.6 with a few fixes here and there:

  • MIPS: TXx9: Do PCI error checks on own line
  • arch/mips/configs/*_defconfig cleanup
  • MIPS: VDSO: Conditionally export __vdso_gettimeofday()
  • Mips: loongson3_defconfig: Enable ast drm driver by default
  • mips: remove <asm/export.h>
  • mips: replace #include <asm/export.h> with #include <linux/export.h>
  • mips: remove unneeded #include <asm/export.h>
  • MIPS: Loongson64: Fix more __iomem attributes
  • MIPS: loongson32: Remove regs-rtc.h
  • MIPS: loongson32: Remove regs-clk.h
  • MIPS: More explicit DT include clean-ups
  • MIPS: Fixup explicit DT include clean-up
  • Revert MIPS: Loongson: Fix build error when make modules_install
  • MIPS: Only fiddle with CHECKFLAGS if need-compiler'
  • MIPS: Fix CONFIG_CPU_DADDI_WORKAROUNDS modules_install’ regression
  • MIPS: Explicitly include correct DT includes

For more details, you could check out the complete Linux 6.6 changelog with commit messages only generated with the command git log v6.5..v6.6 --stat. Additional information can also be found on the KernelNewbies website.

Share this:
FacebookTwitterHacker NewsSlashdotRedditLinkedInPinterestFlipboardMeWeLineEmailShare

Support CNX Software! Donate via cryptocurrencies or become a Patron on Patreon

ROCK Pi 4C Plus

One Reply to “Linux 6.6 LTS release – Highlights, Arm, RISC-V and MIPS architectures”

  1. If someone wonders what the r8152 driver issue mentioned by Linus was. Here’s the relevant section in the log:

    r8152: Block future register access if register access fails

        Even though the functions to read/write registers can fail, most of the places in the r8152 driver that read/write register values don’t check error codes. The lack of error code checking is problematic in at least two ways.

        The first problem is that the r8152 driver often uses code patterns similar to this:

          x = read_register()

          x = x | SOME_BIT;

          write_register(x);

        …with the above pattern, if the read_register() fails and returns garbage then we’ll end up trying to write modified garbage back to the Realtek adapter. If the write_register() succeeds that’s bad. Note that as of commit f53a7ad18959 (“r8152: Set memory to all 0xFFs on failed reg reads”) the “garbage” returned by read_register() will at least be consistent garbage, but it is still garbage.

        It turns out that this problem is very serious. Writing garbage to some of the hardware registers on the Ethernet adapter can put the adapter in such a bad state that it needs to be power cycled (fully unplugged and plugged in again) before it can enumerate again.

        The second problem is that the r8152 driver generally has functions that are long sequences of register writes. Assuming everything will be OK if a random register write fails in the middle isn’t a great assumption.

        One might wonder if the above two problems are real. You could ask if we would really have a successful write after a failed read. It turns out that the answer appears to be “yes, this can happen”. In fact,  we’ve seen at least two distinct failure modes where this happens.

    On a sc7180-trogdor Chromebook if you drop into kdb for a while and then resume, you can see:

        1. We get a “Tx timeout”

        2. The “Tx timeout” queues up a USB reset.

        3. In rtl8152_pre_reset() we try to reinit the hardware.

        4. The first several (2-9) register accesses fail with a timeout, then things recover.

        The above test case was actually fixed by the patch (“r8152: Increase USB control msg timeout to 5000ms as per spec”) but at least shows that we really can see successful calls after failed ones.

        On a different (AMD) based Chromebook with a particular adapter, we found that during reboot tests we’d also sometimes get a transitory failure. In this case we saw -EPIPE being returned sometimes. Retrying worked, but retrying is not always safe for all register accesses since reading/writing some registers might have side effects (like registers that clear on read).

        Let’s fully lock out all register access if a register access fails. When we do this, we’ll try to queue up a USB reset and try to unlock register access after the reset. This is slightly tricker than it sounds since the r8152 driver has an optimized reset sequence that only works reliably after probe happens. In order to handle this, we avoid the optimized reset if probe didn’t finish. Instead, we simply  retry the probe routine in this case.

        When locking out access, we’ll use the existing infrastructure that  the driver was using when it detected we were unplugged. This keeps us from getting stuck in delay loops in some parts of the driver.

Leave a Reply

Your email address will not be published. Required fields are marked *

Khadas VIM4 SBC
Khadas VIM4 SBC