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 | static int shared_device_registered; | 71 | static int shared_device_registered; |
| 72 | 72 | ||
| 73 | static u64 enet_dmamask = DMA_BIT_MASK(32); | ||
| 74 | |||
| 73 | static struct resource enet0_res[] = { | 75 | static struct resource enet0_res[] = { |
| 74 | { | 76 | { |
| 75 | .start = -1, /* filled at runtime */ | 77 | .start = -1, /* filled at runtime */ |
| @@ -99,6 +101,8 @@ static struct platform_device bcm63xx_enet0_device = { · 23 unmodified lines | |||
| 99 | .resource = enet0_res, | 101 | .resource = enet0_res, |
| 100 | .dev = { | 102 | .dev = { |
| 101 | .platform_data = &enet0_pd, | 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 | .resource = enet1_res, | 135 | .resource = enet1_res, |
| 132 | .dev = { | 136 | .dev = { |
| 133 | .platform_data = &enet1_pd, | 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 | .resource = enetsw_res, | 163 | .resource = enetsw_res, |
| 158 | .dev = { | 164 | .dev = { |
| 159 | .platform_data = &enetsw_pd, | 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 | unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old, | 54 | unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old, |
| 55 | unsigned long new, unsigned int size) | 55 | unsigned long new, unsigned int size) |
| 56 | { | 56 | { |
| 57 | u32 mask, old32, new32, load32; | 57 | u32 mask, old32, new32, load32, load; |
| 58 | volatile u32 *ptr32; | 58 | volatile u32 *ptr32; |
| 59 | unsigned int shift; | 59 | unsigned int shift; |
| 60 | u8 load; | ||
| 61 | 60 | ||
| 62 | /* Check that ptr is naturally aligned */ | 61 | /* Check that ptr is naturally aligned */ |
| 63 | WARN_ON((unsigned long)ptr & (size - 1)); | 62 | WARN_ON((unsigned long)ptr & (size - 1)); |
| @@ -384,7 +384,8 @@ static void __init bootmem_init(void) · 383 unmodified lines | |||
| 384 | init_initrd(); | 384 | init_initrd(); |
| 385 | reserved_end = (unsigned long) PFN_UP(__pa_symbol(&_end)); | 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 | * max_low_pfn is not a number of pages. The number of pages | 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 | dma_addr_t dma; | 31 | dma_addr_t dma; |
| 32 | 32 | ||
| 33 | cp1_base = | 33 | cp1_base = |
| 34 | (void *) CPHYSADDR(dma_alloc_coherent(NULL, CP1_SIZE, | 34 | (void *) CPHYSADDR(dma_alloc_coherent(&pdev->dev, CP1_SIZE, |
| 35 | &dma, GFP_ATOMIC)); | 35 | &dma, GFP_KERNEL)); |
| 36 | 36 | ||
| 37 | gpio_count = of_gpio_count(pdev->dev.of_node); | 37 | gpio_count = of_gpio_count(pdev->dev.of_node); |
| 38 | while (gpio_count > 0) { | 38 | while (gpio_count > 0) { |