Support for the RaspberryPi 3 B Plus board

Bug #1784025 reported by Paolo Pisati
44
This bug affects 6 people
Affects Status Importance Assigned to Milestone
linux-raspi2 (Ubuntu)
Invalid
Undecided
Unassigned
Xenial
Fix Released
Undecided
Unassigned

Bug Description

Impact:

The RaspberryPi 3 B Plus[1] is the latest addition in the family of RaspberryPi boards, and this patchset includes all the necessary bits (dts, lan driver and wifi driver) to enable this board in our 4.4 Xenial raspi2 kernel.

How to test:

Build this kernel and boot a rpi3bplus with it: the board should boot fine, and ethernet lan and wifi should work.

Regression potential:

To ease the regression analysis, we can logically split the patchset in 3 different set of patches.

1) the dts files (patches 0001 to 0006)

Patch 0001 contains the pi3bplus board dts files + the lan dts fragment - these are new files, and don't modify any other dts in the tree.
Patches 0002 to 0005 are the fixup modifcation to make the above dts file work in our 4.4 kernel.
Patch 006 is a fix for the bcm2708_common, a device tree used in every rpi board dtb - it's a small fix, and the same modification is present in the 4.9+ Raspberry respository too (see https://github.com/raspberrypi/linux/blob/rpi-4.9.y/arch/arm/boot/dts/bcm283x.dtsi aroud lines 353-354) - unfortunately they squashed that fix, so i couldn't pick the specific commit.

The only regression potential here is patch 0006, but since it's a small fix, and it's even carried upstream, i mark it as low.

2) the lan driver (patches 0008 to 0018)

The rpi3bplus comes with a brand new gigabit capable ethernet adapter, driven by the lan 7515 chip, a chip mainly used in usb to ethernet dongle. Unfortunately, the lan7515 driver shipped in our Xenial tree was not working: the driver would attach, the interface shows up, packets could be sent, but the host os never received any input packets - sniffing the cable confirmed that the chip was generating traffic and receiving reply packets too.

After some debugging i found that no interrupt was generated once packet arrived, and that was due to upstream 23374573a899528a4b10d76276646f69b7ae1572 "lan78xx: Correctly indicate invalid OTP", reverting this would bring my ethernet back to life (patch 0008).

"lan78xx: Correctly indicate invalid OTP" originated around 4.17, way after a complete overhaul of the phy code wad done for all the usbnet driver - after more debugging i found that the 4.4 driver ships a workaround to enable phy interrupts (see lan78xx_open()), so i'm thinking there's some correlation between the phy overhaul and this commit, but without the datasheet i can't tell what those bits in that register are actually doing - for now i just reverted this patch locally and made the driver work again.

All the other patches (0009 to 0018) are backports of features added to the driver by the Raspberry Foundation to make the driver better integrate in a dts environment.

There's literally no regression potential here, since the driver was not working in the first place, (and i actually made it work again).

3) the wifi driver (patches 0019 to 0026)

The wifi chip used in the rpi3bplus is very different from the one used in the original rpi3 board (Broadcom BCM43438 vs Cypress CYW43455), but it uses the same driver and i had to backport several fixes from upstream to make it work: all the commits fix isolated bugs, and can be easily reviewed.

There's some regression potential here, but all code comes from upstream fixes, so i mark it as low.

When possible i picked up the upstream version of the same patch (instead of the one carried in the RaspberryPi branch - https://github.com/raspberrypi/linux rpi-4.9.y), and except for these 6 commits:

"BCM270X_DT: Add Pi 3+ dts files"
"lan78xx: Enable LEDs if no valid EEPROM or OTP"
"lan78xx: Read initial EEE status from DT"
"lan78xx: Change LEDs to include 10Mb activity"
"lan78xx: Ignore DT MAC address if already valid"
"lan78xx: Move enabling of EEE into PHY init code"

all the remaining patches (20 out of 26) came from upstream - patches marked with 'cherry-picked...' are clean cherry picks, while the one with
'backported...' required a varying degree of rework to make it apply (and work).

I'm proposing this for inclusion in the Xenial raspi2 kernel.

1: https://www.raspberrypi.org/blog/raspberry-pi-3-model-bplus-sale-now-35/

Paolo Pisati (p-pisati)
description: updated
Paolo Pisati (p-pisati)
description: updated
Paolo Pisati (p-pisati)
description: updated
description: updated
Paolo Pisati (p-pisati)
description: updated
description: updated
Revision history for this message
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in linux-raspi2 (Ubuntu):
status: New → Confirmed
Changed in linux-raspi2 (Ubuntu Xenial):
status: New → In Progress
Changed in linux-raspi2 (Ubuntu Xenial):
status: In Progress → Fix Committed
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (3.6 KiB)

This bug was fixed in the package linux-raspi2 - 4.4.0-1096.104

---------------
linux-raspi2 (4.4.0-1096.104) xenial; urgency=medium

  * linux-raspi2: 4.4.0-1096.104 -proposed tracker (LP: #1788772)

  * snapcraft.yaml: Parts cannot contain both 'install' and 'override-*'
    keywords. (LP: #1785647)
    - snapcraft.yaml: convert prepare, build and install to override-build

  * Support for the RaspberryPi 3 B Plus board (LP: #1784025)
    - BCM270X_DT: Add Pi 3+ dts files
    - SAUCE: dts: remove i2c_dsi reference (4.9+ only)
    - SAUCE: dts: use 0 instead of GPIO_ACTIVE_LOW
    - SAUCE: dts: remove the hdmi node since it's part of the vc4 overlay
    - SAUCE: dts: use the virtgpio driver
    - SAUCE: fix address & size of reg cell for usb1
    - modules: remove lan78xx and microchip phy check
    - SAUCE: Revert "lan78xx: Correctly indicate invalid OTP"
    - lan78xx: Read MAC address from DT if present
    - lan78xx: Enable LEDs if no valid EEPROM or OTP
    - lan78xx: Read initial EEE status from DT
    - lan78xx: Change LEDs to include 10Mb activity
    - lan78xx: Read LED states from Device Tree
    - lan78xx: Ignore DT MAC address if already valid
    - net: lan78xx: Allow for VLAN headers in timeout.
    - lan78xx: Connect phy early
    - lan78xx: Don't reset the interface on open
    - lan78xx: Move enabling of EEE into PHY init code
    - brcmfmac: Disable runtime pm for USB.
    - brcmfmac: Fix double free on exception at module load.
    - brcmfmac: only lock and unlock fws if fws is not null
    - brcmfmac: Fix warn trace on module unload while in ibss mode
    - brcmfmac: fix p2p scan abort null pointer exception
    - brcmf: Fix null pointer exception in bcdc_hdrpull
    - brcmfmac: Return actual error by fwil.
    - brcmfmac: sdio: Increase the default timeouts a bit

  * snapcraft.yaml: mv: cannot stat 'unpack/lib/firmware/brcm80211/brcm/*': No
    such file or directory (LP: #1785075)
    - snapcraft.yaml: wifi fw files are now part of linux-firmware

  [ Ubuntu: 4.4.0-135.161 ]

  * linux: 4.4.0-135.161 -proposed tracker (LP: #1788766)
  * [Regression] APM Merlin boards fail to recover link after interface down/up
    (LP: #1785739)
    - net: phylib: fix interrupts re-enablement in phy_start
    - net: phy: fix phy_start to consider PHY_IGNORE_INTERRUPT
  * qeth: don't clobber buffer on async TX completion (LP: #1786057)
    - s390/qeth: don't clobber buffer on async TX completion
  * nvme: avoid cqe corruption (LP: #1788035)
    - nvme: avoid cqe corruption when update at the same time as read
  * CacheFiles: Error: Overlong wait for old active object to go away.
    (LP: #1776254)
    - cachefiles: Fix missing clear of the CACHEFILES_OBJECT_ACTIVE flag
    - cachefiles: Wait rather than BUG'ing on "Unexpected object collision"
  * fscache cookie refcount updated incorrectly during fscache object allocation
    (LP: #1776277) // fscache cookie refcount updated incorrectly during fscache
    object allocation (LP: #1776277)
    - fscache: Fix reference overput in fscache_attach_object() error handling
  * FS-Cache: Assertion failed: FS-Cache: 6 == 5 is false (LP: #1774336)
    - Revert "UBUNTU: SAUCE: CacheFiles: fix a...

Read more...

Changed in linux-raspi2 (Ubuntu Xenial):
status: Fix Committed → Fix Released
Paolo Pisati (p-pisati)
Changed in linux-raspi2 (Ubuntu):
status: Confirmed → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.