Pull MIPS fixes from Paul Burton: "A few more MIPS fixes: - Fix 16b cmpxchg() operations which could erroneously fail if bits 15:8 of the old value are non-zero. In practice I'm not aware of any actual users of 16b cmpxchg() on MIPS, but this fixes the support for it was was introduced in v4.13. - Provide a struct device to dma_alloc_coherent for Lantiq XWAY systems with a "Voice MIPS Macro Core" (VMMC) device. - Provide DMA masks for BCM63xx ethernet devices, fixing a regression introduced in v4.19. - Fix memblock reservation for the kernel when the system has a non-zero PHYS_OFFSET, correcting the memblock conversion performed in v4.20" * tag 'mips_fixes_5.0_4' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux: MIPS: fix memory setup for platforms with PHYS_OFFSET != 0 MIPS: BCM63XX: provide DMA masks for ethernet devices MIPS: lantiq: pass struct device to DMA API functions MIPS: fix truncation in __cmpxchg_small for short values
Unified · Split
| @@ -70,6 +70,8 @@ static struct platform_device bcm63xx_enet_shared_device = { · 69 unmodified lines | ||
| 70 | 70 | |
| 71 | 71 | static int shared_device_registered; |
| 72 | 72 | |
| 73 | +static u64 enet_dmamask = DMA_BIT_MASK(32); | |
| 74 | + | |
| 73 | 75 | static struct resource enet0_res[] = { |
| 74 | 76 | { |
| 75 | 77 | .start = -1, /* filled at runtime */ |
| @@ -99,6 +101,8 @@ static struct platform_device bcm63xx_enet0_device = { · 23 unmodified lines | ||
| 99 | 101 | .resource = enet0_res, |
| 100 | 102 | .dev = { |
| 101 | 103 | .platform_data = &enet0_pd, |
| 104 | + .dma_mask = &enet_dmamask, | |
| 105 | + .coherent_dma_mask = DMA_BIT_MASK(32), | |
| 102 | 106 | }, |
| 103 | 107 | }; |
| 104 | 108 | |
| @@ -131,6 +135,8 @@ static struct platform_device bcm63xx_enet1_device = { · 26 unmodified lines | ||
| 131 | 135 | .resource = enet1_res, |
| 132 | 136 | .dev = { |
| 133 | 137 | .platform_data = &enet1_pd, |
| 138 | + .dma_mask = &enet_dmamask, | |
| 139 | + .coherent_dma_mask = DMA_BIT_MASK(32), | |
| 134 | 140 | }, |
| 135 | 141 | }; |
| 136 | 142 | |
| @@ -157,6 +163,8 @@ static struct platform_device bcm63xx_enetsw_device = { · 20 unmodified lines | ||
| 157 | 163 | .resource = enetsw_res, |
| 158 | 164 | .dev = { |
| 159 | 165 | .platform_data = &enetsw_pd, |
| 166 | + .dma_mask = &enet_dmamask, | |
| 167 | + .coherent_dma_mask = DMA_BIT_MASK(32), | |
| 160 | 168 | }, |
| 161 | 169 | }; |
| 162 | 170 | |
| @@ -54,10 +54,9 @@ unsigned long __xchg_small(volatile void *ptr, unsigned long val, unsigned int s · 53 unmodified lines | ||
| 54 | 54 | unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old, |
| 55 | 55 | unsigned long new, unsigned int size) |
| 56 | 56 | { |
| 57 | − u32 mask, old32, new32, load32; | |
| 57 | + u32 mask, old32, new32, load32, load; | |
| 58 | 58 | volatile u32 *ptr32; |
| 59 | 59 | unsigned int shift; |
| 60 | − u8 load; | |
| 61 | 60 | |
| 62 | 61 | /* Check that ptr is naturally aligned */ |
| 63 | 62 | WARN_ON((unsigned long)ptr & (size - 1)); |
| @@ -384,7 +384,8 @@ static void __init bootmem_init(void) · 383 unmodified lines | ||
| 384 | 384 | init_initrd(); |
| 385 | 385 | reserved_end = (unsigned long) PFN_UP(__pa_symbol(&_end)); |
| 386 | 386 | |
| 387 | − memblock_reserve(PHYS_OFFSET, reserved_end << PAGE_SHIFT); | |
| 387 | + memblock_reserve(PHYS_OFFSET, | |
| 388 | + (reserved_end << PAGE_SHIFT) - PHYS_OFFSET); | |
| 388 | 389 | |
| 389 | 390 | /* |
| 390 | 391 | * max_low_pfn is not a number of pages. The number of pages |
| @@ -31,8 +31,8 @@ static int vmmc_probe(struct platform_device *pdev) · 30 unmodified lines | ||
| 31 | 31 | dma_addr_t dma; |
| 32 | 32 | |
| 33 | 33 | cp1_base = |
| 34 | − (void *) CPHYSADDR(dma_alloc_coherent(NULL, CP1_SIZE, | |
| 35 | − &dma, GFP_ATOMIC)); | |
| 34 | + (void *) CPHYSADDR(dma_alloc_coherent(&pdev->dev, CP1_SIZE, | |
| 35 | + &dma, GFP_KERNEL)); | |
| 36 | 36 | |
| 37 | 37 | gpio_count = of_gpio_count(pdev->dev.of_node); |
| 38 | 38 | while (gpio_count > 0) { |