Skip to content
  • Rafał Miłecki's avatar
    321c46b9
    MIPS: BCM47XX: Setup struct device for the SoC · 321c46b9
    Rafał Miłecki authored
    
    
    So far we never had any device registered for the SoC. This resulted in
    some small issues that we kept ignoring like:
    1) Not working GPIOLIB_IRQCHIP (gpiochip_irqchip_add_key() failing)
    2) Lack of proper tree in the /sys/devices/
    3) mips_dma_alloc_coherent() silently handling empty coherent_dma_mask
    
    Kernel 4.19 came with a lot of DMA changes and caused a regression on
    bcm47xx. Starting with the commit f8c55dc6 ("MIPS: use generic dma
    noncoherent ops for simple noncoherent platforms") DMA coherent
    allocations just fail. Example:
    [    1.114914] bgmac_bcma bcma0:2: Allocation of TX ring 0x200 failed
    [    1.121215] bgmac_bcma bcma0:2: Unable to alloc memory for DMA
    [    1.127626] bgmac_bcma: probe of bcma0:2 failed with error -12
    [    1.133838] bgmac_bcma: Broadcom 47xx GBit MAC driver loaded
    
    The bgmac driver also triggers a WARNING:
    [    0.959486] ------------[ cut here ]------------
    [    0.964387] WARNING: CPU: 0 PID: 1 at ./include/linux/dma-mapping.h:516 bgmac_enet_probe+0x1b4/0x5c4
    [    0.973751] Modules linked in:
    [    0.976913] CPU: 0 PID: 1 Comm: swapper Not tainted 4.19.9 #0
    [    0.982750] Stack : 804a0000 804597c4 00000000 00000000 80458fd8 8381bc2c 838282d4 80481a47
    [    0.991367]         8042e3ec 00000001 804d38f0 00000204 83980000 00000065 8381bbe0 6f55b24f
    [    0.999975]         00000000 00000000 80520000 00002018 00000000 00000075 00000007 00000000
    [    1.008583]         00000000 80480000 000ee811 00000000 00000000 00000000 80432c00 80248db8
    [    1.017196]         00000009 00000204 83980000 803ad7b0 00000000 801feeec 00000000 804d0000
    [    1.025804]         ...
    [    1.028325] Call Trace:
    [    1.030875] [<8000aef8>] show_stack+0x58/0x100
    [    1.035513] [<8001f8b4>] __warn+0xe4/0x118
    [    1.039708] [<8001f9a4>] warn_slowpath_null+0x48/0x64
    [    1.044935] [<80248db8>] bgmac_enet_probe+0x1b4/0x5c4
    [    1.050101] [<802498e0>] bgmac_probe+0x558/0x590
    [    1.054906] [<80252fd0>] bcma_device_probe+0x38/0x70
    [    1.060017] [<8020e1e8>] really_probe+0x170/0x2e8
    [    1.064891] [<8020e714>] __driver_attach+0xa4/0xec
    [    1.069784] [<8020c1e0>] bus_for_each_dev+0x58/0xb0
    [    1.074833] [<8020d590>] bus_add_driver+0xf8/0x218
    [    1.079731] [<8020ef24>] driver_register+0xcc/0x11c
    [    1.084804] [<804b54cc>] bgmac_init+0x1c/0x44
    [    1.089258] [<8000121c>] do_one_initcall+0x7c/0x1a0
    [    1.094343] [<804a1d34>] kernel_init_freeable+0x150/0x218
    [    1.099886] [<803a082c>] kernel_init+0x10/0x104
    [    1.104583] [<80005878>] ret_from_kernel_thread+0x14/0x1c
    [    1.110107] ---[ end trace f441c0d873d1fb5b ]---
    
    This patch setups a "struct device" (and passes it to the bcma) which
    allows fixing all the mentioned problems. It'll also require a tiny bcma
    patch which will follow through the wireless tree & its maintainer.
    
    Fixes: f8c55dc6 ("MIPS: use generic dma noncoherent ops for simple noncoherent platforms")
    Signed-off-by: default avatarRafał Miłecki <rafal@milecki.pl>
    Signed-off-by: default avatarPaul Burton <paul.burton@mips.com>
    Acked-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Linus Walleij <linus.walleij@linaro.org>
    Cc: linux-wireless@vger.kernel.org
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: James Hogan <jhogan@kernel.org>
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Cc: stable@vger.kernel.org # v4.19+
    321c46b9
    MIPS: BCM47XX: Setup struct device for the SoC
    Rafał Miłecki authored
    
    
    So far we never had any device registered for the SoC. This resulted in
    some small issues that we kept ignoring like:
    1) Not working GPIOLIB_IRQCHIP (gpiochip_irqchip_add_key() failing)
    2) Lack of proper tree in the /sys/devices/
    3) mips_dma_alloc_coherent() silently handling empty coherent_dma_mask
    
    Kernel 4.19 came with a lot of DMA changes and caused a regression on
    bcm47xx. Starting with the commit f8c55dc6 ("MIPS: use generic dma
    noncoherent ops for simple noncoherent platforms") DMA coherent
    allocations just fail. Example:
    [    1.114914] bgmac_bcma bcma0:2: Allocation of TX ring 0x200 failed
    [    1.121215] bgmac_bcma bcma0:2: Unable to alloc memory for DMA
    [    1.127626] bgmac_bcma: probe of bcma0:2 failed with error -12
    [    1.133838] bgmac_bcma: Broadcom 47xx GBit MAC driver loaded
    
    The bgmac driver also triggers a WARNING:
    [    0.959486] ------------[ cut here ]------------
    [    0.964387] WARNING: CPU: 0 PID: 1 at ./include/linux/dma-mapping.h:516 bgmac_enet_probe+0x1b4/0x5c4
    [    0.973751] Modules linked in:
    [    0.976913] CPU: 0 PID: 1 Comm: swapper Not tainted 4.19.9 #0
    [    0.982750] Stack : 804a0000 804597c4 00000000 00000000 80458fd8 8381bc2c 838282d4 80481a47
    [    0.991367]         8042e3ec 00000001 804d38f0 00000204 83980000 00000065 8381bbe0 6f55b24f
    [    0.999975]         00000000 00000000 80520000 00002018 00000000 00000075 00000007 00000000
    [    1.008583]         00000000 80480000 000ee811 00000000 00000000 00000000 80432c00 80248db8
    [    1.017196]         00000009 00000204 83980000 803ad7b0 00000000 801feeec 00000000 804d0000
    [    1.025804]         ...
    [    1.028325] Call Trace:
    [    1.030875] [<8000aef8>] show_stack+0x58/0x100
    [    1.035513] [<8001f8b4>] __warn+0xe4/0x118
    [    1.039708] [<8001f9a4>] warn_slowpath_null+0x48/0x64
    [    1.044935] [<80248db8>] bgmac_enet_probe+0x1b4/0x5c4
    [    1.050101] [<802498e0>] bgmac_probe+0x558/0x590
    [    1.054906] [<80252fd0>] bcma_device_probe+0x38/0x70
    [    1.060017] [<8020e1e8>] really_probe+0x170/0x2e8
    [    1.064891] [<8020e714>] __driver_attach+0xa4/0xec
    [    1.069784] [<8020c1e0>] bus_for_each_dev+0x58/0xb0
    [    1.074833] [<8020d590>] bus_add_driver+0xf8/0x218
    [    1.079731] [<8020ef24>] driver_register+0xcc/0x11c
    [    1.084804] [<804b54cc>] bgmac_init+0x1c/0x44
    [    1.089258] [<8000121c>] do_one_initcall+0x7c/0x1a0
    [    1.094343] [<804a1d34>] kernel_init_freeable+0x150/0x218
    [    1.099886] [<803a082c>] kernel_init+0x10/0x104
    [    1.104583] [<80005878>] ret_from_kernel_thread+0x14/0x1c
    [    1.110107] ---[ end trace f441c0d873d1fb5b ]---
    
    This patch setups a "struct device" (and passes it to the bcma) which
    allows fixing all the mentioned problems. It'll also require a tiny bcma
    patch which will follow through the wireless tree & its maintainer.
    
    Fixes: f8c55dc6 ("MIPS: use generic dma noncoherent ops for simple noncoherent platforms")
    Signed-off-by: default avatarRafał Miłecki <rafal@milecki.pl>
    Signed-off-by: default avatarPaul Burton <paul.burton@mips.com>
    Acked-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Linus Walleij <linus.walleij@linaro.org>
    Cc: linux-wireless@vger.kernel.org
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: James Hogan <jhogan@kernel.org>
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Cc: stable@vger.kernel.org # v4.19+
Loading