18 Jul, 2018

1 commit

  • This allows us to increase compile-test coverage without having to build
    a kernel for MIPS. That's particularly interesting for subsystem
    maintainers that want to test as many drivers as possible in a single
    build.

    We also add a dependency on HAS_IOMEM in BCMA_HOST_SOC to make sure the
    driver is not selected when the arch does not implement IO accessors.

    Signed-off-by: Boris Brezillon
    Acked-by: Kalle Valo
    Signed-off-by: Miquel Raynal

    Boris Brezillon
     

05 Jun, 2018

1 commit

  • Pull dma-mapping updates from Christoph Hellwig:

    - replace the force_dma flag with a dma_configure bus method. (Nipun
    Gupta, although one patch is іncorrectly attributed to me due to a
    git rebase bug)

    - use GFP_DMA32 more agressively in dma-direct. (Takashi Iwai)

    - remove PCI_DMA_BUS_IS_PHYS and rely on the dma-mapping API to do the
    right thing for bounce buffering.

    - move dma-debug initialization to common code, and apply a few
    cleanups to the dma-debug code.

    - cleanup the Kconfig mess around swiotlb selection

    - swiotlb comment fixup (Yisheng Xie)

    - a trivial swiotlb fix. (Dan Carpenter)

    - support swiotlb on RISC-V. (based on a patch from Palmer Dabbelt)

    - add a new generic dma-noncoherent dma_map_ops implementation and use
    it for arc, c6x and nds32.

    - improve scatterlist validity checking in dma-debug. (Robin Murphy)

    - add a struct device quirk to limit the dma-mask to 32-bit due to
    bridge/system issues, and switch x86 to use it instead of a local
    hack for VIA bridges.

    - handle devices without a dma_mask more gracefully in the dma-direct
    code.

    * tag 'dma-mapping-4.18' of git://git.infradead.org/users/hch/dma-mapping: (48 commits)
    dma-direct: don't crash on device without dma_mask
    nds32: use generic dma_noncoherent_ops
    nds32: implement the unmap_sg DMA operation
    nds32: consolidate DMA cache maintainance routines
    x86/pci-dma: switch the VIA 32-bit DMA quirk to use the struct device flag
    x86/pci-dma: remove the explicit nodac and allowdac option
    x86/pci-dma: remove the experimental forcesac boot option
    Documentation/x86: remove a stray reference to pci-nommu.c
    core, dma-direct: add a flag 32-bit dma limits
    dma-mapping: remove unused gfp_t parameter to arch_dma_alloc_attrs
    dma-debug: check scatterlist segments
    c6x: use generic dma_noncoherent_ops
    arc: use generic dma_noncoherent_ops
    arc: fix arc_dma_{map,unmap}_page
    arc: fix arc_dma_sync_sg_for_{cpu,device}
    arc: simplify arc_dma_sync_single_for_{cpu,device}
    dma-mapping: provide a generic dma-noncoherent implementation
    dma-mapping: simplify Kconfig dependencies
    riscv: add swiotlb support
    riscv: only enable ZONE_DMA32 for 64-bit
    ...

    Linus Torvalds
     

12 May, 2018

1 commit

  • Used buffer wasn't big enough to hold whole strings. Example output of
    this function is:
    [ 0.180892] bcma: bus0: core 0x0800, irq: 2(S)* 3 4 5 6 D I
    [ 0.180948] bcma: bus0: core 0x0812, irq: 2(S) 3* 4 5 6 D I
    [ 0.180998] bcma: bus0: core 0x082d, irq: 2(S) 3 4* 5 6 D I
    [ 0.181046] bcma: bus0: core 0x082c, irq: 2(S) 3 4 5 6 D I*
    which means we need to store up to 24 chars.

    Fixes: 758f7e06063a8 ("bcma: Use bcma_debug and not pr_cont in MIPS driver")
    Signed-off-by: Rafał Miłecki
    Cc: stable@vger.kernel.org # v4.15+
    Signed-off-by: Kalle Valo

    Rafał Miłecki
     

03 May, 2018

1 commit

  • With each bus implementing its own DMA configuration callback, there is no
    need for bus to explicitly set the force_dma flag. Modify the
    of_dma_configure function to accept an input parameter which specifies if
    implicit DMA configuration is required when it is not described by the
    firmware.

    Signed-off-by: Nipun Gupta
    Acked-by: Bjorn Helgaas # PCI parts
    Reviewed-by: Rob Herring
    [hch: tweaked the changelog a bit]
    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     

14 Mar, 2018

1 commit

  • Attempting to build bcma.ko with BCMA_DRIVER_PCI_HOSTMODE=y results in
    a build error due to use of symbols not exported from vmlinux:

    ERROR: "pcibios_enable_device" [drivers/bcma/bcma.ko] undefined!
    ERROR: "register_pci_controller" [drivers/bcma/bcma.ko] undefined!
    make[1]: *** [scripts/Makefile.modpost:92: __modpost] Error 1

    To prevent this, don't allow the host mode feature to be built if
    CONFIG_BCMA=m

    Signed-off-by: Matt Redfearn
    Signed-off-by: Kalle Valo

    Matt Redfearn
     

28 Feb, 2018

1 commit

  • In this laptop we have the following PCI device:
    02:00.0 Network controller [0280]: Broadcom Limited BCM43142 802.11b/g/n [14e4:4365] (rev 01)
    Subsystem: Hewlett-Packard Company BCM43142 802.11b/g/n [103c:804a]
    [...]
    Region 0: Memory at 91000000 (64-bit, non-prefetchable) [size=32K]
    [...]

    With this patch, we can now see its WiFi chip:
    bcma: bus0: Found chip with id 43142, rev 0x01 and package 0x08
    bcma: bus0: Core 0 found: ChipCommon (manuf 0x4BF, id 0x800, rev 0x28, class 0x0)
    bcma: bus0: Core 1 found: IEEE 802.11 (manuf 0x4BF, id 0x812, rev 0x21, class 0x0)
    bcma: bus0: Core 2 found: PCIe (manuf 0x4BF, id 0x820, rev 0x16, class 0x0)
    bcma: bus0: Core 3 found: UNKNOWN (manuf 0x43B, id 0x368, rev 0x00, class 0x0)
    bcma: bus0: Found rev 15 PMU (capabilities 0x518C5E0F)
    bcma: bus0: SPROM offset 0x840
    bcma: bus0: Found SPROM revision 10
    bcma: bus0: Workarounds unknown or not needed for device 0xA886
    bcma: bus0: Bus registered

    But it not yet supported by brcmsmac so it won't work for now:
    brcmsmac bcma0:1: brcms_b_attach wl0: vendor 0x14e4 device 0x4365
    brcmsmac: unknown device id 4365

    Signed-off-by: Denis 'GNUtoo' Carikli
    Signed-off-by: Kalle Valo

    Denis 'GNUtoo' Carikli
     

27 Feb, 2018

1 commit

  • After checking all possible call chains to bcma_pmu_resources_init() here,
    my tool finds that this function is never called in atomic context,
    namely never in an interrupt handler or holding a spinlock.
    Thus mdelay can be replaced with usleep_range to avoid busy wait.

    This is found by a static analysis tool named DCNS written by myself.

    Signed-off-by: Jia-Ju Bai
    Acked-by: Larry Finger
    Signed-off-by: Kalle Valo

    Jia-Ju Bai
     

20 Jan, 2018

1 commit


17 Jan, 2018

1 commit

  • Mips builds with BCMA host mode enabled fail in mainline and -next
    with:

    In file included from include/linux/bcma/bcma.h:10:0,
    from drivers/bcma/bcma_private.h:9,
    from drivers/bcma/main.c:8:
    include/linux/bcma/bcma_driver_pci.h:218:24: error:
    field 'pci_controller' has incomplete type

    Bisect points to commit d41e6858ba58c ("MIPS: Kconfig: Set default MIPS
    system type as generic") as the culprit. Analysis shows that the commmit
    changes PCI configuration and enables PCI_DRIVERS_GENERIC. This in turn
    disables PCI_DRIVERS_LEGACY. 'struct pci_controller' is, however, only
    defined if PCI_DRIVERS_LEGACY is enabled.

    Ultimately that means that BCMA_DRIVER_PCI_HOSTMODE depends on
    PCI_DRIVERS_LEGACY. Add the missing dependency.

    Fixes: d41e6858ba58c ("MIPS: Kconfig: Set default MIPS system type as ...")
    Cc: Matt Redfearn
    Cc: James Hogan
    Signed-off-by: Guenter Roeck
    Reviewed-by: James Hogan
    Signed-off-by: Kalle Valo

    Guenter Roeck
     

07 Dec, 2017

1 commit


16 Nov, 2017

1 commit

  • Pull networking updates from David Miller:
    "Highlights:

    1) Maintain the TCP retransmit queue using an rbtree, with 1GB
    windows at 100Gb this really has become necessary. From Eric
    Dumazet.

    2) Multi-program support for cgroup+bpf, from Alexei Starovoitov.

    3) Perform broadcast flooding in hardware in mv88e6xxx, from Andrew
    Lunn.

    4) Add meter action support to openvswitch, from Andy Zhou.

    5) Add a data meta pointer for BPF accessible packets, from Daniel
    Borkmann.

    6) Namespace-ify almost all TCP sysctl knobs, from Eric Dumazet.

    7) Turn on Broadcom Tags in b53 driver, from Florian Fainelli.

    8) More work to move the RTNL mutex down, from Florian Westphal.

    9) Add 'bpftool' utility, to help with bpf program introspection.
    From Jakub Kicinski.

    10) Add new 'cpumap' type for XDP_REDIRECT action, from Jesper
    Dangaard Brouer.

    11) Support 'blocks' of transformations in the packet scheduler which
    can span multiple network devices, from Jiri Pirko.

    12) TC flower offload support in cxgb4, from Kumar Sanghvi.

    13) Priority based stream scheduler for SCTP, from Marcelo Ricardo
    Leitner.

    14) Thunderbolt networking driver, from Amir Levy and Mika Westerberg.

    15) Add RED qdisc offloadability, and use it in mlxsw driver. From
    Nogah Frankel.

    16) eBPF based device controller for cgroup v2, from Roman Gushchin.

    17) Add some fundamental tracepoints for TCP, from Song Liu.

    18) Remove garbage collection from ipv6 route layer, this is a
    significant accomplishment. From Wei Wang.

    19) Add multicast route offload support to mlxsw, from Yotam Gigi"

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (2177 commits)
    tcp: highest_sack fix
    geneve: fix fill_info when link down
    bpf: fix lockdep splat
    net: cdc_ncm: GetNtbFormat endian fix
    openvswitch: meter: fix NULL pointer dereference in ovs_meter_cmd_reply_start
    netem: remove unnecessary 64 bit modulus
    netem: use 64 bit divide by rate
    tcp: Namespace-ify sysctl_tcp_default_congestion_control
    net: Protect iterations over net::fib_notifier_ops in fib_seq_sum()
    ipv6: set all.accept_dad to 0 by default
    uapi: fix linux/tls.h userspace compilation error
    usbnet: ipheth: prevent TX queue timeouts when device not ready
    vhost_net: conditionally enable tx polling
    uapi: fix linux/rxrpc.h userspace compilation errors
    net: stmmac: fix LPI transitioning for dwmac4
    atm: horizon: Fix irq release error
    net-sysfs: trigger netlink notification on ifalias change via sysfs
    openvswitch: Using kfree_rcu() to simplify the code
    openvswitch: Make local function ovs_nsh_key_attr_size() static
    openvswitch: Fix return value check in ovs_meter_cmd_features()
    ...

    Linus Torvalds
     

15 Nov, 2017

1 commit

  • Pull GPIO updates from Linus Walleij:
    "This is the bulk of GPIO changes for the v4.15 kernel cycle:

    Core:

    - Fix the semantics of raw GPIO to actually be raw. No inversion
    semantics as before, but also no open draining, and allow the raw
    operations to affect lines used for interrupts as the caller
    supposedly knows what they are doing if they are getting the big
    hammer.

    - Rewrote the __inner_function() notation calls to names that make
    more sense. I just find this kind of code disturbing.

    - Drop the .irq_base() field from the gpiochip since now all IRQs are
    mapped dynamically. This is nice.

    - Support for .get_multiple() in the core driver API. This allows us
    to read several GPIO lines with a single register read. This has
    high value for some usecases: it can be used to create
    oscilloscopes and signal analyzers and other things that rely on
    reading several lines at exactly the same instant. Also a generally
    nice optimization. This uses the new assign_bit() macro from the
    bitops lib that was ACKed by Andrew Morton and is implemented for
    two drivers, one of them being the generic MMIO driver so everyone
    using that will be able to benefit from this.

    - Do not allow requests of Open Drain and Open Source setting of a
    GPIO line simultaneously. If the hardware actually supports
    enabling both at the same time the electrical result would be
    disastrous.

    - A new interrupt chip core helper. This will be helpful to deal with
    "banked" GPIOs, which means GPIO controllers with several logical
    blocks of GPIO inside them. This is several gpiochips per device in
    the device model, in contrast to the case when there is a 1-to-1
    relationship between a device and a gpiochip.

    New drivers:

    - Maxim MAX3191x industrial serializer, a very interesting piece of
    professional I/O hardware.

    - Uniphier GPIO driver. This is the GPIO block from the recent
    Socionext (ex Fujitsu and Panasonic) platform.

    - Tegra 186 driver. This is based on the new banked GPIO
    infrastructure.

    Other improvements:

    - Some documentation improvements.

    - Wakeup support for the DesignWare DWAPB GPIO controller.

    - Reset line support on the DesignWare DWAPB GPIO controller.

    - Several non-critical bug fixes and improvements for the Broadcom
    BRCMSTB driver.

    - Misc non-critical bug fixes like exotic errorpaths, removal of dead
    code etc.

    - Explicit comments on fall-through switch() statements"

    * tag 'gpio-v4.15-1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (65 commits)
    gpio: tegra186: Remove tegra186_gpio_lock_class
    gpio: rcar: Add r8a77995 (R-Car D3) support
    pinctrl: bcm2835: Fix some merge fallout
    gpio: Fix undefined lock_dep_class
    gpio: Automatically add lockdep keys
    gpio: Introduce struct gpio_irq_chip.first
    gpio: Disambiguate struct gpio_irq_chip.nested
    gpio: Add Tegra186 support
    gpio: Export gpiochip_irq_{map,unmap}()
    gpio: Implement tighter IRQ chip integration
    gpio: Move lock_key into struct gpio_irq_chip
    gpio: Move irq_valid_mask into struct gpio_irq_chip
    gpio: Move irq_nested into struct gpio_irq_chip
    gpio: Move irq_chained_parent to struct gpio_irq_chip
    gpio: Move irq_default_type to struct gpio_irq_chip
    gpio: Move irq_handler to struct gpio_irq_chip
    gpio: Move irqdomain into struct gpio_irq_chip
    gpio: Move irqchip into struct gpio_irq_chip
    gpio: Introduce struct gpio_irq_chip
    pinctrl: armada-37xx: remove unused variable
    ...

    Linus Torvalds
     

08 Nov, 2017

1 commit


04 Nov, 2017

2 commits


02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

27 Oct, 2017

1 commit

  • Commit 66cc04424960 ("bcma: use bcma_debug and pr_cont in MIPS driver")
    converted a printk(KERN_DEBUG to bcma_debug.

    bcma_debug is guarded by a #define DEBUG via pr_debug.

    This means that the bcma_debug will generally not be emitted
    but any pr_cont following the bcma_debug will be emitted.

    Correct this by removing the uses of pr_cont by using a temporary.

    Signed-off-by: Joe Perches
    Signed-off-by: Kalle Valo

    Joe Perches
     

17 Oct, 2017

1 commit


13 Oct, 2017

1 commit

  • Use "if BCMA"/"endif" around all Kconfig symbols so that they are
    kept together in *config menus instead of showing up in unexpected
    places. Also remove "depends on BCMA" since this is handled by the
    "if BCMA" addition.

    Tested with ARCH={x86_64,MIPS} using make {n,menu,g,x}config.

    Signed-off-by: Randy Dunlap
    Cc: Rafał Miłecki
    Signed-off-by: Kalle Valo

    Randy Dunlap
     

08 Aug, 2017

1 commit


27 Jul, 2017

1 commit


21 Mar, 2017

3 commits


08 Mar, 2017

1 commit


03 Feb, 2017

1 commit


31 Jan, 2017

2 commits


17 Jan, 2017

1 commit

  • This reverts commit 4c81acab3816 ("bcma: init serial console directly
    from ChipCommon code") as it broke IRQ assignment. Getting IRQ with
    bcma_core_irq helper on SoC requires MIPS core to be set. It happens
    *after* ChipCommon initialization so we can't do this so early.

    This fixes a user reported regression. It wasn't critical as serial was
    still somehow working but lack of IRQs was making in unreliable.

    Fixes: 4c81acab3816 ("bcma: init serial console directly from ChipCommon code")
    Reported-by: Felix Fietkau
    Cc: stable@vger.kernel.org # 4.6+
    Signed-off-by: Rafał Miłecki
    Signed-off-by: Kalle Valo

    Rafał Miłecki
     

29 Nov, 2016

1 commit

  • This is what is in the laptop:
    01:00.0 Network controller [0280]: Broadcom Limited BCM43142 802.11b/g/n [14e4:4365] (rev 01)
    Subsystem: Dell Device [1028:0018]
    Flags: bus master, fast devsel, latency 0, IRQ 18
    Memory at b0400000 (64-bit, non-prefetchable) [size=32K]
    Capabilities: [40] Power Management version 3
    Capabilities: [58] Vendor Specific Information: Len=78
    Capabilities: [48] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [d0] Express Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [13c] Virtual Channel
    Capabilities: [160] Device Serial Number 00-00-9a-ff-ff-f3-40-b8
    Capabilities: [16c] Power Budgeting

    With the patch, I can see:
    bcma: bus0: Found chip with id 43142, rev 0x01 and package 0x08
    bcma: bus0: Core 0 found: ChipCommon (manuf 0x4BF, id 0x800, rev 0x28, class 0x0)
    bcma: bus0: Core 1 found: IEEE 802.11 (manuf 0x4BF, id 0x812, rev 0x21, class 0x0)
    bcma: bus0: Core 2 found: PCIe (manuf 0x4BF, id 0x820, rev 0x16, class 0x0)
    bcma: bus0: Core 3 found: UNKNOWN (manuf 0x43B, id 0x368, rev 0x00, class 0x0)
    bcma: bus0: Bus registered

    The wifi is not currently supported by brcmsmac yet:
    brcmsmac bcma1:1: mfg 4bf core 812 rev 33 class 0 irq 18
    brcmsmac: unknown device id 4365

    So don't expect a working wifi from this patch :).

    Signed-off-by: Jiri Slaby
    Cc: Rafał Miłecki
    Cc:
    Signed-off-by: Kalle Valo

    Jiri Slaby
     

09 Sep, 2016

1 commit

  • While fixing another bug, I noticed that bcma manually sets up
    a dma_mask pointer for its child devices. We have a generic
    helper for that now, which should be able to cope better with
    any variations that might be needed to deal with cache coherency,
    unusual DMA address offsets, iommus, or limited DMA masks, none
    of which are currently handled here.

    This changes the core to use the of_dma_configure(), like
    we do for platform devices that are probed directly from
    DT.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Kalle Valo

    Arnd Bergmann
     

03 Sep, 2016

1 commit

  • BCM53573 seems to be the first series of Northstar family with wireless
    on the chip. The base models are BCM53573-s (A0, A1) and there is also
    BCM47189B0 which seems to be some small modification.

    The only problem with these chipsets seems to be watchdog. It's totally
    unavailable on 53573A0 / 53573A1 and preferable PMU watchdog is broken
    on 53573B0 / 53573B1.

    Signed-off-by: Rafał Miłecki
    Signed-off-by: Kalle Valo

    Rafał Miłecki
     

26 Jul, 2016

1 commit

  • …ub/scm/linux/kernel/git/kvalo/wireless-drivers-next

    Kalle Valo says:

    ====================
    pull-request: wireless-drivers-next 2016-07-22

    I'm sick so I have to keep this short, but here's the last pull request
    to net-next. This time there's a trivial conflict with mtd tree:

    http://lkml.kernel.org/g/20160720123133.44dab209@canb.auug.org.au

    We concluded with Brian (CCed) that it's best that we ask Linus to fix
    this. The patches have been in linux-next for a couple of days. This
    time I haven't done any merge tests so I don't know if there are any
    other conflicts etc.

    Please let me know if there are any problems.

    wireless-drivers-next patches for 4.8

    Major changes:

    wl18xx

    * add initial mesh support

    bcma

    * serial flash support on non-MIPS SoCs

    ath10k

    * enable support for QCA9888
    * disable wake_tx_queue() mac80211 op for older devices to workaround
    throughput regression

    ath9k

    * implement temperature compensation support for AR9003+
    ====================

    Signed-off-by: David S. Miller <davem@davemloft.net>

    David S. Miller
     

20 Jul, 2016

1 commit


19 Jul, 2016

2 commits

  • So far we had only MIPS devices with serial flash connected to the SoC's
    ChipCommon. ARM devices got a separated SPI controller and weere using
    standard SPI drivers.
    This has changed with the wireless SoC BCM47189B0. It's ARM based but
    has serial flash attached just like older devices. This allows using
    existing driver with these devices.

    Signed-off-by: Rafał Miłecki
    Signed-off-by: Kalle Valo

    Rafał Miłecki
     
  • After discovering there are 2 very different 14e4:4365 PCI devices we
    made ID tables less generic. Back then we believed there are only 2 such
    devices:
    1) 14e4:4365 1028:0016 with SoftMAC BCM43142 chipset
    2) 14e4:4365 14e4:4365 with FullMAC BCM4366 chipset

    >From the recent report it appears there is also 14e4:4365 105b:e092
    which should be claimed by bcma. Add back support for it.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=121881
    Fixes: 515b399c9a20 ("bcma: claim only 14e4:4365 PCI Dell card with SoftMAC BCM43142")
    Reported-by: Igor Mammedov
    Signed-off-by: Rafał Miłecki
    Cc: Stable [4.6+]
    Tested-by: Igor Mammedov
    Signed-off-by: Kalle Valo

    Rafał Miłecki
     

11 Jul, 2016

1 commit

  • The EFI firmware on Macs contains a full-fledged network stack for
    downloading OS X images from osrecovery.apple.com. Unfortunately
    on Macs introduced 2011 and 2012, EFI brings up the Broadcom 4331
    wireless card on every boot and leaves it enabled even after
    ExitBootServices has been called. The card continues to assert its IRQ
    line, causing spurious interrupts if the IRQ is shared. It also corrupts
    memory by DMAing received packets, allowing for remote code execution
    over the air. This only stops when a driver is loaded for the wireless
    card, which may be never if the driver is not installed or blacklisted.

    The issue seems to be constrained to the Broadcom 4331. Chris Milsted
    has verified that the newer Broadcom 4360 built into the MacBookPro11,3
    (2013/2014) does not exhibit this behaviour. The chances that Apple will
    ever supply a firmware fix for the older machines appear to be zero.

    The solution is to reset the card on boot by writing to a reset bit in
    its mmio space. This must be done as an early quirk and not as a plain
    vanilla PCI quirk to successfully combat memory corruption by DMAed
    packets: Matthew Garrett found out in 2012 that the packets are written
    to EfiBootServicesData memory (http://mjg59.dreamwidth.org/11235.html).
    This type of memory is made available to the page allocator by
    efi_free_boot_services(). Plain vanilla PCI quirks run much later, in
    subsys initcall level. In-between a time window would be open for memory
    corruption. Random crashes occurring in this time window and attributed
    to DMAed packets have indeed been observed in the wild by Chris
    Bainbridge.

    When Matthew Garrett analyzed the memory corruption issue in 2012, he
    sought to fix it with a grub quirk which transitions the card to D3hot:
    http://git.savannah.gnu.org/cgit/grub.git/commit/?id=9d34bb85da56

    This approach does not help users with other bootloaders and while it
    may prevent DMAed packets, it does not cure the spurious interrupts
    emanating from the card. Unfortunately the card's mmio space is
    inaccessible in D3hot, so to reset it, we have to undo the effect of
    Matthew's grub patch and transition the card back to D0.

    Note that the quirk takes a few shortcuts to reduce the amount of code:
    The size of BAR 0 and the location of the PM capability is identical
    on all affected machines and therefore hardcoded. Only the address of
    BAR 0 differs between models. Also, it is assumed that the BCMA core
    currently mapped is the 802.11 core. The EFI driver seems to always take
    care of this.

    Michael Büsch, Bjorn Helgaas and Matt Fleming contributed feedback
    towards finding the best solution to this problem.

    The following should be a comprehensive list of affected models:
    iMac13,1 2012 21.5" [Root Port 00:1c.3 = 8086:1e16]
    iMac13,2 2012 27" [Root Port 00:1c.3 = 8086:1e16]
    Macmini5,1 2011 i5 2.3 GHz [Root Port 00:1c.1 = 8086:1c12]
    Macmini5,2 2011 i5 2.5 GHz [Root Port 00:1c.1 = 8086:1c12]
    Macmini5,3 2011 i7 2.0 GHz [Root Port 00:1c.1 = 8086:1c12]
    Macmini6,1 2012 i5 2.5 GHz [Root Port 00:1c.1 = 8086:1e12]
    Macmini6,2 2012 i7 2.3 GHz [Root Port 00:1c.1 = 8086:1e12]
    MacBookPro8,1 2011 13" [Root Port 00:1c.1 = 8086:1c12]
    MacBookPro8,2 2011 15" [Root Port 00:1c.1 = 8086:1c12]
    MacBookPro8,3 2011 17" [Root Port 00:1c.1 = 8086:1c12]
    MacBookPro9,1 2012 15" [Root Port 00:1c.1 = 8086:1e12]
    MacBookPro9,2 2012 13" [Root Port 00:1c.1 = 8086:1e12]
    MacBookPro10,1 2012 15" [Root Port 00:1c.1 = 8086:1e12]
    MacBookPro10,2 2012 13" [Root Port 00:1c.1 = 8086:1e12]

    For posterity, spurious interrupts caused by the Broadcom 4331 wireless
    card resulted in splats like this (stacktrace omitted):

    irq 17: nobody cared (try booting with the "irqpoll" option)
    handlers:
    [] pcie_isr
    [] sdhci_irq [sdhci] threaded [] sdhci_thread_irq [sdhci]
    [] azx_interrupt [snd_hda_codec]
    Disabling IRQ #17

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=79301
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=111781
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=728916
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=895951#c16
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1009819
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1098621
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1149632#c5
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1279130
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1332732
    Tested-by: Konstantin Simanov # [MacBookPro8,1]
    Tested-by: Lukas Wunner # [MacBookPro9,1]
    Tested-by: Bryan Paradis # [MacBookPro9,2]
    Tested-by: Andrew Worsley # [MacBookPro10,1]
    Tested-by: Chris Bainbridge # [MacBookPro10,2]
    Signed-off-by: Lukas Wunner
    Acked-by: Rafał Miłecki
    Acked-by: Matt Fleming
    Cc: Andy Lutomirski
    Cc: Bjorn Helgaas
    Cc: Borislav Petkov
    Cc: Brian Gerst
    Cc: Chris Milsted
    Cc: Denys Vlasenko
    Cc: H. Peter Anvin
    Cc: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Matthew Garrett
    Cc: Michael Buesch
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: Yinghai Lu
    Cc: b43-dev@lists.infradead.org
    Cc: linux-pci@vger.kernel.org
    Cc: linux-wireless@vger.kernel.org
    Cc: stable@vger.kernel.org
    Cc: stable@vger.kernel.org # 123456789abc: x86/quirks: Apply nvidia_bugs quirk only on root bus
    Cc: stable@vger.kernel.org # 123456789abc: x86/quirks: Reintroduce scanning of secondary buses
    Link: http://lkml.kernel.org/r/48d0972ac82a53d460e5fce77a07b2560db95203.1465690253.git.lukas@wunner.de
    [ Did minor readability edits. ]
    Signed-off-by: Ingo Molnar

    Lukas Wunner
     

25 May, 2016

1 commit

  • Pull MTD updates from Brian Norris:
    "First cycle with Boris as NAND maintainer! Many (most) bullets stolen
    from him.

    Generic:
    - Migrated NAND LED trigger to be a generic MTD trigger

    NAND:
    - Introduction of the "ECC algorithm" concept, to avoid overloading
    the ECC mode field too much more
    - Replaced the nand_ecclayout infrastructure with something a little
    more flexible (finally!) and future proof
    - Rework of the OMAP GPMC and NAND drivers; the TI folks pulled some
    of this into their own tree as well
    - Prepare the sunxi NAND driver to receive DMA support
    - Handle bitflips in erased pages on GPMI revisions that do not
    support this in hardware.

    SPI NOR:
    - Start using the spi_flash_read() API for SPI drivers that support
    it (i.e., SPI drivers with special memory-mapped flash modes)

    And other small scattered improvments"

    * tag 'for-linus-20160523' of git://git.infradead.org/linux-mtd: (155 commits)
    mtd: spi-nor: support GigaDevice gd25lq64c
    mtd: nand_bch: fix spelling of "probably"
    mtd: brcmnand: respect ECC algorithm set by NAND subsystem
    gpmi-nand: Handle ECC Errors in erased pages
    Documentation: devicetree: deprecate "soft_bch" nand-ecc-mode value
    mtd: nand: add support for "nand-ecc-algo" DT property
    mtd: mtd: drop NAND_ECC_SOFT_BCH enum value
    mtd: drop support for NAND_ECC_SOFT_BCH as "soft_bch" mapping
    mtd: nand: read ECC algorithm from the new field
    mtd: nand: fsmc: validate ECC setup by checking algorithm directly
    mtd: nand: set ECC algorithm to Hamming on fallback
    staging: mt29f_spinand: set ECC algorithm explicitly
    CRIS v32: nand: set ECC algorithm explicitly
    mtd: nand: atmel: set ECC algorithm explicitly
    mtd: nand: davinci: set ECC algorithm explicitly
    mtd: nand: bf5xx: set ECC algorithm explicitly
    mtd: nand: omap2: Fix high memory dma prefetch transfer
    mtd: nand: omap2: Start dma request before enabling prefetch
    mtd: nandsim: add __init attribute
    mtd: nand: move of_get_nand_xxx() helpers into nand_base.c
    ...

    Linus Torvalds
     

04 Apr, 2016

1 commit

  • Using KSEG0ADDR makes code highly MIPS dependent and not portable.
    Thanks to the fix a68f376 ("MIPS: io.h: Define `ioremap_cache'") we can
    use ioremap_cache which is generic and supported on MIPS as well now.

    KSEG0ADDR was translating 0x1c000000 into 0x9c000000. With ioremap_cache
    we use MIPS's __ioremap (and then remap_area_pages). This results in
    different address (e.g. 0xc0080000) but it still should be cached as
    expected and it was successfully tested with BCM47186B0.

    Other than that drivers/bcma/driver_chipcommon_sflash.c nicely setups a
    struct resource for access window, but we wren't using it. Use it now
    and drop duplicated info.

    Signed-off-by: Brian Norris
    Signed-off-by: Rafał Miłecki

    Brian Norris
     

23 Mar, 2016

1 commit

  • The bcma driver core can be built with or without DT support, but
    it fails to build when CONFIG_OF=y and CONFIG_OF_IRQ=n, which
    can happen on platforms that do not support IRQ domains.

    ERROR: "irq_create_of_mapping" [drivers/bcma/bcma.ko] undefined!
    ERROR: "of_irq_parse_raw" [drivers/bcma/bcma.ko] undefined!
    ERROR: "of_irq_parse_one" [drivers/bcma/bcma.ko] undefined!

    This adds another compile-time check for OF_IRQ, but also
    gets rid of now unneeded #ifdef checks: Using the simpler
    IS_ENABLED() check for OF_IRQ also covers the case of not
    having CONFIG_OF enabled. The check for CONFIG_OF_ADDRESS
    was added to allow building on architectures without
    OF_ADDRESS, but that has been addressed already in
    b1d06b60e90c ("of: Provide static inline function for
    of_translate_address if needed").

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Kalle Valo

    Arnd Bergmann