Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'next' of https://git.kernel.org/pub/scm/linux/kernel/git/scottwood/linux into next

Freescale updates from Scott:

"Contains fixes for CPM GPIO and an FSL PCI erratum workaround, plus a
minor cleanup patch."

+99 -43
+1 -1
arch/powerpc/include/asm/cpm.h
··· 166 166 } 167 167 #endif /* CONFIG_CPM */ 168 168 169 - int cpm2_gpiochip_add32(struct device_node *np); 169 + int cpm2_gpiochip_add32(struct device *dev); 170 170 171 171 #endif
+2
arch/powerpc/include/asm/cpm1.h
··· 605 605 }; 606 606 607 607 int cpm1_clk_setup(enum cpm_clk_target target, int clock, int mode); 608 + int cpm1_gpiochip_add16(struct device *dev); 609 + int cpm1_gpiochip_add32(struct device *dev); 608 610 609 611 #endif /* __CPM1__ */
+2 -1
arch/powerpc/sysdev/Makefile
··· 43 43 44 44 obj-$(CONFIG_CPM) += cpm_common.o 45 45 obj-$(CONFIG_CPM1) += cpm1.o 46 - obj-$(CONFIG_CPM2) += cpm2.o cpm2_pic.o 46 + obj-$(CONFIG_CPM2) += cpm2.o cpm2_pic.o cpm_gpio.o 47 + obj-$(CONFIG_8xx_GPIO) += cpm_gpio.o 47 48 obj-$(CONFIG_QUICC_ENGINE) += cpm_common.o 48 49 obj-$(CONFIG_PPC_DCR) += dcr.o 49 50 obj-$(CONFIG_UCODE_PATCH) += micropatch.o
+8 -25
arch/powerpc/sysdev/cpm1.c
··· 629 629 return 0; 630 630 } 631 631 632 - int cpm1_gpiochip_add16(struct device_node *np) 632 + int cpm1_gpiochip_add16(struct device *dev) 633 633 { 634 + struct device_node *np = dev->of_node; 634 635 struct cpm1_gpio16_chip *cpm1_gc; 635 636 struct of_mm_gpio_chip *mm_gc; 636 637 struct gpio_chip *gc; ··· 661 660 gc->get = cpm1_gpio16_get; 662 661 gc->set = cpm1_gpio16_set; 663 662 gc->to_irq = cpm1_gpio16_to_irq; 663 + gc->parent = dev; 664 + gc->owner = THIS_MODULE; 664 665 665 666 return of_mm_gpiochip_add_data(np, mm_gc, cpm1_gc); 666 667 } ··· 758 755 return 0; 759 756 } 760 757 761 - int cpm1_gpiochip_add32(struct device_node *np) 758 + int cpm1_gpiochip_add32(struct device *dev) 762 759 { 760 + struct device_node *np = dev->of_node; 763 761 struct cpm1_gpio32_chip *cpm1_gc; 764 762 struct of_mm_gpio_chip *mm_gc; 765 763 struct gpio_chip *gc; ··· 780 776 gc->direction_output = cpm1_gpio32_dir_out; 781 777 gc->get = cpm1_gpio32_get; 782 778 gc->set = cpm1_gpio32_set; 779 + gc->parent = dev; 780 + gc->owner = THIS_MODULE; 783 781 784 782 return of_mm_gpiochip_add_data(np, mm_gc, cpm1_gc); 785 783 } 786 - 787 - static int cpm_init_par_io(void) 788 - { 789 - struct device_node *np; 790 - 791 - for_each_compatible_node(np, NULL, "fsl,cpm1-pario-bank-a") 792 - cpm1_gpiochip_add16(np); 793 - 794 - for_each_compatible_node(np, NULL, "fsl,cpm1-pario-bank-b") 795 - cpm1_gpiochip_add32(np); 796 - 797 - for_each_compatible_node(np, NULL, "fsl,cpm1-pario-bank-c") 798 - cpm1_gpiochip_add16(np); 799 - 800 - for_each_compatible_node(np, NULL, "fsl,cpm1-pario-bank-d") 801 - cpm1_gpiochip_add16(np); 802 - 803 - /* Port E uses CPM2 layout */ 804 - for_each_compatible_node(np, NULL, "fsl,cpm1-pario-bank-e") 805 - cpm2_gpiochip_add32(np); 806 - return 0; 807 - } 808 - arch_initcall(cpm_init_par_io); 809 784 810 785 #endif /* CONFIG_8xx_GPIO */
-11
arch/powerpc/sysdev/cpm2.c
··· 354 354 else 355 355 clrbits32(&iop[port].odr, pin); 356 356 } 357 - 358 - static int cpm_init_par_io(void) 359 - { 360 - struct device_node *np; 361 - 362 - for_each_compatible_node(np, NULL, "fsl,cpm2-pario-bank") 363 - cpm2_gpiochip_add32(np); 364 - return 0; 365 - } 366 - arch_initcall(cpm_init_par_io); 367 -
+4 -1
arch/powerpc/sysdev/cpm_common.c
··· 190 190 return 0; 191 191 } 192 192 193 - int cpm2_gpiochip_add32(struct device_node *np) 193 + int cpm2_gpiochip_add32(struct device *dev) 194 194 { 195 + struct device_node *np = dev->of_node; 195 196 struct cpm2_gpio32_chip *cpm2_gc; 196 197 struct of_mm_gpio_chip *mm_gc; 197 198 struct gpio_chip *gc; ··· 212 211 gc->direction_output = cpm2_gpio32_dir_out; 213 212 gc->get = cpm2_gpio32_get; 214 213 gc->set = cpm2_gpio32_set; 214 + gc->parent = dev; 215 + gc->owner = THIS_MODULE; 215 216 216 217 return of_mm_gpiochip_add_data(np, mm_gc, cpm2_gc); 217 218 }
+80
arch/powerpc/sysdev/cpm_gpio.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Common CPM GPIO wrapper for the CPM GPIO ports 4 + * 5 + * Author: Christophe Leroy <christophe.leroy@c-s.fr> 6 + * 7 + * Copyright 2017 CS Systemes d'Information. 8 + * 9 + */ 10 + 11 + #include <linux/module.h> 12 + #include <linux/of_device.h> 13 + 14 + #include <asm/cpm.h> 15 + #ifdef CONFIG_8xx_GPIO 16 + #include <asm/cpm1.h> 17 + #endif 18 + 19 + static int cpm_gpio_probe(struct platform_device *ofdev) 20 + { 21 + struct device *dev = &ofdev->dev; 22 + int (*gp_add)(struct device *dev) = of_device_get_match_data(dev); 23 + 24 + if (!gp_add) 25 + return -ENODEV; 26 + 27 + return gp_add(dev); 28 + } 29 + 30 + static const struct of_device_id cpm_gpio_match[] = { 31 + #ifdef CONFIG_8xx_GPIO 32 + { 33 + .compatible = "fsl,cpm1-pario-bank-a", 34 + .data = cpm1_gpiochip_add16, 35 + }, 36 + { 37 + .compatible = "fsl,cpm1-pario-bank-b", 38 + .data = cpm1_gpiochip_add32, 39 + }, 40 + { 41 + .compatible = "fsl,cpm1-pario-bank-c", 42 + .data = cpm1_gpiochip_add16, 43 + }, 44 + { 45 + .compatible = "fsl,cpm1-pario-bank-d", 46 + .data = cpm1_gpiochip_add16, 47 + }, 48 + /* Port E uses CPM2 layout */ 49 + { 50 + .compatible = "fsl,cpm1-pario-bank-e", 51 + .data = cpm2_gpiochip_add32, 52 + }, 53 + #endif 54 + { 55 + .compatible = "fsl,cpm2-pario-bank", 56 + .data = cpm2_gpiochip_add32, 57 + }, 58 + {}, 59 + }; 60 + MODULE_DEVICE_TABLE(of, cpm_gpio_match); 61 + 62 + static struct platform_driver cpm_gpio_driver = { 63 + .probe = cpm_gpio_probe, 64 + .driver = { 65 + .name = "cpm-gpio", 66 + .owner = THIS_MODULE, 67 + .of_match_table = cpm_gpio_match, 68 + }, 69 + }; 70 + 71 + static int __init cpm_gpio_init(void) 72 + { 73 + return platform_driver_register(&cpm_gpio_driver); 74 + } 75 + arch_initcall(cpm_gpio_init); 76 + 77 + MODULE_AUTHOR("Christophe Leroy <christophe.leroy@c-s.fr>"); 78 + MODULE_DESCRIPTION("Driver for CPM GPIO"); 79 + MODULE_LICENSE("GPL"); 80 + MODULE_ALIAS("platform:cpm-gpio");
+2 -4
arch/powerpc/sysdev/fsl_pci.c
··· 1070 1070 if (is_in_pci_mem_space(addr)) { 1071 1071 if (user_mode(regs)) { 1072 1072 pagefault_disable(); 1073 - ret = get_user(regs->nip, &inst); 1073 + ret = get_user(inst, (__u32 __user *)regs->nip); 1074 1074 pagefault_enable(); 1075 1075 } else { 1076 1076 ret = probe_kernel_address((void *)regs->nip, inst); ··· 1304 1304 pdev->resource, 1305 1305 pdev->num_resources, 1306 1306 &pd, sizeof(pd)); 1307 - if (IS_ERR(errdev)) 1308 - return PTR_ERR(errdev); 1309 1307 1310 - return 0; 1308 + return PTR_ERR_OR_ZERO(errdev); 1311 1309 } 1312 1310 1313 1311 static int fsl_pci_probe(struct platform_device *pdev)