Bladeren bron

Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc

Pull ARM SoC fixes from Olof Johansson:

 - Fix interrupt type on ethernet switch for i.MX-based RDU2

 - GPC on i.MX exposed too large a register window which resulted in
   userspace being able to crash the machine.

 - Fixup of bad merge resolution moving GPIO DT nodes under pinctrl on
   droid4.

* tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
  ARM: dts: imx6: RDU2: fix irq type for mv88e6xxx switch
  soc: imx: gpc: restrict register range for regmap access
  ARM: dts: omap4-droid4: fix dts w.r.t. pwm
Linus Torvalds 7 jaren geleden
bovenliggende
commit
45ae4df922
3 gewijzigde bestanden met toevoegingen van 25 en 7 verwijderingen
  1. 1 1
      arch/arm/boot/dts/imx6qdl-zii-rdu2.dtsi
  2. 3 6
      arch/arm/boot/dts/omap4-droid4-xt894.dts
  3. 21 0
      drivers/soc/imx/gpc.c

+ 1 - 1
arch/arm/boot/dts/imx6qdl-zii-rdu2.dtsi

@@ -692,7 +692,7 @@
 			dsa,member = <0 0>;
 			dsa,member = <0 0>;
 			eeprom-length = <512>;
 			eeprom-length = <512>;
 			interrupt-parent = <&gpio6>;
 			interrupt-parent = <&gpio6>;
-			interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
+			interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
 			interrupt-controller;
 			interrupt-controller;
 			#interrupt-cells = <2>;
 			#interrupt-cells = <2>;
 
 

+ 3 - 6
arch/arm/boot/dts/omap4-droid4-xt894.dts

@@ -159,13 +159,7 @@
 
 
 		dais = <&mcbsp2_port>, <&mcbsp3_port>;
 		dais = <&mcbsp2_port>, <&mcbsp3_port>;
 	};
 	};
-};
-
-&dss {
-	status = "okay";
-};
 
 
-&gpio6 {
 	pwm8: dmtimer-pwm-8 {
 	pwm8: dmtimer-pwm-8 {
 		pinctrl-names = "default";
 		pinctrl-names = "default";
 		pinctrl-0 = <&vibrator_direction_pin>;
 		pinctrl-0 = <&vibrator_direction_pin>;
@@ -192,7 +186,10 @@
 		pwm-names = "enable", "direction";
 		pwm-names = "enable", "direction";
 		direction-duty-cycle-ns = <10000000>;
 		direction-duty-cycle-ns = <10000000>;
 	};
 	};
+};
 
 
+&dss {
+	status = "okay";
 };
 };
 
 
 &dsi1 {
 &dsi1 {

+ 21 - 0
drivers/soc/imx/gpc.c

@@ -27,9 +27,16 @@
 #define GPC_PGC_SW2ISO_SHIFT	0x8
 #define GPC_PGC_SW2ISO_SHIFT	0x8
 #define GPC_PGC_SW_SHIFT	0x0
 #define GPC_PGC_SW_SHIFT	0x0
 
 
+#define GPC_PGC_PCI_PDN		0x200
+#define GPC_PGC_PCI_SR		0x20c
+
 #define GPC_PGC_GPU_PDN		0x260
 #define GPC_PGC_GPU_PDN		0x260
 #define GPC_PGC_GPU_PUPSCR	0x264
 #define GPC_PGC_GPU_PUPSCR	0x264
 #define GPC_PGC_GPU_PDNSCR	0x268
 #define GPC_PGC_GPU_PDNSCR	0x268
+#define GPC_PGC_GPU_SR		0x26c
+
+#define GPC_PGC_DISP_PDN	0x240
+#define GPC_PGC_DISP_SR		0x24c
 
 
 #define GPU_VPU_PUP_REQ		BIT(1)
 #define GPU_VPU_PUP_REQ		BIT(1)
 #define GPU_VPU_PDN_REQ		BIT(0)
 #define GPU_VPU_PDN_REQ		BIT(0)
@@ -318,10 +325,24 @@ static const struct of_device_id imx_gpc_dt_ids[] = {
 	{ }
 	{ }
 };
 };
 
 
+static const struct regmap_range yes_ranges[] = {
+	regmap_reg_range(GPC_CNTR, GPC_CNTR),
+	regmap_reg_range(GPC_PGC_PCI_PDN, GPC_PGC_PCI_SR),
+	regmap_reg_range(GPC_PGC_GPU_PDN, GPC_PGC_GPU_SR),
+	regmap_reg_range(GPC_PGC_DISP_PDN, GPC_PGC_DISP_SR),
+};
+
+static const struct regmap_access_table access_table = {
+	.yes_ranges	= yes_ranges,
+	.n_yes_ranges	= ARRAY_SIZE(yes_ranges),
+};
+
 static const struct regmap_config imx_gpc_regmap_config = {
 static const struct regmap_config imx_gpc_regmap_config = {
 	.reg_bits = 32,
 	.reg_bits = 32,
 	.val_bits = 32,
 	.val_bits = 32,
 	.reg_stride = 4,
 	.reg_stride = 4,
+	.rd_table = &access_table,
+	.wr_table = &access_table,
 	.max_register = 0x2ac,
 	.max_register = 0x2ac,
 };
 };