Archive

Posts Tagged ‘mips’

Linux 4.15 Release – Main Changes, Arm and MIPS Architectures

January 30th, 2018 13 comments

Linus Torvald has released Linux 4.15 last Sunday:

After a release cycle that was unusual in so many (bad) ways, this last week was really pleasant. Quiet and small, and no last-minute panics, just small fixes for various issues. I never got a feeling that I’d need to extend things by yet another week, and 4.15 looks fine to me.

Half the changes in the last week were misc driver stuff (gpu, input, networking) with the other half being a mix of networking, core kernel and arch updates (mainly x86). But all of it is tiny.

So at least we had one good week. This obviously was not a pleasant release cycle, with the whole meltdown/spectre thing coming in in the middle of the cycle and not really gelling with our normal release cycle. The extra two weeks were obviously mainly due to that whole timing issue.

Also, it is worth pointing out that it’s not like we’re “done” with spectre/meltdown. There is more work pending (arm, spectre-v1, misc details), and perhaps equally importantly, to actually get the biggest fix for the indirect branch mitigations, you need not just the kernel updates, you need to have a compiler with support for the “retpoline” indirect branch model.

You can do

cat /sys/devices/system/cpu/vulnerabilities/spectre_v2

and if you don’t have a compiler that supports the retpoline mitigations, you’ll get:

Vulnerable: Minimal generic ASM retpoline

because only the assembly code (not the C code) will have the retpoline mitigation. So keep that in mind.

Anyway, while spectre/meltdown has obviously been the big news this release cycle, it’s worth noting that we obviously had all the *normal* updates going on too, and the work everywhere else didn’t just magically stop, even if some developers have been distracted by CPU issues. In the *big* picture, 4.15 looks perfectly normal, with two thirds of the full 4.15 patch being about drivers, and even the arch updates are dominated by the arm DTS diffs, not by CPU bug mitigation.

So the news cycle notwithstanding, the bulk of the 4.15 work is all the regular plodding “boring” stuff. And I mean that in the best possible way. It may not be glamorous and get the headlines, but it’s the bread and butter of kernel development, and is in many ways the really important stuff.

Go forth and play with it, things actually look pretty good despite everything.

And obviously this also means that the merge window for 4.16 is open. I already have a number of pull requests pending that I will start merging tomorrow. Hopefully we’ll have a _normal_ and entirely boring release cycle for 4.16. Because boring really is good.

Linux 4.14 extended memory limits to 128 PiB (Pebibyte = 1.024 Petabyte)  of virtual address space and 4 PiB of physical address space, added zstd compression in Btrfs and Squashf file systems, improved kernel traces, and implemented zero-copy from user memory to socket among many other changes.

Linux 4.15 was especially newsworthy due to the Spectre/Meltdown debacle and initial fixes affecting all major silicon vendors, and operating systems, but that are also other notable changes:

  • Initial RISC-V Support with device tree bindings for RISC-V CPUs, early boot and initialization code, the Linux atomic and memory model intrinsics, some interrupt and timer infrastructure, paging and MMU related code, and  an implementation of the user-facing ABIs for RISC-V Linux systems.
  • Improved power management in systems with SATA Link Power Management – Because of the lack of documentation of the ALPM (Aggressive Link Power Management), and because  it easily caused data corruption, Linux has been unable to properly implement ALPM support for years. Lack of ALPM support prevents the system from entering in deep power saving states, which means a much worse battery life for Linux users on systems with ALPM. This lack of implementation leads to worse battery life in systems that support ALPM, but now a patch has been merged that implements a better default behavior for ALPM without corrupting data. Linux users with ALPM (e.g. on Intel Haswell, Broadwell, Skylake) should see better battery life with for example Thinkpad T440s laptop saving 0.9-1.2W when idle.
  • AMD Secure Encrypted Virtualization – Linux 4.14 added AMD Secure Memory Encryption, and now Linux 4.15 adds initial support for AMD Secure Encrypted Virtualization, which integrates the memory encryption support in the AMD-V virtualization architecture to support encrypted virtual machines
  • User-Mode Instruction Prevention Intel Security feature – Spectre/Meltdown was not the only security issue addressed in Linux 4.15, and the release also added support for “User Mode Instruction Prevention” found in Intel processor, that disable some instructions ( SGDT, SLDT, SIDT, SMSW and STR) from being executed in user mode in order to reduce the tools available to craft some type of privilege escalation attacks.

As usual, I’ll also provide a summary of some changes specific to the Arm architecture:

  • Allwinner:
    • Allwinner A10/A20/A31 –  Drivers for Display, HDMI controller,
    • Allwinner A33 – Audio codec fixes
    • Allwinner A64 – DMA controller
    • sunxi-ng clocks –  Audio PLL sigma-delta modulation support for accurate audio playback
    • Device tree changes:
      • Allwinner A10/A20 – CCU sunxi-ng style clock conversion, Display pipeline, HDMI controller
      • Allwinner A31 – HDMI controller, I2S controllers
      • Allwinner A64 –  DMA controller, EMAC, SPI
      • Allwinner H3/H5 – EMAC
      • Allwinner R40 – Basic dtsi
    • Cleanups – Removal of GPIO pinmux settings for A10 and A80
    • New devices & boards – TBS A711 tablet (Allwinner A83T), FriendlyARM NanoPi NEO Plus2, Olimex A20-OLinuXino-Micro eMMC variant, Banana Pi M2 Ultra, Banana Pi M2 Berry
  • Rockchip
    • Clocks – New clock ids for Rockchip rk3188 and rk3368 SoCs
    • Thermal – Add Rockchip RV1108 support in rockchip thermal driver
    • Pinctrl – Various non-critical fixes
    • LVDS support in DRM driver
    • New boards – Amarula Vyasa single-board computer (RK3288)
    • Device tree changes:
      • Support for the RGA (raster graphics accelerator) on rk3399 and efuses on rk3368
      • Enablement of display support on the rk3399-firefly, which got its default serial set as well and got cec support as well.
      • Gru boards got their touchpad support refined to actually mark the button correctly and also git their rt5514 dsp added.
      • RK3328 eval board got its cpu regulator and mmc nodes
      • CEC support for the two rk3288-firefly variants and general hdmi support for the firefly-reload.
      • Thermal support for the rv1108
      • Vyasa from Amarula Solutions using a rk3288 and core LVDS node for the newly added driver+binding.
      • bindings + nodes for the Mali-Utgard GPUs found on some Rockchip socs like RK3036 and RK3188. (Lima project can render a red triangle to a png file).
  • Amlogic
    • Clocks – Amlogic Video Processing Unit VPU and VAPB clks
    • nvmem – meson-mx-efuse: fix reading from an offset other than 0
    • adc – meson-saradc: fix the bit_idx of the adc_en clock
    • Various fixes – GPIO interrupt fixes, socinfo fix for GX series, typo
    • Power management support for Amlogic GX family
    • SMP support for Amlogic Meson8/8b
    • MMC – meson-mx-sdio: New driver for the Amlogic Meson8 and Meson8b SoCs
    • SoC info driver for 32-bit Amlogic SoCs
    • New boards / devices – Amlogic Meson-AXG A113D based development board, Khadas VIM2 board, Tronsmart Vega S96 set-top-box
    • Device tree changes:
      • 64-bit
        • Add support for new GPIO IRQ driver
        • Support for A113D SoC
        • reserved memory fixups
        • gpio-names cleanups
        • MMC cleanups, enable high-speed modes
        • Misc cleanups
      • 32-bit
        • Add efuse node
        • Add SDIO MMC controller
        • Reserved memory fixes
        • SoC info driver nodes
        • Enable USB host controller
  • Samsung
    • Clocks – Updated runtime PM support for Samsung exynos5433/exynos4412 providers, removed clkdev aliases on Samsung SoCs
    • Minor drivers cleanups, e.g. remove of Exynos4212 related dead code (no more support for this SoC).
    • New boards – ODROID HC1 board for mini NAS / home cloud
    • Samsung DTS ARM changes
      • Add new board: Hardkernel Odroid HC1.
      • Fix incomplete Odroid-XU3/4 thermal-zones definition leading to possible overheat if first pair of A7+A15 cores is idle but rest of CPUs are busy.
      • Add capacity-dmips-mhz properties for CPUs of octa-core SoCs.
      • Add power button to Odroid XU3/4.
      • Improvements in Gscaler, HDMI and Mixer blocks on Exynos5.
      • Add suspend quirk to DWC3 USB controller to fix enumeration of SuperSpeed devices on Odroid XU4.
      • Add HDMI and MHL to Trats2.
      • Cleanups (redundant properties and nodes).
    • Samsung defconfig changes
      • Enable USB3503 on multi_v7 for Odroid U3.
      • Enable USB Attached SCSI for Odroid HC1.
  • Qualcomm
    • Clocks – RPM clk support on Qualcomm MSM8996/MSM8660 SoCs
    • Regulator – Support for Qualcomm PMI8994
    • Added USB modems – Quectel BG96 Qualcomm MDM9206 based IoT modem, Sierra Wireless EM7565 devices based on Qualcomm Snapdragon X16 LTE-A modem
    • Drivers updates
      • Add Qualcomm Remote Filesystem Memory driver
      • Add OF linkage for RMTFS
      • Add SCM firmware APIs for download mode and secure IO service
      •  Add SMEM support for cached entries
      • Add SMEM support for global partition, dynamic item limit, and more hosts
    • New devices – Fairphone 2, Sony Xperia Z2 tablet
    • Device tree changes:
      • Add MSM8660 GSBI6/7 nodes
      • Disable GSBI6 at APQ8064 platform level
      • Fix phy cells on APQ8064
    • ARM64 updates:
      • Add PCIE support to relevant MSM8996 based boards
      • Add RPM clock controller node on MSM8996
      • Add dload address on MSM8916 and MSM8996
      • Add MBHC button support on APQ8016 SBC
      • Add RTMFS specific compatible for rmtfs memory node
      • Fixups for MSM8916 GPIO line names and MDP address length
    • Defconfig updates:
      • 32-bit
        • Enable Sony Z2 tablet options
        • Enable USB on APQ8064/MSM8974
        • Fixup/catchup config to support newer options
      • 64-bit (ARM64):
        • Enable QCOM IOMMU
        • Enable Qualcomm USB options (re-enable Qualcomm DB410c USB)
  • Mediatek
    • New clock driver for Mediatek MT2712 and MT7622
    • Mediatek MT7622 RTC driver
    • Power management – Add missing module information to the Mediatek cpufreq driver module
    • Drivers update:
        • add 32 bit read/write support to pwrap
        • add mt7622 support to pwrap
        • test build all mediatek soc drivers
      • fix compiler issues
      • clean up Kconfig description
    • DTS updates:
      • 32-bit
        • mt7623 update nodes to binding description
        • mt2701 add display pwn nodes
        • mt2701 update audio node description
      • 64-bit – mt2712: add cpuidle support
  • Other new ARM hardware platforms and SoCs:
    • Actions Semi – Cubieboard6 SBC (Actions S500 )
    • Broadcom – Broadcom Hurricane 2 based Ubiquiti UniFi Switch 8, Broadcom bcm47xx based Luxul XAP-1440/XAP-810/ABR-4500/XBR-4500 wireless access points and routers
    • NXP – i.MX51: Zodiac Inflight Innovations RDU1 board; i.MX53: GE Healthcare PPD biometric monitor;  i.MX6: Pistachio single-board computer, Vining-2000 automotive diagnostic interface, Ka-Ro TX6 Computer-on-Module in additional variants
    • Realtek – RTD1295 based set-top-boxes MeLE V9 and PROBOX2 AVA
    • Renesas –  R-Car V3M (R8A77970) SoC and “Eagle” reference board, Renesas H3ULCB and M3ULCB “Kingfisher” extension infotainment boards, Renesas r8a7745 based iWave G22D-SODIMM SoM

Finally, some of the changes made for MIPS architecture:

  • Fixes:
    • ralink: Fix MT7620 PCI build issues (4.5)
    • Disable cmpxchg64() and HAVE_VIRT_CPU_ACCOUNTING_GEN for 32-bit SMP (4.1)
    • Fix MIPS64 FP save/restore on 32-bit kernels (4.0)
    • ptrace: Pick up ptrace/seccomp changed syscall numbers (3.19)
    • ralink: Fix MT7628 pinmux (3.19)
    • BCM47XX: Fix LED inversion on WRT54GSv1 (3.17)
    • Fix n32 core dumping as o32 since regset support (3.13)
    • ralink: Drop obsolete USB_ARCH_HAS_HCD select
  • Build system:
    • Default to “generic” (multiplatform) system type instead of IP22
    • Use generic little endian MIPS32 r2 configuration as default defconfig instead of ip22_defconfig
  • FPU emulation – Fix exception generation for certain R6 FPU instructions
  • SMP – Allow __cpu_number_map to be larger than NR_CPUS for sparse CPU id spaces
  • Miscellaneous:
    • Add iomem resource for kernel bss section for kexec/kdump
    • Atomics: Nudge writes on bit unlock
    • DT files: Standardise “ok” -> “okay”
  • Minor cleanups – Define virt_to_pfn(), Make thread_saved_pc static, simplify 32-bit sign extension in __read_64bit_c0_split(), etc…
  • Platform support:
    • BMIPS – Enable HARDIRQS_SW_RESEND
    • Broadcom BCM63XX – Add clkdev lookup support, update clk driver, UART driver, DTs to handle named refclk from DTs, split apart various clocks to more closely match hardware, add ethernet clocks
    • Cavium Octeon – Remove usage of cvmx_wait() in favour of __delay()
    • ImgTec Pistachio – DT: Drop deprecated dwmmc num-slots property
    • Ingenic JZ4780 – Add NFS root to Ci20 defconfig, aAdd watchdog to Ci20 DT & defconfig, and allow building of watchdog driver with this SoC
    • Generic (multiplatform) – Migrate xilfpga (MIPSfpga) platform to the generic platform
    • Lantiq xway – Fix ASC0/ASC1 clocks”

For full details, check out the full Linux 4.15 changelog – with comments only – generated using git log v4.14..v4.15 --stat. You may also consider reading Kernelnewsbies’s Linux 4.15 changelog.

Microsemi VSC7513 and VSC7514 MIPS SoCs for Ethernet Switches Get Initial Mainline Linux Support

December 15th, 2017 No comments

Microsemi VSC7514 is a 10-port Gigabit Ethernet (GbE)/SMB switch supporting a combination of 1G and 2.5G Ethernet ports, and VSC7513 comes with basically the same features except it’s limited 8 ports. Both SoCs include a MIPS processor with DDR3 memory interface, and support industrial and enterprise Ethernet switching features such as VLAN and QoS processing.

Microsemi VSC751x Ocelot family was unveiled in June 2016, but I only heard about them today, as Free Electrons recently added initial support for VSC7513 & VSC7514 chip into mainline Linux with the patch series available here.

Block Diagram for VSC7514

Microsemi VSC7514 specifications & features:

  • CPU / Memory Interface – Integrated 500 MHz MIPS 24KEc CPU with MMU and DDR3/DDR3L SDRAM  controller
  • Ethernet Connectivity – 4x dual media copper ports, 2x 1G SGMII ports, and 2x 1G/2.5G SGMII ports
  • Host CPU Interfaces – PCIe 1.x and NPI CPU interface
  • Internal shared memory buffer (8 queues per port)
  • Jumbo frame support
  • Strict priority and DWRR scheduler/shaper
  • Layer 2 Switching – 802.1Q VLAN switch with 4K MACs and 4K VLANs, RSTP and MSTP support, Hardware-based and software-based learning, etc…
  • Multicast – Layer 2, IGMP and MLD Snooping
  • Industrial Ethernet – Integrated timing: VeriTimeTM (1588v2) and SyncE support, Ethernet ring protection switching (ERPS)
  • Package – 17 mm × 17 mm CABGA package
  • Temperature Range – –40 °C to 125 °C

The processor can optionally be connected to a host CPU via PCIe or NPI interface, but the MIPS processor may be sufficiency for most applications.

Typical VSC7514 Gigabit Ethernet Switch Design

Free Electrons explains the patch series adds support to boot the platform up to a shell, with interrupts, pin-muxing, GPIOs and UARTs, but additional features will such as support for the switch fabric will be implemented later (switchdev driver).

More details about the processor can be found on Microsemi VSC7513 and VSC7514 product pages, with the product brief being available publicly, but datasheets, reference designs, models, and reports requiring registration with a valid company email address. I could not find a product based on BSC7514, except for VSC7514EV board platform based on “VSC7514 device, together with NX7102 and NX7124A DC-DC controllers, and MSMCJ12A and MSMCJ12CA transient voltage suppressor”.

Future Electronics FTM Board Club actually appears to offers a free samples of the evaluation kit to qualified applicants, but the rules are not clear, except they obviously expect some return on investment since they ask about the projected production volume & date.

Linux 4.14 Release – Main Changes, ARM & MIPS Architecture

November 13th, 2017 7 comments

Linus Torvalds has announced the release of Linux 4.14:

No surprises this week, although it is probably worth pointing out how the 0day robot has been getting even better (it was very useful before, but Fengguang has been working on making it even better, and reporting the problems it has found).

Sure, some of the new reports turned out to be just 0day doing things that just don’t work (ie KASAN with old gcc versions, but also doing things like loading old ISA drivers in situations that just don’t make sense – remember when you couldn’t even ask if the hardware existed or not, and just had to know), but even then it’s been all good.

The appended shortlog is obviously only for the (small) haul since rc8, and it really is tiny. Not very many commits, and they are small. The biggest thing that stands out in the diffstat is the “leaking_addresses” perl script, which is actually under active development, but I put the first version in for 4.14 just so that people could see that initial state and start looking at the end result and perhaps ask themselves “should my code make these kernel addresses visible to user space”.

The actual changes will hopefully start percolating into 4.15, with one notable likely early change (which has been discussed extensively on the list) being to just hash any “%p” addresses by default. We used to have strict modes that just zeroed the address out, but that was actually counter-productive, in that often people use the address as a “kernel object identity” for debugging (or for cross-correlation -think network sockets), and so just clearing the pointer value makes those kinds of uses pointless. But using a secure hash allows for those kinds of identity uses, while not actually leaking the address itself.

(Other situations where the actual address is relevant then need other approaches – we’ll be restricting /proc/kallsyms only to entities that actually need them etc etc).

Anyway, apart from that one script, the rest of it really is one-liners or “few-liners”.

The most noticeable last-minute change is probably that we had to revert the code that showed a good MHz value in /proc/cpuinfo even for the modern “CPU picks frequency dynamically” case. It worked fine, but it was much too expensive on machines with tens or hundreds of CPU cores. There’s a cunning plan, but it didn’t make 4.14, so we’ll get it working and then back-port.

Anything else is pretty esoteric, you can just read the changelog..

And with this, the merge window for 4.15 is obviously open. As mentioned in the late rc announcements, the extra week for rc8 means that now Thanksgiving week ends up happening during the second half of the merge window, and I’ll be off on a family vacation.

We’ll see how that goes.

I might decide that I’ll extend the merge window if I feel that I can’t be responsive enough.

Or maybe you guys won’t even notice, because I _will_ have my laptop and Internet access.

Or maybe I will just decide that 4.14 was a painful release, and any late stragglers for 4.15 are not worth _another_ painful release, and I’ll just say “tough luck, you were late to the merge window, and I felt more like being out in the sun than taking your second-week pull request”.

Because it really would be lovely to have a smaller and calmer release for 4.15.

Anyway, go out and test the new 4.14 release, that is slated to be the next LTS kernel – and start sending me pull request for the 4.15 merge window.

Linux 4.13 brought us new features such as support for non-blocking buffered I/O operations at the block level, AppArmor security module’s “domain labeling” code, kernel-based TLS implementation for better performance, and CIFS/SAMBA default change to v3.0 for better security, among many other changes.

Some newsworthy changes in Linux 4.14 include:

  • Bigger memory limits – x86-64 used to be limited by 4-level paging to 256 TiB of virtual address space and 64 TiB of physical address space. Some vendors already reached the limit with servers equipped with 64 TiB of memory, so support for 5-level paging has been introduced, increasing the limits to 128 PiB of virtual address space and 4 PiB of physical address space.
  • Added AMD Secure Memory Encryption – Secure Memory Encryption can be used to protect the contents of DRAM from physical attacks on the system. Read LWN article or AMD whitepaper for details.
  • Better kernel traces with the ORC unwinder – An “unwinder” is what prints the list of functions (aka. stack trace, callgraph, call stack…) that have been executed before reaching a determinate point of the code. The new unwinder is called ORC (Oops Rewind Capability), works more reliably than the current unwinder, and does not require adding code anywhere, hence having not effect on text size or runtime performance
  • Compression in Btrfs and Squashfszstd compresses at speeds close to lz4 at compression ratio comparable to lzma. Support for zstd compression had been added to both Btrfs and Squash. See benchmarks in commit messages for Btrsfs and Squashfs.
  • Zero-copy from user memory to sockets – The MSG_ZEROCOPY socket flag enables zero copy mechanism to common socket send calls. It is generally only effective at writes over around 10 KB. Checkout the documentation for more details.

Linux 4.14 will be a long term support kernel with 6-years of support, so it will be found in devices for the years to come. [Update: While Linux 4.4 will be supported for 6 years until February 2022, the plan is to support Linux 4.14 until January 2020, right from the horse’s mouth]

The ARM architecture has gone through many changes as per usual. Here’s a non-exhaustive list of changes:

  • Allwinner:
    • Allwinner A10s – HDMI DDC I2C Adapter,HDMI CEC support
    • Allwinner A10/A20 – CCU Clock-ng support
    • Allwinner A64 – SRAM controller driver
    • Allwinner A83T –  SD/MMC support, AXP813 PMIC,USB support
    • Allwinner H3 – I2S support
    • Allwinner R40 –  CCU sunxi-ng style clock driver support,pinctrl support
  • Rockchip
    • Clock driver – Fixes for RK3128, added RK3126 support within RK3128 driver
    • Pinctrl – Rockchip RK3128 subdriver
    • Power domains for Rockchip RK3366
    • New power key driver for Rockchip RK805 PMIC
    • PCI driver – Added Rockchip per-lane PHY support for better power management
    • SPI driver – Explicit support for Rockchip RV1108
    • DRM driver – Added dw_hdmi support for RK3399
    • Added ROCK64 board, RK3399 Sapphire module on Excavator carrier-board, and Theobroma Systems RK3399-Q7 SoM
    • Device tree changes:
      • pinctrl typos
      • keep-power-in-suspend in non-sdio nodes
      • removal of the deprecated num-slots property from dwmmc nodes.
      • RK3328 – support for spdif, io-domains and usb (including enablement of usb on the evaluation board)
      • RK3368 – support for spdif.
      • RK3399 – pcie changes, support for the mali gpu, a new power-domain, sdmmc support on the firefly board and dynamic-power-coefficients.
      • Removal of the deprectated num-slots property from all Rockchip dw-mmc nodes
      • RV1108 – support for sd-cards on the evaluation board
      • RK3288 – EVB gains support saradc and the adc-key, mali gpu enabled in some boards (fennec, evb, tinker).
      • RK3228/RK3229 – Support for efuse, sdmmc, sdio, io-domans and spdif; separate rk3229.dtsi;  The evaluation board also gets regulators, io-domains, emmc, tsadc keys
  • Amlogic
    • Clock driver – Added gxbb CEC32 and sd_emmc clocks, meson8b reset controller
    • SoC info driver – “Amlogic SoCs have a SoC information register for SoC type, package type and revision information. This patchs adds support for this register decoding and exposing with the SoC bus infrastructure”
    • Added Amlogic Meson AO CEC Controller driver
    • Device tree changes:
      • Updates for new MMC driver features/fixes, support for high-speed modes
      • Clock updates
      • Add GPIO line names to a few boards
      • Update clock controler for use as reset controller
  • Samsung
    • Clock driver – suspend fix for Samsung Exynos SoCs where we need to keep clks on across suspend
    • Samsung Exynos5420/5422/5800 audio fixes
    • S3C24xx platform – Cleanup from non-existent CONFIG entries, fix unmet NET dependency when H1940 bluetooth chip is selected
    • Pinctrl driver – Fix NULL pointer dereference on S3C24XX, fix invalid register offset used for external interrupts on Exynos5433, consolidate between drivers and bindings the defines for pin mux functions, minor code improvements
    • Samsung DTS ARM64 changes
      • Remove deprecated and unneeded properties from Exynos boards.
      • Implement proper (working) support for USB On-The-Go on Exynos5433 TM2/TM2E boards.
    • Samsung defconfig changes
      • Enable some drivers useful on our boards (communication: Bluetooth, WiFi, NFC, USB; codepages and crypto algorithms).
      • Enable debugging and lock testing options.
  • Qualcomm
    • IPQ8074 – Added SoC & HK01 board support, PCI driver
    • APQ8016 – Force USB host mode; jack detection support in ASoC
    • MSM8916 – Updated coresight nodes, added GPU, IOMMU, Venus video codec, and CEC clock nodes
    • MSM8996 – Add  support for USB, PCIE phy, RPM/GLink, and modem SMP2P; SMMU clks
    • Pinctrl driver – Qualcomm APQ8064 can handle general purpose clock muxing
    • NAND driver – Various fixes
    • Qualcomm GLINK SMEM driver – Fix memory leak, and unlock  on error
    • V4l – Update the Qualcomm Camera Subsystem driver document with a media controller pipeline graph diagram, VFE scale and crop modules support, and PIX interface and format conversion support.
    • Added DB820c PM8994 regulator node
    • Add PMI8994 gpios
    • Device tree changes:
      • Fixup XO, timer nodes, and pinctrl on IPQ4019
      • Add IPQ4019 RNG and wifi blocks
      • Update MSM8974 coresight node
      • Add IPQ8074 bindings
  • Mediatek
    • Pinctrl driver – Mediatek MT7623 PCIe mux data fixed up.
    • PCI Driver – Added MediaTek MT2712 and MT7622 support
    • Thermal driver – Added Mediatek thermal driver for mt2712
    • Added support for MediaTek MT2712 SoC and avaluation board
    • New board – Mediatek mt7623-based Banana Pi R2
  • Other new ARM hardware platforms and SoCs:
    • Broadcom – Stingray communication processor, Raspberry Pi Zero W
    • Marvell – ARMADA 8080 SoC
    • Microchip/Atmel – SAMA5D28 SoM1 EK
    • NXP – Toradex Apalis module + Apalis and Ixora carrier boards, Engicam GEAM6UL Starter Kit, Beckhoff CX9020 Embedded PC (i.MX53)
    • Renesas – R-Car D3 board (R8A77995)
    • Storlink/Cortina –
    • Texas Instruments – TI DT76x, TI AM335x Moxa UC-8100-ME-T open platform, TI AM57xx Beaglebone X15 Rev C
    • Uniphier – PXs3 STB SoC and development board
    • ZTE – ZX296718 PCBOX Board

MIPS had a huge changelog this time, summarized below:

  • CM – Rename mips_cm_base to mips_gcr_base; Specify register size when generating accessors; Use BIT/GENMASK for register fields, order & drop shifts; Add cluster & block args to mips_cm_lock_other()
  • CPC – Use common CPS accessor generation macros; Use BIT/GENMASK for register fields, order & drop shifts; Introduce register modify (set/clear/change) ; Use change_*, set_* & clear_* where appropriate, etc…
  • CPS – Read GIC_VL_IDENT directly, not via irqchip driver
  • DMA – Consolidate coherent and non-coherent dma_alloc code, Don’t use dma_cache_sync to implement fd_cacheflush
  • FPU emulation / FP assist code – Corner cases fixes such as NaN propagation and other special input values; Zero bits 32-63 of the result for a CLASS.D instruction; enhanced statics via debugfs; do not use bools for arithmetic. GCC 7.1 moans about this; correct user fault_addr type
  • Generic MIPS
    • Enhancement of stack backtraces
    • Cleanup from non-existing options
    • Handle non word sized instructions when examining frame
    • Fix detection and decoding of ADDIUSP instruction
    • Fix decoding of SWSP16 instruction
    • Refactor handling of stack pointer in get_frame_info
    • Remove unreachable code from force_fcr31_sig()
    • Many more fixes and cleanups
  • GIC – Introduce asm/mips-gic.h with accessor functions; Use new GIC accessor functions in mips-gic-timer; Remove counter access functions from irq-mips-gic.c; Remove gic_read_local_vp_id() from irq-mips-gic.c, etc…
  • microMIPS – Fix microMIPS stack unwinding on big endian systems
  • MIPS-GIC – SYNC after enabling GIC region
  • NUMA – Remove the unused parent_node() macro
  • R6 – Constify r2_decoder_tables; add accessor & bit definitions for GlobalNumber
  • SMP – Constify smp ops, allow boot_secondary SMP op to return errors
  • VDSO – Drop gic_get_usm_range() usage, avoid use of linux/irqchip/mips-gic.h
  • Platform changes
    • Alchemy – Add devboard machine type to cpuinfo, update cpu feature overrides,threaded carddetect irqs for devboards
    • AR7 – allow NULL clock for clk_get_rate
    • BCM63xx – Fix ENETDMA_6345_MAXBURST_REG offset, allow NULL clock for clk_get_rate
    • CI20 – Enable GPIO and RTC drivers in defconfig; add ethernet and fixed-regulator nodes to DTS
    • Generic platform
      • Move Boston and NI 169445 FIT image source to their own files
      • Include asm/bootinfo.h for plat_fdt_relocated()
      • Include asm/time.h for get_c0_*_int()
      • Include asm/bootinfo.h for plat_fdt_relocated()
      • Include asm/time.h for get_c0_*_int()
      • Allow filtering enabled boards by requirements
      • Don’t explicitly disable CONFIG_USB_SUPPORT
      • Bump default NR_CPUS to 16
    • JZ4700 – Probe the jz4740-rtc driver from devicetree
    • Lantiq – Drop check of boot select from the spi-falcon and lantiq-flash MTD drivers, access boot cause register in the watchdog driver through regmap, add device tree binding documentation for the watchdog driver, add docs for the RCU DT bindings, etc…
    • Loongson 2F – Allow NULL clock for clk_get_rate
    • Malta – Use new GIC accessor functions
    • NI 169445 – Add support for NI 169445 board; only include in 32r2el kernels
    • Octeon – Add support for watchdog of 78XX SOCs, add support for watchdog of CN68XX SOCs, expose support for mips32r1, mips32r2 and mips64r1, enable more drivers in config file, etc…
    • Omega2+ – New board, add support and defconfig
    • Pistachio – Enable Root FS on NFS in defconfig
    • Mediatek/Ralink – Add Mediatek MT7628A SoC, allow NULL clock for clk_get_rate, explicitly request exclusive reset control in the pci-mt7620 PCI driver.
    • SEAD3 – Only include in 32 bit kernels by default
    • VoCore board – Add VoCore as a vendor t0 dt-bindings, add defconfig file

For the complete details, you could check out the full Linux 4.14 changelog – with comments only – generated using git log v4.13..v4.14 --stat, or – kinder to your eyes – read kernelnewsbies’s Linux 4.14 changelog.

AMBE+2 Vocoder Promises High Voice Quality at Low (2.0 to 9.6 Kbps) Data Rates

October 24th, 2017 4 comments

Opus 1.2 open source audio codec was release a few months ago with the ability to deliver low power low high-quality audio bitrate for speech with bitrates as low as  12 Kbps. Digital Voice Systems (DVSI) claims to have gone even lower thanks to their AMBE+2 vocoder (Advanced MultiBand Excitation) providing high-quality speech at data rates from 2.0 to 9.6 kilobytes per second.

AMBE+2 vocoder is said to outperform the company’s previous generation AMBE+ Vocoder as well as the G.729 and G.726 vocoders, while operating at only 4.0 Kbps. The vocoder is suitable for mobile radio, secure voice, satellite communication, computer telephony, digital voice and storage applications

AMBE+2 Vocoder Chips

The solution can be integrated into product either using software licensing, or through Vocoder chips, and the company lists the following key benefits:

  • Maintains speech intelligibility and speaker recognition at rates as low as 2.0 kbps
  • Resistant to background noise and channel bit errors
  • Customizable data from 2.0 to 9.6 kbps
  • Uses fewer computations than CELP (Code-excited linear prediction) as used in G.729
  • Does not require the use of a residual signal
  • Eliminates fixed data-rate and codebook problems
  • Low complexity reduces implementation costs

You can listen to male and female samples at different bitrate for your own evaluation. DVIC claims the technology is already used in digital mobile radio and satellite telephony solutions such as Inmarsat, Iridium, DMR Communication PBX, etc…

AMBE-4020 HDK

AMBE+2 voice compression algorithm is available for DSPs and CPUs from Texas Instruments, Analog Devices, ARM, MIPS, Intel, NXP, and others, and runtime environments are available for Windows, Linux, Android, iOS, VxWorks, uC/OS, and other operating systems on request. The company can also provide hardware development kits (HDK) based either on AMBE-3000 or AMBE-4020 AMBE+2 chip, USB based products from a single channel dongle to a the 12 full-duplex channel USB-3012 product, as well as Net-2000 VCUs (Voice Connect Unit) that bridge analog speech I/O to an Ethernet network for example for VoIP or voice-monitoring / recording products (for the CIA? :)).

More details can be found on DVSI’s AMBE+2 product page.

Linux 4.13 Release – Main Changes, ARM & MIPS Architectures

September 4th, 2017 6 comments

Linus Torvalds has just announced the release of Linux 4.13 and a kidney stone…:

So last week was actually somewhat eventful, but not enough to push me to delay 4.13.

Most of the changes since rc7 are actually networking fixes, the bulk of them to various drivers. With apologies to the authors of said patches, they don’t look all that interesting (which is definitely exactly what you want just before a release). Details in the appended shortlog.

Note that the shortlog below is obviously only since rc7 – the _full_4.13 log is much too big to post and nobody sane would read it. So if you’re interested in all the rest of it, get the git tree and limit the logs to the files you are interested in if you crave details.

No, the excitement was largely in the mmu notification layer, where we had a fairly last-minute regression and some discussion about the problem. Lots of kudos to Jérôme Glisse for jumping on it, and implementing the fix.

What’s nice to see is that the regression pointed out a nasty and not very well documented (or thought out) part of the mmu notifiers, and the fix not only fixed the problem, but did so by cleaning up and documenting what the right behavior should be, and furthermore did so by getting rid of the problematic notifier and actually removing almost two hundred lines in the process.

I love seeing those kinds of fixes. Better, smaller, code.

The other excitement this week was purely personal, consisting of seven hours of pure agony due to a kidney stone. I’m all good, but it sure _felt_ a lot longer than seven hours, and I don’t even want to imagine what it is for people that have had the experience drag out for longer. Ugh.

Anyway, on to actual 4.13 issues.

While we’ve had lots of changes all over (4.13 was not particularly big, but even a “solidly average” release is not exactly small), one very _small_ change merits some extra attention, because it’s one of those very rare changes where we change behavior due to security issues, and where people may need to be aware of that behavior change when upgrading.

This time it’s not really a kernel security issue, but a generic protocol security issue.

The change in question is simply changing the default cifs behavior: instead of defaulting to SMB 1.0 (which you really should not use: just google for “stop using SMB1” or similar), the default cifs mount now defaults to a rather more modern SMB 3.0.

Now, because you shouldn’t have been using SMB1 anyway, this shouldn’t affect anybody. But guess what? It almost certainly does affect some people, because they blithely continued using SMB1 without really thinking about it.

And you certainly _can_ continue to use SMB1, but due to the default change, now you need to be *aware* of it. You may need to add an explicit “vers=1.0” to your mount options in /etc/fstab or similar if you *really* want SMB1.

But if the new default of 3.0 doesn’t work (because you still use a pterodactyl as a windshield wiper), before you go all the way back to the bad old days and use that “vers=1.0”, you might want to try “vers=2.1”. Because let’s face it, SMB1 is just bad, bad, bad.

Anyway, most people won’t notice at all. And the ones that do notice can check their current situation (just look at the output of “mount” and see if you have any cifs things there), and you really should update from the default even if you are *not* upgrading kernels.

Ok, enough about that. It was literally a two-liner change top defaults – out of the million or so lines of the full 4.13 patch changing real code.

Go get the new kernel,

Linus

Two months ago, Linux 4.12 was released with initial support for AMD Radeon RX Vega GPU, BFQ (Budget Fair Queuing) and Kyber block I/O schedulers, AnalyzeBoot tool for the kernel, “hybrid consistency model” implementation for live kernel patching, but disabled the Open Sound System, and removed AVR32 support, among many other changes.

Some interesting changes in Linux 4.13 – mostly based on LWN 4.13 Merge Window part 1 & part 2 – include:

  • Support for non-blocking buffered I/O operations added at the block level, which should also improve asynchronous I/O support when used with buffered I/O.
  • AppArmor security module’s “domain labeling” code has been merged into the mainline. It was maintained by Ubuntu out of tree previously.
  • Kernel-based TLS implementation that should deliver better performance for HTTPS, and other protocol relying on TLS.
  • CIFS/SAMBA now defaults to v3.0 instead of v1.0 due to security issues
  • File System Changes – EXT-4: support for to ~2 billion files per directory with largedir option, extended attributes up to 64KB, new deduplication feature; f2fs: supports disk quotas; overlayfs union: new “index directory” feature that makes copy-up operations work without breaking hard links.

Changes specific to ARM include:

  • Rockchip:
    • Added support for RV1108 SoC for camera applications
    • Rockchip IOMMU driver is now available on ARM64
    • PCIe – configure Rockchip MPS and reorganize + use normal register bank
    • Clock driver for Rockchip RK3128 SoC
    • Rockchip pinctrl driver now supports iomux-route switching for RK3228, RK3328 and RK3399
    • Sound driver – Support for Rockchip PDM controllers
    • Device tree
      • Added RK3399-Firefly SBC
      • Added ARM Mali GPU
      • Added cru
      • Added sdmmc, sdio, emmc nodes for Rockchip RK3328
  • Amlogic
    • Updated CEC EE clock support
    • Enabled clock controller for 32-bit Meson8
    • Device tree changes
      • Meson UARTs
      • new SPI controller driver
      • HDMI & CVBS for multiple boards
      • new pinctrl pins for SPI, HDMI CEC, PWM
      • Ethernet Link and Activity LEDs pin nodes
      • SAR ADC support for Meson8 & Meson8b
    • Defconfig changes – Meson SPICC enabled as module; IR core, decoders and Meson IR device enabled;
    • New boards & devices: NanoPi K2, Libre Computer SBC, R-Box Pro
  • Samsung
    • Clock driver updated for Samsung Exynos 5420 audio clocks, and converted code to clk_hw registration APIs
    • Pinctrl drivers split per ARMv7 and ARMv8 since there’s no need to compile everything on each of them
    • ARM DT updates:
      • Add HDMI CEC to Exynos5 SoCs + needed property for CEC on Odroid U3
      • Fix reset GPIO polarity on Rinato
      • Minor cleanups and readability improvements.
    • ARM64 DT updates:
      • Remove unneeded TE interrupt gpio property
    • Defconfig changes – Some cleanups, enabled Exynos PRNG along with user-space crypto API.
  • Qualcomm
    • Clock & pinctrl drivers for Qualcomm IPQ8074
    • Add debug UART addresses for IPQ4019
    • Improve QCOM SMSM error handling
    • Defconfig
      • Enable HWSPINLOCK & RPMSG_QCOM_SMD to get some Qualcomm boards to work out of the box/again
      • Enable IPQ4019 clock and pinctrl
    • Mailbox – New controller driver for Qualcomm’s APCS IPC
    • RPMsg – Qualcomm GLINK protocol driver and DeviceTree-based modalias support, as well as a number of smaller fixes
    • Qualcomm Device Tree Changes
      • Fix IPQ4019 i2c0 node
      •  Add GSBI7 on IPQ8064
      • Add misc APQ8060 devices
      • Fixup USB related devices on APQ8064 and MSM8974
    • Qualcomm ARM64 Updates for v4.12
      • Fix APQ8016 SBC WLAN LED
      • Add MSM8996 CPU node
      • Add MSM8992 SMEM and fixed regulator
      • Fixup MSM8916 USB support
  • Mediatek
    • CPU clks for Mediatek MT8173/MT2701/MT7623 SoCs
    • Pinctrl – Serious code size cut for MT7623
    • Mediatek “scpsys” system controller support for MT6797
    • Device tree
      • Added support for MT6797 (Helio X20) mobile SoC and evaluation board
      • Extended MT7623 support significantly
      • Added MT2701 i2c device & JPEG decoder nodes
  • Other new ARM hardware platforms and SoCs:
    • STM32 – stm32h743-disco, stm32f746-disco, and stm32f769-disco boards; Drivers for digital audio interfaces, S/PDIF receiver, digital camera interfaces, HDMI CEC, watchdog timer
    • NXP – Gateworks Ventana GW5600 SBC;  Technexion Pico i.MX7D board; i.MX5/6 image processing units & camera sensor interfaces
    • Realtek – Initial support for Realtek RTD1295 SoC and Zidoo X9S set-top-box
    • Actions Semi – Initial support for Actions Semi S900 / S500, and corresponding LeMaker Guitar & Bubblegum-96 SBCs
    • Renesas – Salvator-XS and H3ULCB automotive development systems; GR-Peach board, iWave G20D-Q7 System-on-Module plus
    • Socionext- Support for Uniphier board support for LD11-global and LD20-global
    • Broadcom – Stingray communication processor and two reference boards;
    • Marvell – Linksys WRT3200ACM router
    • Texas Instruments – BeagleBone Blue
    • Microchip / Atmel – MMU-less ARM Cortex-M7 SoCs (SAME70/V71/S70/V70)

Some of the changes specific to MIPS include:

  • Boston platform support – Document DT bindings; Add CLK driver for board clocks
  • CM – Avoid per-core locking with CM3 & higher; WARN on attempt to lock invalid VP, not BUG
  • CPS – Select CONFIG_SYS_SUPPORTS_SCHED_SMT for MIPSr6; Prevent multi-core with dcache aliasing; Handle cores not powering down more gracefully; Handle spurious VP starts more gracefully
  • DSP – Add lwx & lhx missaligned access support
  • eBPF – Add MIPS support along with many supporting change to add the required infrastructure
  • Generic arch code:
    • Misc sysmips MIPS_ATOMIC_SET fixes
    • Drop duplicate HAVE_SYSCALL_TRACEPOINTS
    • Negate error syscall return in trace
    • Correct forced syscall errors
    • Traced negative syscalls should return -ENOSYS
    • Allow samples/bpf/tracex5 to access syscall arguments for sane
      traces
    • Cleanup from old Kconfig options in defconfigs
    • Fix PREF instruction usage by memcpy for MIPS R6
    • Fix various special cases in the FPU eulation
    • Fix some special cases in MIPS16e2 support
    • Fix MIPS I ISA /proc/cpuinfo reporting
    • Sort MIPS Kconfig alphabetically
    • Fix minimum alignment requirement of IRQ stack as required by ABI / GCC
    • Fix special cases in the module loader
    • Perform post-DMA cache flushes on systems with MAARs
    • Probe the I6500 CPU
    • Cleanup cmpxchg and add support for 1 and 2 byte operations
    • Use queued read/write locks (qrwlock)
    • Use queued spinlocks (qspinlock)
    • Add CPU shared FTLB feature detection
    • Handle tlbex-tlbp race condition
    • Allow storing pgd in C0_CONTEXT for MIPSr6
    • Use current_cpu_type() in m4kc_tlbp_war()
    • Support Boston in the generic kernel
  • Generic platform:
    • yamon-dt: Pull YAMON DT shim code out of SEAD-3 board;  Support > 256MB of RAM;  Use serial* rather than uart* aliases
    • Abstract FDT fixup application
    • Set RTC_ALWAYS_BCD to 0
    • Add a MAINTAINERS entry
  • core kernel – qspinlock.c: include linux/prefetch.h
  • Add support for Loongson 3
  • Perf – Add I6500 support
  • SEAD-3 – Remove GIC timer from DT; set interrupt-parent per-device, not at root node; fix GIC interrupt specifiers
  • SMP – Skip IPI setup if we only have a single CPU
  • VDSO – Make comment match reality; improvements to time code in VDSO”
  • Various fixes:
    • compressed boot: Ignore a generated .c file
    • VDSO: Fix a register clobber list
    • DECstation: Fix an int-handler.S CPU_DADDI_WORKAROUNDS regression
    • Octeon: Fix recent cleanups that cleaned away a bit too much thus breaking the arch side of the EDAC and USB drivers.
    • uasm: Fix duplicate const in “const struct foo const bar[]” which GCC 7.1 no longer accepts.
    • Fix race on setting and getting cpu_online_mask
    • Fix preemption issue. To do so cleanly introduce macro to get the size of L3 cache line.
    • Revert include cleanup that sometimes results in build error
    • MicroMIPS uses bit 0 of the PC to indicate microMIPS mode. Make sure this bit is set for kernel entry as well.
    • Prevent configuring the kernel for both microMIPS and MT. There are no such CPUs currently and thus the combination is unsupported and results in build errors.
    • ralink: mt7620: Add missing header

You can read the full Linux 4.13 changelog – with comments only – generated using git log v4.12..v4.13 --stat for the full details, and eventually kernelnewsbies’s Linux 4.13 changelog will be updated with an extensive list of chances.

Linux 4.12 Release – Main Changes, ARM & MIPS Architectures

July 3rd, 2017 6 comments

Linus Torvalds has just released Linux 4.12:

Things were quite calm this week, so I really didn’t have any real reason to delay the 4.12 release.

As mentioned over the various rc announcements, 4.12 is one of the bigger releases historically, and I think only 4.9 ends up having had more commits. And 4.9 was big at least partly because Greg announced it was an LTS kernel. But 4.12 is just plain big.

There’s also nothing particularly odd going on in the tree – it’s all just normal development, just more of it that usual. The shortlog below is obviously just the minor changes since rc7 – the whole 4.12 shortlog is much too large to post.

In the diff department, 4.12 is also very big, although the reason there isn’t just that there’s a lot of development, we have the added bulk of a lot of new  header files for the AMD Vega support. That’s almost exactly half the bulk of the patch, in fact, and partly as a result of that the driver side dominates  everything else at 85+% of the release patch (it’s not all the AMD Vega headers – the Intel IPU driver in staging is big too, for example).

But aside from just being large, and a blip in size around rc5, the rc’s stabilized pretty nicely, so I think we’re all good to go.

Go out and use it.

Oh, and obviously this means that the merge window for 4.13 is thus open. You know the drill.

Linus

Linux 4.11 provided various improvements for Intel Bay Trail and Cherry Trail targets, OPAL drive support, pluggable IO schedulers framework, and plenty of ARM and MIPS changes.

Some of the most notable changes in Linux 4.12 include:

  • Initial AMD Radeon RX Vega GPU support
  • BFQ (Budget Fair Queuing) and Kyber block I/O schedulers have been merged, meaning the kernel now has two multiqueue I/O schedulers suitable for various use cases that should improve the responsiveness of systems.
  • Added AnalyzeBoot tool to create a timeline of the kernel’s bootstrap process in HTML format.
  • Implemented “hybrid consistency model” for live kernel patching in order to enable the applications patchsets that change function or data semantics. See here for details.
  • Build of Open Sound System (OSS) audio drivers has been disabled, and will likely be removed in future Linux releases
  • AVR32 support has been removed

Some of the bug fixes and improvements for the ARM architecture include:

  • Allwinner:
    • Allwinner H3 –  USB OTG support
    • Allwinner H5 – pinctrl driver, CCU (sunxi-ng) driver, USB OTG support
    • Allwinner A31/H3 SPI driver – Support transfers larger than 64 bytes
    • AXP PMICs – AXP803 basic support, ACIN Power Supply driver, ADC IIO driver, Battery Power Supply driver
    • Added support for: FriendlyARM NanoPi NEO Air, Xunlong Orange Pi PC 2
  • Rockchip:
    • Updates to Rockchip clock drivers
    • Modification for Rockchip PCI driver
    • RK3328 pinctrl driver
    • Sound support for Radxa Rock2
    • USB 3.0 controllers for RK3399
    • Various changes for RK3368 (dma, i2s, disable mailbox per default, mmc-resets)
    • Added Samsung Chromebook Plus (Kevin) and the other RK3399 “Gru family” of ChromeOS devices.
    • Added Rockchip RK3288 support for ASUS Tinker board, Phytec phyCORE-RK3288 SoM and RDK; added Rockchip RK3328 evaluation board
  • Amlogic
    • New clock drivers for I2S and SPDIF audio, and Mali GPU
    • DRM/HDMI support for Amlogic GX SoC
    • Add GPIO reset to Ethernet driver
    • Enable PWM LEDs and LEDs default-on trigger
    • New boards: Khadas VIM, HwaCom AmazeTV
  • Samsung
    • Split building of the PMU driver between ARMv7 and ARMv8
    • Various Samsung pincrl drivers updates
    • ARM DT updates:
      • Enhancements to PCIe nodes on Exynos5440.
      • Fix thermal values on some of Exynos5420 boards like Odroid XU3.
      • Add proper clock frequency properties to DSI nodes.
      • Fix watchdog reset on Exynos4412.
      • Fix watchdog infinite interrupt in soft mode on Exynos4210, Exynos5440, S3C64xx and S5Pv210.
      • Enable watchdog on Exynos4 and S3C SoCs.
      • Enable DYNAMIC_DEBUG because it is useful for debugging
      • Increase CMA memory region to allow handling H.264 1080p videos.
    • ARM64 DT updates:
      • Exynos power management drivers support now ARMv8 SoC – Exynos5433 – so select them in ARCH_EXYNOS
      • Enable few Exynos drivers (video, DRM and LPASS drivers) for supported ARMv8 SoCs (Exynos5433 and Exynos7)
      • Add IR, touchscreen and panel to TM2/TM2E boards
      • Add proper clock frequency properties to DSI nodes
  • Qualcomm
    • Enable options needed for QCom DB410c board in defconfig
    • Added new PHY driver for Qualcomm’s QMP PHY (used by PCIe, UFS and USB), and Qualcomm’s QUSB2 PHY
    • Qualcomm Device Tree Changes
      • Add Coresight components for MSM8974
      • Fixup MSM8974 ADSP XO clk and add RPMCC node
      • Fix typo in APQ8060
      • Add SDCs on MSM8660
      • Revert MSM8974 USB gadget change due to issues
      • Add SCM APIs for restore_sec_cfg and iommu secure page table
      • Enable QCOM remoteproc and related drivers
    • Qualcomm ARM64 Updates for v4.12
      • Fixup MSM8996 SMP2P and add ADSP PIL / SLPI SMP2P node
      • Replace PMU compatible w/ A53 specific one
      • Add APQ8016 ramoops
      • Update MSM8916 hexagon node
      • Add PM8994 RTC
  • Mediatek
    • New clock drivers for MT6797, and hi655x PMIC
    • Fix Mediatek SPI (flash) controller driver
    • Add DRM driver and thermal driver for Mediatek MT2701 SoC
    • Add support for MT8176 and MT817x to the Mediatek cpufreq driver
    • Add driver for hardware random generator on MT7623 SoC
    • Add DSA support to Mediatek MT7530 7-port GbE switch
    • Add v4l2 driver for Mediatek JPEG Decoder
  • Misc
    • Added ARM TEE framework to support trusted execution environments on processors with that capability (e.g. ARM CPUs with TrustZone)
    • ARM64 architecture now has kernel crash-dump functionality.
  • Other new ARM hardware platforms and SoCs:
    • NXP – NXP/Freescale LS2088A and LKS1088A SoC, I2SE’s i.MX28 Duckbill-2 boards, Gateworks Ventana i.MX6 GW5903/GW5904, Zodiac Inflight Innovations RDU2 board, Engicam i.CoreM6 Quad/Dual OpenFrame modules, Boundary Device i.MX6 Quad Plus SoM.
    • Nvidia – Expanded support for Tegra186 and Jetson TX2
    • Spreadtrum – Device tree for SP9860G
    • Marvell – Crypto engine for Armada 8040/7040
    • Hisilicon – Device tree bindings for Hi3798CV200 and Poplar board
    • Texas Instruments – Motorola Droid4 (OMAP processor)
    • ST Micro – STM32H743 Cortex-M7 MCU support
    • Various Linksys platforms,  Synology DS116

The MIPS architecture also had its share of changes:

  • Fix misordered instructions in assembly code making kenel startup via UHB unreliable.
  • Fix special case of MADDF and MADDF emulation.
  • Fix alignment issue in address calculation in pm-cps on 64 bit.
  • Fix IRQ tracing & lockdep when rescheduling
  • Systems with MAARs require post-DMA cache flushes.
  • Fix build with KVM, DYNAMIC_DEBUG and JUMP_LABEL
  • Three highmem fixes:
    • Fixed mapping initialization
    • Adjust the pkmap location
    • Ensure we use at most one page for PTEs
  • Fix makefile dependencies for .its targets to depend on vmlinux
  • Fix reversed condition in BNEZC and JIALC software branch emulation
  • Only flush initialized flush_insn_slot to avoid NULL pointer dereference
  • perf: Remove incorrect odd/even counter handling for I6400
  • ftrace: Fix init functions tracing
  • math-emu – Add missing clearing of BLTZALL and BGEZALL emulation counters; Fix BC1EQZ and BC1NEZ condition handling; Fix BLEZL and BGTZL identification
  • BPF – Add JIT support for SKF_AD_HATYPE;  use unsigned access for unsigned SKB fields; quit clobbering callee saved registers in JIT code; fix multiple problems in JIT skb access helpers
  • Loongson 3 – Select MIPS_L1_CACHE_SHIFT_6
  • Octeon – Remove vestiges of CONFIG_CAVIUM_OCTEON_2ND_KERNEL, as well as PCIERCX, L2C  & SLI types and macros;  Fix compile error when USB is not enabled; Clean up platform code.
  • SNI – Remove recursive include of cpu-feature-overrides.h
  • Sibyte – Export symbol periph_rev to sb1250-mac network driver; fix Kconfig warning.
  • Generic platform – Enable Root FS on NFS in generic_defconfig
  • SMP-MT – Use CPU interrupt controller IPI IRQ domain support
  • UASM – Add support for LHU for uasm; remove needless ISA abstraction
  • mm – Add 48-bit VA space and 4-level page tables for 4K pages.
  • PCI – Add controllers before the specified head
  • irqchip driver for MIPS CPU – Replace magic 0x100 with IE_SW0; prepare for non-legacy IRQ domains;  introduce IPI IRQ domain support
  • NET – sb1250-mac: Add missing MODULE_LICENSE()
  • CPUFREQ – Loongson2: drop set_cpus_allowed_ptr()
  • Other misc changes, and code cleanups…

For further details, you could read the full Linux 4.12 changelog – with comments only – generated using git log v4.11..v4.12 --stat. You may also want to ead kernelnewsbies’s Linux 4.12 changelog once it is up.

Linux 4.11 Release – Main Changes, ARM & MIPS Architecture

May 1st, 2017 9 comments

Linus Torvalds has just released Linux 4.11:

So after that extra week with an rc8, things were pretty calm, and I’m much happier releasing a final 4.11 now.

We still had various smaller fixes the last week, but nothing that made me go “hmm..”. Shortlog appended for people who want to peruse the details, but it’s a mix all over, with about half being drivers (networking dominates, but some sound fixlets too), with the rest being some arch updates, generic networking, and filesystem (nfs[d]) fixes. But it’s all really small, which is what I like to see the last week of the release cycle.

And with this, the merge window is obviously open. I already have two pull request for 4.12 in my inbox, I expect that overnight I’ll get a lot more.

Linux 4.10 added Virtual GPU support, perf c2c’ tool, improved writeback management, a faster initial WiFi connection (802.11ai), and more.

Some notable changes for Linux 4.11 include:

  • Pluggable IO schedulers framework in the multiqueue block layer – The Linux block layer is know to have different IO schedulers (deadline, cfq, noop, etc). In Linux 3.13, the block layer added a new multiqueue design that performs better with modern hardware (eg. SSD, NVM). However, this new multiqueue design didn’t include support for pluggable IO schedulers. This release solves that problem with the merge of a multiqueue-ready IO scheduling framework. A port of the deadline scheduler has also been added (more IO schedulers will be added in the future)
  • Support for OPAL drives – The Opal Storage Specification is a set of specifications for features of data storage devices that enhance their security. For example, it defines a way of encrypting the stored data so that an unauthorized person who gains possession of the device cannot see the data. This release adds Linux support for Opal nvme enabled controllers. It enables users to setup/unlock/lock locking ranges for SED devices using the Opal protocol.
  • Support for the SMC-R protocol (RFC7609) – This release includes the initial part of the implementation of the “Shared Memory Communications-RDMA” (SMC-R) protocol as defined in RFC7609. SMC-R is an IBM protocol that provides RDMA capabilities over RoCE transparently for applications exploiting TCP sockets. While SMC-R does not aim to replace TCP, it taps a wealth of existing data center TCP socket applications to become more efficient without the need for rewriting them. A new socket protocol family PF_SMC is introduced. There are no changes required to applications using the sockets API for TCP stream sockets other than the specification of the new socket family AF_SMC. Unmodified applications can be used by means of a dynamic preload shared library.
  • Intel Bay Trail (and Cherry Trail) improvements – Intel HDMI audio support, patchsets for AXP288 PMIC, I2C driver, and C-state support to avoid freezes.

New features and bug fixes specific to ARM architecture:

  • Allwinner:
    • Allwinner A23 –  Audio codec device tree changes
    • Allwinner A31 – SPDIF output support
    • Allwinner A33 – cpufreq support, Audio codec support
    • Allwinner A64 – MMC Support, USB support
    • Allwinner A80 – sunxi-ng style clock support
    • Allwinner H2+ – New SoC variant, similar to H3 (mostly with a different, lower end VPU)
    • Allwinner H3 – Audio codec device tree changes, SPDIF output support
    • Allwinner V3s – New SoC support, USB PHY driver, pinctrl driver, CCU driver
    • New boards & devices – LicheePi One, Orange Pi Zero, LicheePi Zero, Banana Pi M64, Beelink X2
  • Rockchip:
    • Renamed RK1108 to RV1108
    • Clock drivers – New driver for RK3328, and non-critical fixes and clk id additions
    • Tweaks for Rockchip GRF (General Register File) usage (kitchensink misc register range on the SoCs)
    • thermal, eDP, pinctrl enhancements
    • PCI – add Rockchip system power management support
    • Add machine driver for RK3288 boards that use analog/HDMI audio
  • Amlogic
    • Add support for Amlogic Meson I2C controller
    • Add SAR ADC driver
    • Add ADC laddered keys to meson-gxbb-p200 board
    • Add configurable RGMII TX delay to fix/improve Gigabit Ethernet performance on some boards
    • Add pinctrl nodes for HDMI HPD and DDC pins modes for Amlogic Meson GXL and GXBB SoCs
    • New hardware: WeTek TV boxes
  • Samsung
    • Add USB 3.0 support in Exynos 5433
    • Removed clock driver for Samsung Exynos4415 SoCs
    • TM2 touchkey, Exynos5433 HDMI and power management improvements
    • Added Samsung Exynos4412 Prime SoC
    • Removed Samsung Exynos 4412 SoC
    • Added audio on Odroid-X board
    • Samsung Device Tree updates:
      • Add necessary initial configuration for clocks of display subsystem. Till now it worked mostly thanks to bootloader.
      • Use macro definitions instead of hard-coded values for pinctrl on Exynos7.
      • Enable USB 3.0 (DWC3) on Exynos7.
      • Add descriptive user-friendly label names for power domains. This  makes debugging easier
      • Use proper drive strengths on Exynos7.
      • Use bigger reserved memory region for Multi Format Codec on all Exynos chipsets so it could decode FullHD easily
      • Cleanup from old MACHs in s5pv210.
      • Enable IP_MULTICAST for libnss-mdns
      • Add bus frequency and voltage scalling on Exynos5433 TM2 device (along with  necessary bus nodes and Platform Performance Monitoring Unit on Exynos5433).
      • Use macros for pinctrl settings on Exynos5433.
      • Create common DTSI between Exynos5433 TM2E and TM2E.
  • Qualcomm
    • Added coresight, gyro/accelerometer, hdmi to Qualcomm MSM8916 SoC
    • Clock drivers – Updates to Qualcomm IPQ4019 CPU clks and general PLL support, Qualcomm MSM8974 RPM
    • Errata workarounds for Qualcomm’s Falkor CPU
    • Qualcomm L2 Cache PMU driver
    • Qualcomm SMCCC firmware quirk
    • Qualcomm PM8xxx ADC bindings
    • Add USB HSIC and HS phy driver for Qualcomm’s SoC
    • Device Tree Changes:
      • Add Coresight components for APQ8064
      • Fixup PM8058 nodes
      • Add APQ8060 gyro and accel support
      • Enable SD600 HDMI support
      • Add RIVA supprort for Sony Yuga and SD600
      • Add PM8821 support
      • Add MSM8974 ADSP, USB gadget, SMD, and SMP2P support
      • Fix IPQ8064 clock frequencies
      • Enable APQ8060 Dragonboard related devices
      • Add Vol+ support for DB820C and APQ8016
      • Add HDMI audio support for APQ8016
      • Fix DB820C GPIO pinctrl name
      • etc…
  • Mediatek
    • Mediatek MT2701 – Added clocks, iommu, spi, nand, adc, thermal
    • Added Mediatek MT8173 thermal
    • Added Mediatek IR remote receiver
  • GPU – Add Mali Utgard bindings;  the ARM Mali Utgard GPU family is embedded into a number of SoCs from Allwinner, Amlogic, Mediatek or Rockchip
  • Other new ARM hardware platforms and SoCs:
    • Marvell – SolidRun MACCHIATOBin board, Marvell Prestera DX packet processors
    • Broadcom – BCM958712DxXMC NorthStar2 reference board
    • HiSilicon – Kirin960/Hi3660 SoC, and HiKey960 development board
    • NXP – LS1012a SoC with three reference board; SoMs: Is.IoT MX6UL, SavageBoard, Engicam i.Core; Liebherr (LWN) monitor 6;
    • Microchip/Atmel – SAMA5d36ek Reference platform
    • Texas Instruments – Beaglebone Green Wireless and Black Wireless, phyCORE-AM335x System on Module
    • Lego Mindstorms EV3
    • “Romulus” baseboard management controller for OpenPower
    • Axentia TSE-850 Data Radio Channel (DARC) encoder
    • Luxul XAP-1410 and XWR-1200 wireless access points
    • New revision of “vf610-zii” Zodiac Inflight Innovations board

Finally here are some of the change made to MIPS architecture in Linux 4.11:

  • PCI: Register controllers in the right order to avoid a PCI error
  • KGDB: Use kernel context for sleeping threads
  • smp-cps: Fix potentially uninitialised value of core
  • KASLR: Fix build
  • ELF: Fix BUG() warning in arch_check_elf
  • Fix modversioning of _mcount symbol
  • fix out-of-tree defconfig target builds
  • cevt-r4k: Fix out-of-bounds array access
  • perf: fix deadlock
  • Malta: Fix i8259 irqchip setup
  • Lantiq – Fix adding xbar resoures causing a panic
  • Loongson3
    • Some Loongson 3A don’t identify themselves as having an FTLB so hardwire that knowledge into CPU probing.
    • Handle Loongson 3 TLB peculiarities in the fast path of the RDHWR  emulation.
    • Fix invalid FTLB entries with huge page on VTLB+FTLB platforms
    • Add missing calculation of S-cache and V-cache cache-way size
  • Ralink – Fix typos in rt3883 pinctrl data
  • Generic:
    • Force o32 fp64 support on 32bit MIPS64r6 kernels
    • Yet another build fix after the linux/sched.h changes
    • Wire up statx system call
    • Fix stack unwinding after introduction of IRQ stack
    • Fix spinlock code to build even for microMIPS with recent binutils
  • SMP-CPS: Fix retrieval of VPE mask on big endian CPUs”

Read Linux 4.11 changelog – with comments only – generated using git log v4.10..v4.11 --stat, to get the full list of changes. You may also want to checkout Linux 4.11 changelog on kernelnewbies.org.

Azul Systems’ Zulu Embedded is a Build of OpenJDK for ARM, MIPS, PowerPC, and x86 Compliant with Java SE standard

April 6th, 2017 3 comments

Yesterday as I wrote about the Embedded Systems Conference 2017 schedule I came across a potentially interesting talk entitled “Building A Brain With Raspberry Pi and Zulu Embedded JVM” by Azul Systems that will explain how to build a brain emulator using a cluster of Raspberry Pi boards. I wanted to find more about it, but I have not been able to find any details about the project/demo at this stage. However, I could still learn a bit more about Zulu Embedded, which is said to be an open source Java Virtual Machine based on OpenJDK, compliant with Java SE standard, working on 32-bit & 64-bit ARM & x86, MIPS, and PowerPC, as well as  multiple operating systems.

Some of the key features of Zulu Embedded include:

  • Java Support – Java 6, 7, 8, and 9 when available
  • Java Configurations – Headless, headful, or compact Java Compact Profiles
  • Hardware – ARMv7 and 32-bit ARMv8, ARM64, Intel/AMD x86, 32-bit and 64-bit, MIPS, and PowerPC
  • Platforms & Operating Systems
    • Linux 32/64-bit – RHEL 5.2+, 6 & 7 or later, SLES 11 sp1/2/3, 12, CentOS 5.2+, 6 & 7 or later, Ubuntu 10.04, 12.04, 14.04 & 16.04, Debian Wheezy & Jessie, Wind River Linux, and Oracle Linux
    • Windows 32/64-bit – Windows 7, 8, 8.1, 10/IoT/Mobile, 2008 R2, 2012, 2012R2, Nano
    • Mac OS X
    • Hypervisors – VMware, Hyper-V, KVM
    • Cloud – Azure, AWS, Google, Snappy, Docker
  • Packages – ZIP, MSI and DEB are available. Custom packages on request.
  • Memory Footprint – 11 MB to 250+ MB

Some of the advantage of Zulu Embedded is that it is 100% open source released under GPLv2 with Classpath Exception (I could not find the source code however), and fully certified and compliant with OpenJDK community technology compatibility kit (TCK) from Oracle.

Zulu Embedded is free to download for ARM Linux 32-bit (hard and soft float), and x86 Windows & Linux 64-bit, as well as x86 Windows 10 IoT Core 32-bit for MinnowBoard MAX. You’ll need to contact the company for other configurations.

It’s been used in program such as openHab 2.0, which replaced Oracle JDK with Zulu Embedded JDK, since it can be freely redistributed (no licenses required), and performance and stability feels exactly the same according to comments on Github. One person explained how to install it on the Raspberry Pi board (note: early access program is not needed anymore, since the binary has been publicly released), and the installation procedure is just the same as with OpenJDK.

You can visit Zulu Embedded product page for more information.