diff options
author | Peter Robinson <pbrobinson@gmail.com> | 2018-09-07 10:22:54 +0100 |
---|---|---|
committer | Peter Robinson <pbrobinson@gmail.com> | 2018-09-07 10:22:54 +0100 |
commit | f607ba7581e429900192f457de90b58e9bb6d913 (patch) | |
tree | 8c3b3ec81c9beb5c56d63630076265c82cf5a5bd | |
parent | 151d4019f7435cc798df88d242e3c6e024fa5f12 (diff) | |
download | kernel-f607ba7581e429900192f457de90b58e9bb6d913.tar.gz kernel-f607ba7581e429900192f457de90b58e9bb6d913.tar.xz kernel-f607ba7581e429900192f457de90b58e9bb6d913.zip |
drop ARM feature enablement bits that weren't meant to go < f29
-rw-r--r-- | arm-dts-armada388-helios4.patch | 352 | ||||
-rw-r--r-- | bcm2835-cpufreq-add-CPU-frequency-control-driver.patch | 301 | ||||
-rw-r--r-- | bcm2835-hwmon-Add-support-for-RPi-voltage-sensor.patch | 403 | ||||
-rw-r--r-- | kernel.spec | 6 |
4 files changed, 0 insertions, 1062 deletions
diff --git a/arm-dts-armada388-helios4.patch b/arm-dts-armada388-helios4.patch deleted file mode 100644 index abfbbc299..000000000 --- a/arm-dts-armada388-helios4.patch +++ /dev/null @@ -1,352 +0,0 @@ -From ced8025b569e21c31b52cc80410ed49d0bf13368 Mon Sep 17 00:00:00 2001 -From: Dennis Gilmore <dennis@ausil.us> -Date: Tue, 5 Jun 2018 17:15:45 -0500 -Subject: ARM: dts: armada388-helios4 - -The helios4 is a Armada388 based nas board designed by SolidRun and -based on their SOM. It is sold by kobol.io the dts file came from -https://raw.githubusercontent.com/armbian/build/master/patch/kernel/mvebu-default/95-helios4-device-tree.patch -I added a SPDX license line to match the clearfog it says it was based -on and a compatible line for "kobol,helios4" - -Signed-off-by: Dennis Gilmore <dennis@ausil.us> -Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com> ---- - arch/arm/boot/dts/Makefile | 1 + - arch/arm/boot/dts/armada-388-helios4.dts | 313 +++++++++++++++++++++++++++++++ - 2 files changed, 314 insertions(+) - create mode 100644 arch/arm/boot/dts/armada-388-helios4.dts - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 37a3de760d40..55133fac83ab 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -1138,6 +1138,7 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \ - armada-388-clearfog-pro.dtb \ - armada-388-db.dtb \ - armada-388-gp.dtb \ -+ armada-388-helios4.dtb \ - armada-388-rd.dtb - dtb-$(CONFIG_MACH_ARMADA_39X) += \ - armada-398-db.dtb -diff --git a/arch/arm/boot/dts/armada-388-helios4.dts b/arch/arm/boot/dts/armada-388-helios4.dts -new file mode 100644 -index 000000000000..705adfa8c680 ---- /dev/null -+++ b/arch/arm/boot/dts/armada-388-helios4.dts -@@ -0,0 +1,313 @@ -+// SPDX-License-Identifier: (GPL-2.0 OR MIT) -+/* -+ * Device Tree file for Helios4 -+ * based on SolidRun Clearfog revision A1 rev 2.0 (88F6828) -+ * -+ * Copyright (C) 2017 Aditya Prayoga <aditya@kobol.io> -+ * -+ */ -+ -+/dts-v1/; -+#include "armada-388.dtsi" -+#include "armada-38x-solidrun-microsom.dtsi" -+ -+/ { -+ model = "Helios4"; -+ compatible = "kobol,helios4", "marvell,armada388", -+ "marvell,armada385", "marvell,armada380"; -+ -+ memory { -+ device_type = "memory"; -+ reg = <0x00000000 0x80000000>; /* 2 GB */ -+ }; -+ -+ aliases { -+ /* So that mvebu u-boot can update the MAC addresses */ -+ ethernet1 = ð0; -+ }; -+ -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ -+ reg_12v: regulator-12v { -+ compatible = "regulator-fixed"; -+ regulator-name = "power_brick_12V"; -+ regulator-min-microvolt = <12000000>; -+ regulator-max-microvolt = <12000000>; -+ regulator-always-on; -+ }; -+ -+ reg_3p3v: regulator-3p3v { -+ compatible = "regulator-fixed"; -+ regulator-name = "3P3V"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-always-on; -+ vin-supply = <®_12v>; -+ }; -+ -+ reg_5p0v_hdd: regulator-5v-hdd { -+ compatible = "regulator-fixed"; -+ regulator-name = "5V_HDD"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ regulator-always-on; -+ vin-supply = <®_12v>; -+ }; -+ -+ reg_5p0v_usb: regulator-5v-usb { -+ compatible = "regulator-fixed"; -+ regulator-name = "USB-PWR"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ regulator-boot-on; -+ regulator-always-on; -+ enable-active-high; -+ gpio = <&expander0 6 GPIO_ACTIVE_HIGH>; -+ vin-supply = <®_12v>; -+ }; -+ -+ system-leds { -+ compatible = "gpio-leds"; -+ status-led { -+ label = "helios4:green:status"; -+ gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; -+ linux,default-trigger = "heartbeat"; -+ default-state = "on"; -+ }; -+ -+ fault-led { -+ label = "helios4:red:fault"; -+ gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; -+ default-state = "keep"; -+ }; -+ }; -+ -+ io-leds { -+ compatible = "gpio-leds"; -+ sata1-led { -+ label = "helios4:green:ata1"; -+ gpios = <&gpio1 17 GPIO_ACTIVE_LOW>; -+ linux,default-trigger = "ata1"; -+ default-state = "off"; -+ }; -+ sata2-led { -+ label = "helios4:green:ata2"; -+ gpios = <&gpio1 18 GPIO_ACTIVE_LOW>; -+ linux,default-trigger = "ata2"; -+ default-state = "off"; -+ }; -+ sata3-led { -+ label = "helios4:green:ata3"; -+ gpios = <&gpio1 20 GPIO_ACTIVE_LOW>; -+ linux,default-trigger = "ata3"; -+ default-state = "off"; -+ }; -+ sata4-led { -+ label = "helios4:green:ata4"; -+ gpios = <&gpio1 21 GPIO_ACTIVE_LOW>; -+ linux,default-trigger = "ata4"; -+ default-state = "off"; -+ }; -+ usb-led { -+ label = "helios4:green:usb"; -+ gpios = <&gpio1 22 GPIO_ACTIVE_LOW>; -+ linux,default-trigger = "usb-host"; -+ default-state = "off"; -+ }; -+ }; -+ -+ fan1: j10-pwm { -+ compatible = "pwm-fan"; -+ pwms = <&gpio1 9 40000>; /* Target freq:25 kHz */ -+ }; -+ -+ fan2: j17-pwm { -+ compatible = "pwm-fan"; -+ pwms = <&gpio1 23 40000>; /* Target freq:25 kHz */ -+ }; -+ -+ usb2_phy: usb2-phy { -+ compatible = "usb-nop-xceiv"; -+ vbus-regulator = <®_5p0v_usb>; -+ }; -+ -+ usb3_phy: usb3-phy { -+ compatible = "usb-nop-xceiv"; -+ }; -+ -+ soc { -+ internal-regs { -+ i2c@11000 { -+ clock-frequency = <400000>; -+ pinctrl-0 = <&i2c0_pins>; -+ pinctrl-names = "default"; -+ status = "okay"; -+ -+ /* -+ * PCA9655 GPIO expander, up to 1MHz clock. -+ * 0-Board Revision bit 0 # -+ * 1-Board Revision bit 1 # -+ * 5-USB3 overcurrent -+ * 6-USB3 power -+ */ -+ expander0: gpio-expander@20 { -+ /* -+ * This is how it should be: -+ * compatible = "onnn,pca9655", -+ * "nxp,pca9555"; -+ * but you can't do this because of -+ * the way I2C works. -+ */ -+ compatible = "nxp,pca9555"; -+ gpio-controller; -+ #gpio-cells = <2>; -+ reg = <0x20>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pca0_pins>; -+ interrupt-parent = <&gpio0>; -+ interrupts = <23 IRQ_TYPE_EDGE_FALLING>; -+ interrupt-controller; -+ #interrupt-cells = <2>; -+ -+ board_rev_bit_0 { -+ gpio-hog; -+ gpios = <0 GPIO_ACTIVE_LOW>; -+ input; -+ line-name = "board-rev-0"; -+ }; -+ board_rev_bit_1 { -+ gpio-hog; -+ gpios = <1 GPIO_ACTIVE_LOW>; -+ input; -+ line-name = "board-rev-1"; -+ }; -+ usb3_ilimit { -+ gpio-hog; -+ gpios = <5 GPIO_ACTIVE_HIGH>; -+ input; -+ line-name = "usb-overcurrent-status"; -+ }; -+ }; -+ -+ temp_sensor: temp@4c { -+ compatible = "ti,lm75"; -+ reg = <0x4c>; -+ vcc-supply = <®_3p3v>; -+ }; -+ }; -+ -+ i2c@11100 { -+ /* -+ * External I2C Bus for user peripheral -+ */ -+ clock-frequency = <400000>; -+ pinctrl-0 = <&helios_i2c1_pins>; -+ pinctrl-names = "default"; -+ status = "okay"; -+ }; -+ -+ sata@a8000 { -+ status = "okay"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ sata0: sata-port@0 { -+ reg = <0>; -+ }; -+ -+ sata1: sata-port@1 { -+ reg = <1>; -+ }; -+ }; -+ -+ sata@e0000 { -+ status = "okay"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ sata2: sata-port@0 { -+ reg = <0>; -+ }; -+ -+ sata3: sata-port@1 { -+ reg = <1>; -+ }; -+ }; -+ -+ spi@10680 { -+ pinctrl-0 = <&spi1_pins -+ µsom_spi1_cs_pins>; -+ pinctrl-names = "default"; -+ status = "okay"; -+ }; -+ -+ sdhci@d8000 { -+ bus-width = <4>; -+ cd-gpios = <&gpio0 20 GPIO_ACTIVE_LOW>; -+ no-1-8-v; -+ pinctrl-0 = <&helios_sdhci_pins -+ &helios_sdhci_cd_pins>; -+ pinctrl-names = "default"; -+ status = "okay"; -+ vmmc = <®_3p3v>; -+ wp-inverted; -+ }; -+ -+ usb@58000 { -+ usb-phy = <&usb2_phy>; -+ status = "okay"; -+ }; -+ -+ usb3@f0000 { -+ status = "okay"; -+ }; -+ -+ usb3@f8000 { -+ status = "okay"; -+ }; -+ -+ pinctrl@18000 { -+ pca0_pins: pca0-pins { -+ marvell,pins = "mpp23"; -+ marvell,function = "gpio"; -+ }; -+ microsom_phy0_int_pins: microsom-phy0-int-pins { -+ marvell,pins = "mpp18"; -+ marvell,function = "gpio"; -+ }; -+ helios_i2c1_pins: i2c1-pins { -+ marvell,pins = "mpp26", "mpp27"; -+ marvell,function = "i2c1"; -+ }; -+ helios_sdhci_cd_pins: helios-sdhci-cd-pins { -+ marvell,pins = "mpp20"; -+ marvell,function = "gpio"; -+ }; -+ helios_sdhci_pins: helios-sdhci-pins { -+ marvell,pins = "mpp21", "mpp28", -+ "mpp37", "mpp38", -+ "mpp39", "mpp40"; -+ marvell,function = "sd0"; -+ }; -+ helios_led_pins: helios-led-pins { -+ marvell,pins = "mpp24", "mpp25", -+ "mpp49", "mpp50", -+ "mpp52", "mpp53", -+ "mpp54"; -+ marvell,function = "gpio"; -+ }; -+ helios_fan_pins: helios-fan-pins { -+ marvell,pins = "mpp41", "mpp43", -+ "mpp48", "mpp55"; -+ marvell,function = "gpio"; -+ }; -+ microsom_spi1_cs_pins: spi1-cs-pins { -+ marvell,pins = "mpp59"; -+ marvell,function = "spi1"; -+ }; -+ }; -+ }; -+ }; -+}; --- -cgit 1.2-0.3.lf.el7 diff --git a/bcm2835-cpufreq-add-CPU-frequency-control-driver.patch b/bcm2835-cpufreq-add-CPU-frequency-control-driver.patch deleted file mode 100644 index 1ab2c7750..000000000 --- a/bcm2835-cpufreq-add-CPU-frequency-control-driver.patch +++ /dev/null @@ -1,301 +0,0 @@ -From 624e057827435de39274c34e20c2d937cb9d4ac3 Mon Sep 17 00:00:00 2001 -From: Peter Robinson <pbrobinson@gmail.com> -Date: Thu, 31 May 2018 19:08:12 +0100 -Subject: [PATCH] bcm2835: cpufreq: add CPU frequency control driver - -Signed-off-by: Peter Robinson <pbrobinson@gmail.com> ---- - arch/arm/boot/dts/bcm2835-rpi.dtsi | 7 ++ - arch/arm/boot/dts/bcm2837.dtsi | 33 +++++++ - drivers/clk/bcm/Kconfig | 8 ++ - drivers/clk/bcm/Makefile | 1 + - drivers/clk/bcm/clk-raspberrypi.c | 138 +++++++++++++++++++++++++++++ - 5 files changed, 187 insertions(+) - create mode 100644 drivers/clk/bcm/clk-raspberrypi.c - -diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi -index 6c3cfaa77f3d..e6d1627ec421 100644 ---- a/arch/arm/boot/dts/bcm2835-rpi.dtsi -+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi -@@ -35,6 +35,13 @@ - reg = <0x7e00b840 0xf>; - interrupts = <0 2>; - }; -+ -+ arm_clk: arm_clk { -+ compatible = "raspberrypi,bcm2835-cpu"; -+ clocks = <&clocks BCM2835_CLOCK_VPU>; -+ #clock-cells = <0>; -+ clock-output-names = "arm"; -+ }; - }; - }; - -diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi -index 7704bb029605..c24176282a1f 100644 ---- a/arch/arm/boot/dts/bcm2837.dtsi -+++ b/arch/arm/boot/dts/bcm2837.dtsi -@@ -38,6 +38,9 @@ - reg = <0>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x000000d8>; -+ clocks = <&arm_clk>; -+ clock-names = "cpu"; -+ operating-points-v2 = <&cpu0_opp_table>; - }; - - cpu1: cpu@1 { -@@ -46,6 +49,9 @@ - reg = <1>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x000000e0>; -+ clocks = <&arm_clk>; -+ clock-names = "cpu"; -+ operating-points-v2 = <&cpu0_opp_table>; - }; - - cpu2: cpu@2 { -@@ -54,6 +60,9 @@ - reg = <2>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x000000e8>; -+ clocks = <&arm_clk>; -+ clock-names = "cpu"; -+ operating-points-v2 = <&cpu0_opp_table>; - }; - - cpu3: cpu@3 { -@@ -62,6 +71,30 @@ - reg = <3>; - enable-method = "spin-table"; - cpu-release-addr = <0x0 0x000000f0>; -+ clocks = <&arm_clk>; -+ clock-names = "cpu"; -+ operating-points-v2 = <&cpu0_opp_table>; -+ }; -+ }; -+ -+ cpu0_opp_table: opp_table0 { -+ compatible = "operating-points-v2"; -+ opp-shared; -+ -+ opp@600000000 { -+ opp-hz = /bits/ 64 <600000000>; -+ clock-latency-ns = <355000>; -+ opp-suspend; -+ }; -+ -+ opp@900000000 { -+ opp-hz = /bits/ 64 <900000000>; -+ clock-latency-ns = <355000>; -+ }; -+ -+ opp@1200000000 { -+ opp-hz = /bits/ 64 <1200000000>; -+ clock-latency-ns = <355000>; - }; - }; - }; -diff --git a/drivers/clk/bcm/Kconfig b/drivers/clk/bcm/Kconfig -index 4c4bd85f707c..e40bd19da22b 100644 ---- a/drivers/clk/bcm/Kconfig -+++ b/drivers/clk/bcm/Kconfig -@@ -63,3 +63,11 @@ config CLK_BCM_SR - default ARCH_BCM_IPROC - help - Enable common clock framework support for the Broadcom Stingray SoC -+ -+config CLK_RASPBERRYPI_CPU -+ bool "Raspberry Pi CPU clock driver" -+ depends on ARCH_BCM2835 || (COMPILE_TEST && OF) -+ depends on RASPBERRYPI_FIRMWARE=y -+ help -+ This enables support for the RPi CPU clock which can be adjusted -+ via the RPi firmware. -diff --git a/drivers/clk/bcm/Makefile b/drivers/clk/bcm/Makefile -index 002661d39128..a028b0a90b6e 100644 ---- a/drivers/clk/bcm/Makefile -+++ b/drivers/clk/bcm/Makefile -@@ -8,6 +8,7 @@ obj-$(CONFIG_COMMON_CLK_IPROC) += clk-iproc-armpll.o clk-iproc-pll.o clk-iproc-a - obj-$(CONFIG_ARCH_BCM2835) += clk-bcm2835.o - obj-$(CONFIG_ARCH_BCM2835) += clk-bcm2835-aux.o - obj-$(CONFIG_ARCH_BCM_53573) += clk-bcm53573-ilp.o -+obj-$(CONFIG_CLK_RASPBERRYPI_CPU) += clk-raspberrypi.o - obj-$(CONFIG_CLK_BCM_CYGNUS) += clk-cygnus.o - obj-$(CONFIG_CLK_BCM_HR2) += clk-hr2.o - obj-$(CONFIG_CLK_BCM_NSP) += clk-nsp.o -diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-raspberrypi.c -new file mode 100644 -index 000000000000..046efc822a59 ---- /dev/null -+++ b/drivers/clk/bcm/clk-raspberrypi.c -@@ -0,0 +1,138 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* -+ * Raspberry Pi CPU clock driver -+ * -+ * Copyright (C) 2018 Stefan Wahren <stefan.wahren@i2se.com> -+ */ -+ -+#include <linux/clk.h> -+#include <linux/clk-provider.h> -+#include <linux/device.h> -+#include <linux/err.h> -+#include <linux/module.h> -+#include <linux/of_device.h> -+#include <linux/platform_device.h> -+#include <linux/slab.h> -+#include <soc/bcm2835/raspberrypi-firmware.h> -+ -+#define VCMSG_ID_ARM_CLOCK 0x000000003 /* Clock/Voltage ID's */ -+ -+struct rpi_cpu_clkgen { -+ struct clk_hw hw; -+ struct rpi_firmware *fw; -+}; -+ -+/* tag part of the message */ -+struct prop { -+ u32 id; /* the ID of the clock/voltage to get or set */ -+ u32 val; /* the value (e.g. rate (in Hz)) to set */ -+} __packed; -+ -+static int rpi_cpu_clock_property(struct rpi_firmware *fw, u32 tag, u32 *val) -+{ -+ int ret; -+ struct prop msg = { -+ .id = VCMSG_ID_ARM_CLOCK, -+ .val = *val, -+ }; -+ -+ ret = rpi_firmware_property(fw, tag, &msg, sizeof(msg)); -+ if (ret) -+ return ret; -+ -+ *val = msg.val; -+ -+ return 0; -+} -+ -+static unsigned long rpi_cpu_get_rate(struct clk_hw *hw, -+ unsigned long parent_rate) -+{ -+ struct rpi_cpu_clkgen *cpu = container_of(hw, struct rpi_cpu_clkgen, hw); -+ u32 rate = 0; -+ -+ rpi_cpu_clock_property(cpu->fw, RPI_FIRMWARE_GET_CLOCK_RATE, &rate); -+ -+ return rate; -+} -+ -+static long rpi_cpu_round_rate(struct clk_hw *hw, unsigned long rate, -+ unsigned long *parent_rate) -+{ -+ return rate; -+} -+ -+static int rpi_cpu_set_rate(struct clk_hw *hw, unsigned long rate, -+ unsigned long parent_rate) -+{ -+ struct rpi_cpu_clkgen *cpu = container_of(hw, struct rpi_cpu_clkgen, hw); -+ u32 new_rate = rate; -+ -+ return rpi_cpu_clock_property(cpu->fw, RPI_FIRMWARE_SET_CLOCK_RATE, -+ &new_rate); -+} -+ -+static const struct clk_ops rpi_cpu_ops = { -+ .recalc_rate = rpi_cpu_get_rate, -+ .round_rate = rpi_cpu_round_rate, -+ .set_rate = rpi_cpu_set_rate, -+}; -+ -+static int rpi_cpu_probe(struct platform_device *pdev) -+{ -+ struct device *dev = &pdev->dev; -+ struct device_node *fw_node; -+ struct rpi_cpu_clkgen *cpu; -+ struct clk_init_data *init; -+ int ret; -+ -+ cpu = devm_kzalloc(dev, sizeof(*cpu), GFP_KERNEL); -+ if (!cpu) -+ return -ENOMEM; -+ -+ init = devm_kzalloc(dev, sizeof(*init), GFP_KERNEL); -+ if (!init) -+ return -ENOMEM; -+ -+ fw_node = of_find_compatible_node(NULL, NULL, -+ "raspberrypi,bcm2835-firmware"); -+ if (!fw_node) { -+ dev_err(dev, "Missing firmware node\n"); -+ return -ENOENT; -+ } -+ -+ cpu->fw = rpi_firmware_get(fw_node); -+ of_node_put(fw_node); -+ if (!cpu->fw) -+ return -EPROBE_DEFER; -+ -+ init->name = dev->of_node->name; -+ init->ops = &rpi_cpu_ops; -+ -+ cpu->hw.init = init; -+ ret = devm_clk_hw_register(dev, &cpu->hw); -+ if (ret) -+ return ret; -+ -+ return of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get, -+ &cpu->hw); -+} -+ -+static const struct of_device_id rpi_cpu_of_match[] = { -+ { .compatible = "raspberrypi,bcm2835-cpu", }, -+ {}, -+}; -+MODULE_DEVICE_TABLE(of, rpi_cpu_of_match); -+ -+static struct platform_driver rpi_cpu_driver = { -+ .driver = { -+ .name = "raspberrypi-cpu", -+ .of_match_table = rpi_cpu_of_match, -+ }, -+ .probe = rpi_cpu_probe, -+}; -+builtin_platform_driver(rpi_cpu_driver); -+ -+MODULE_AUTHOR("Stefan Wahren <stefan.wahren@i2se.com>"); -+MODULE_DESCRIPTION("Raspberry Pi CPU clock driver"); -+MODULE_LICENSE("GPL v2"); --- -2.17.0 - -From 40a82f71737891581dcbe45331d15a29dd3e7805 Mon Sep 17 00:00:00 2001 -From: Peter Robinson <pbrobinson@gmail.com> -Date: Mon, 4 Jun 2018 09:14:10 +0100 -Subject: [PATCH 7/7] add 1.4 ghz OPP for the 3B+ - -Signed-off-by: Peter Robinson <pbrobinson@gmail.com> ---- - arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts -index 4adb85e66be3..aaefb078f391 100644 ---- a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts -+++ b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts -@@ -106,3 +106,10 @@ - pinctrl-0 = <&uart1_gpio14>; - status = "okay"; - }; -+ -+&cpu0_opp_table { -+ opp@1400000000 { -+ opp-hz = /bits/ 64 <1400000000>; -+ clock-latency-ns = <355000>; -+ }; -+}; --- -2.17.1 - diff --git a/bcm2835-hwmon-Add-support-for-RPi-voltage-sensor.patch b/bcm2835-hwmon-Add-support-for-RPi-voltage-sensor.patch deleted file mode 100644 index 3e65ab969..000000000 --- a/bcm2835-hwmon-Add-support-for-RPi-voltage-sensor.patch +++ /dev/null @@ -1,403 +0,0 @@ -From be3035e3627d2570de4c2c612ecd095968986437 Mon Sep 17 00:00:00 2001 -From: Stefan Wahren <stefan.wahren@i2se.com> -Date: Fri, 25 May 2018 21:24:34 +0200 -Subject: [PATCH 1/4] ARM: bcm2835: Add GET_THROTTLED firmware property - -Recent Raspberry Pi firmware provides a mailbox property to detect -under-voltage conditions. Here is the current definition. - -The u32 value returned by the firmware is divided into 2 parts: - - lower 16-bits are the live value - - upper 16-bits are the history or sticky value - - Bits: - 0: undervoltage - 1: arm frequency capped - 2: currently throttled - 16: undervoltage has occurred - 17: arm frequency capped has occurred - 18: throttling has occurred - -Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> -Signed-off-by: Eric Anholt <eric@anholt.net> -Reviewed-by: Eric Anholt <eric@anholt.net> ---- - include/soc/bcm2835/raspberrypi-firmware.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h -index 8ee8991aa099a..c4a5c9e9fb478 100644 ---- a/include/soc/bcm2835/raspberrypi-firmware.h -+++ b/include/soc/bcm2835/raspberrypi-firmware.h -@@ -75,6 +75,7 @@ enum rpi_firmware_property_tag { - RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020, - RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021, - RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030, -+ RPI_FIRMWARE_GET_THROTTLED = 0x00030046, - RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001, - RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002, - RPI_FIRMWARE_SET_VOLTAGE = 0x00038003, --- -2.17.1 - -From 3c493c885cf8abf0986c9877875161dfd0a29273 Mon Sep 17 00:00:00 2001 -From: Stefan Wahren <stefan.wahren@i2se.com> -Date: Fri, 25 May 2018 21:24:35 +0200 -Subject: [PATCH 2/4] hwmon: Add support for RPi voltage sensor -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Currently there is no easy way to detect undervoltage conditions on a -remote Raspberry Pi. This hwmon driver retrieves the state of the -undervoltage sensor via mailbox interface. The handling based on -Noralf's modifications to the downstream firmware driver. In case of -an undervoltage condition only an entry is written to the kernel log. - -CC: "Noralf Trønnes" <noralf@tronnes.org> -Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> -Signed-off-by: Eric Anholt <eric@anholt.net> -Acked-by: Guenter Roeck <linux@roeck-us.net> ---- - Documentation/hwmon/raspberrypi-hwmon | 22 ++++ - drivers/hwmon/Kconfig | 10 ++ - drivers/hwmon/Makefile | 1 + - drivers/hwmon/raspberrypi-hwmon.c | 166 ++++++++++++++++++++++++++ - 4 files changed, 199 insertions(+) - create mode 100644 Documentation/hwmon/raspberrypi-hwmon - create mode 100644 drivers/hwmon/raspberrypi-hwmon.c - -diff --git a/Documentation/hwmon/raspberrypi-hwmon b/Documentation/hwmon/raspberrypi-hwmon -new file mode 100644 -index 0000000000000..3c92e2cb52d60 ---- /dev/null -+++ b/Documentation/hwmon/raspberrypi-hwmon -@@ -0,0 +1,22 @@ -+Kernel driver raspberrypi-hwmon -+=============================== -+ -+Supported boards: -+ * Raspberry Pi A+ (via GPIO on SoC) -+ * Raspberry Pi B+ (via GPIO on SoC) -+ * Raspberry Pi 2 B (via GPIO on SoC) -+ * Raspberry Pi 3 B (via GPIO on port expander) -+ * Raspberry Pi 3 B+ (via PMIC) -+ -+Author: Stefan Wahren <stefan.wahren@i2se.com> -+ -+Description -+----------- -+ -+This driver periodically polls a mailbox property of the VC4 firmware to detect -+undervoltage conditions. -+ -+Sysfs entries -+------------- -+ -+in0_lcrit_alarm Undervoltage alarm -diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig -index f10840ad465c2..fdaab8229686f 100644 ---- a/drivers/hwmon/Kconfig -+++ b/drivers/hwmon/Kconfig -@@ -1298,6 +1298,16 @@ config SENSORS_PWM_FAN - This driver can also be built as a module. If so, the module - will be called pwm-fan. - -+config SENSORS_RASPBERRYPI_HWMON -+ tristate "Raspberry Pi voltage monitor" -+ depends on RASPBERRYPI_FIRMWARE || COMPILE_TEST -+ help -+ If you say yes here you get support for voltage sensor on the -+ Raspberry Pi. -+ -+ This driver can also be built as a module. If so, the module -+ will be called raspberrypi-hwmon. -+ - config SENSORS_SHT15 - tristate "Sensiron humidity and temperature sensors. SHT15 and compat." - depends on GPIOLIB || COMPILE_TEST -diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile -index e7d52a36e6c4f..a9297703fd6e4 100644 ---- a/drivers/hwmon/Makefile -+++ b/drivers/hwmon/Makefile -@@ -141,6 +141,7 @@ obj-$(CONFIG_SENSORS_PC87427) += pc87427.o - obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o - obj-$(CONFIG_SENSORS_POWR1220) += powr1220.o - obj-$(CONFIG_SENSORS_PWM_FAN) += pwm-fan.o -+obj-$(CONFIG_SENSORS_RASPBERRYPI_HWMON) += raspberrypi-hwmon.o - obj-$(CONFIG_SENSORS_S3C) += s3c-hwmon.o - obj-$(CONFIG_SENSORS_SCH56XX_COMMON)+= sch56xx-common.o - obj-$(CONFIG_SENSORS_SCH5627) += sch5627.o -diff --git a/drivers/hwmon/raspberrypi-hwmon.c b/drivers/hwmon/raspberrypi-hwmon.c -new file mode 100644 -index 0000000000000..fb4e4a6bb1f63 ---- /dev/null -+++ b/drivers/hwmon/raspberrypi-hwmon.c -@@ -0,0 +1,166 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* -+ * Raspberry Pi voltage sensor driver -+ * -+ * Based on firmware/raspberrypi.c by Noralf Trønnes -+ * -+ * Copyright (C) 2018 Stefan Wahren <stefan.wahren@i2se.com> -+ */ -+#include <linux/device.h> -+#include <linux/err.h> -+#include <linux/hwmon.h> -+#include <linux/module.h> -+#include <linux/platform_device.h> -+#include <linux/slab.h> -+#include <linux/workqueue.h> -+#include <soc/bcm2835/raspberrypi-firmware.h> -+ -+#define UNDERVOLTAGE_STICKY_BIT BIT(16) -+ -+struct rpi_hwmon_data { -+ struct device *hwmon_dev; -+ struct rpi_firmware *fw; -+ u32 last_throttled; -+ struct delayed_work get_values_poll_work; -+}; -+ -+static void rpi_firmware_get_throttled(struct rpi_hwmon_data *data) -+{ -+ u32 new_uv, old_uv, value; -+ int ret; -+ -+ /* Request firmware to clear sticky bits */ -+ value = 0xffff; -+ -+ ret = rpi_firmware_property(data->fw, RPI_FIRMWARE_GET_THROTTLED, -+ &value, sizeof(value)); -+ if (ret) { -+ dev_err_once(data->hwmon_dev, "Failed to get throttled (%d)\n", -+ ret); -+ return; -+ } -+ -+ new_uv = value & UNDERVOLTAGE_STICKY_BIT; -+ old_uv = data->last_throttled & UNDERVOLTAGE_STICKY_BIT; -+ data->last_throttled = value; -+ -+ if (new_uv == old_uv) -+ return; -+ -+ if (new_uv) -+ dev_crit(data->hwmon_dev, "Undervoltage detected!\n"); -+ else -+ dev_info(data->hwmon_dev, "Voltage normalised\n"); -+ -+ sysfs_notify(&data->hwmon_dev->kobj, NULL, "in0_lcrit_alarm"); -+} -+ -+static void get_values_poll(struct work_struct *work) -+{ -+ struct rpi_hwmon_data *data; -+ -+ data = container_of(work, struct rpi_hwmon_data, -+ get_values_poll_work.work); -+ -+ rpi_firmware_get_throttled(data); -+ -+ /* -+ * We can't run faster than the sticky shift (100ms) since we get -+ * flipping in the sticky bits that are cleared. -+ */ -+ schedule_delayed_work(&data->get_values_poll_work, 2 * HZ); -+} -+ -+static int rpi_read(struct device *dev, enum hwmon_sensor_types type, -+ u32 attr, int channel, long *val) -+{ -+ struct rpi_hwmon_data *data = dev_get_drvdata(dev); -+ -+ *val = !!(data->last_throttled & UNDERVOLTAGE_STICKY_BIT); -+ return 0; -+} -+ -+static umode_t rpi_is_visible(const void *_data, enum hwmon_sensor_types type, -+ u32 attr, int channel) -+{ -+ return 0444; -+} -+ -+static const u32 rpi_in_config[] = { -+ HWMON_I_LCRIT_ALARM, -+ 0 -+}; -+ -+static const struct hwmon_channel_info rpi_in = { -+ .type = hwmon_in, -+ .config = rpi_in_config, -+}; -+ -+static const struct hwmon_channel_info *rpi_info[] = { -+ &rpi_in, -+ NULL -+}; -+ -+static const struct hwmon_ops rpi_hwmon_ops = { -+ .is_visible = rpi_is_visible, -+ .read = rpi_read, -+}; -+ -+static const struct hwmon_chip_info rpi_chip_info = { -+ .ops = &rpi_hwmon_ops, -+ .info = rpi_info, -+}; -+ -+static int rpi_hwmon_probe(struct platform_device *pdev) -+{ -+ struct device *dev = &pdev->dev; -+ struct rpi_hwmon_data *data; -+ int ret; -+ -+ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); -+ if (!data) -+ return -ENOMEM; -+ -+ /* Parent driver assure that firmware is correct */ -+ data->fw = dev_get_drvdata(dev->parent); -+ -+ /* Init throttled */ -+ ret = rpi_firmware_property(data->fw, RPI_FIRMWARE_GET_THROTTLED, -+ &data->last_throttled, -+ sizeof(data->last_throttled)); -+ -+ data->hwmon_dev = devm_hwmon_device_register_with_info(dev, "rpi_volt", -+ data, -+ &rpi_chip_info, -+ NULL); -+ -+ INIT_DELAYED_WORK(&data->get_values_poll_work, get_values_poll); -+ platform_set_drvdata(pdev, data); -+ -+ if (!PTR_ERR_OR_ZERO(data->hwmon_dev)) -+ schedule_delayed_work(&data->get_values_poll_work, 2 * HZ); -+ -+ return PTR_ERR_OR_ZERO(data->hwmon_dev); -+} -+ -+static int rpi_hwmon_remove(struct platform_device *pdev) -+{ -+ struct rpi_hwmon_data *data = platform_get_drvdata(pdev); -+ -+ cancel_delayed_work_sync(&data->get_values_poll_work); -+ -+ return 0; -+} -+ -+static struct platform_driver rpi_hwmon_driver = { -+ .probe = rpi_hwmon_probe, -+ .remove = rpi_hwmon_remove, -+ .driver = { -+ .name = "raspberrypi-hwmon", -+ }, -+}; -+module_platform_driver(rpi_hwmon_driver); -+ -+MODULE_AUTHOR("Stefan Wahren <stefan.wahren@i2se.com>"); -+MODULE_DESCRIPTION("Raspberry Pi voltage sensor driver"); -+MODULE_LICENSE("GPL v2"); --- -2.17.1 - -From 4ebe8673279b7afbbcbcf92094c9012a3c91f240 Mon Sep 17 00:00:00 2001 -From: Stefan Wahren <stefan.wahren@i2se.com> -Date: Fri, 25 May 2018 21:24:36 +0200 -Subject: [PATCH 3/4] firmware: raspberrypi: Register hwmon driver - -Since the raspberrypi-hwmon driver is tied to the VC4 firmware instead of -particular hardware its registration should be in the firmware driver. - -Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> -Signed-off-by: Eric Anholt <eric@anholt.net> ---- - drivers/firmware/raspberrypi.c | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c -index 6692888f04cfb..0602626bf72d0 100644 ---- a/drivers/firmware/raspberrypi.c -+++ b/drivers/firmware/raspberrypi.c -@@ -21,6 +21,8 @@ - #define MBOX_DATA28(msg) ((msg) & ~0xf) - #define MBOX_CHAN_PROPERTY 8 - -+static struct platform_device *rpi_hwmon; -+ - struct rpi_firmware { - struct mbox_client cl; - struct mbox_chan *chan; /* The property channel. */ -@@ -183,6 +185,20 @@ rpi_firmware_print_firmware_revision(struct rpi_firmware *fw) - } - } - -+static void -+rpi_register_hwmon_driver(struct device *dev, struct rpi_firmware *fw) -+{ -+ u32 packet; -+ int ret = rpi_firmware_property(fw, RPI_FIRMWARE_GET_THROTTLED, -+ &packet, sizeof(packet)); -+ -+ if (ret) -+ return; -+ -+ rpi_hwmon = platform_device_register_data(dev, "raspberrypi-hwmon", -+ -1, NULL, 0); -+} -+ - static int rpi_firmware_probe(struct platform_device *pdev) - { - struct device *dev = &pdev->dev; -@@ -209,6 +225,7 @@ static int rpi_firmware_probe(struct platform_device *pdev) - platform_set_drvdata(pdev, fw); - - rpi_firmware_print_firmware_revision(fw); -+ rpi_register_hwmon_driver(dev, fw); - - return 0; - } -@@ -217,6 +234,8 @@ static int rpi_firmware_remove(struct platform_device *pdev) - { - struct rpi_firmware *fw = platform_get_drvdata(pdev); - -+ platform_device_unregister(rpi_hwmon); -+ rpi_hwmon = NULL; - mbox_free_channel(fw->chan); - - return 0; --- -2.17.1 - -From a0cf7704b6bc145a9f198a9b2bcf92ccc5d6b6be Mon Sep 17 00:00:00 2001 -From: Peter Robinson <pbrobinson@gmail.com> -Date: Fri, 20 Jul 2018 12:58:37 +0100 -Subject: [PATCH] hwmon: rpi: add module alias to raspberrypi-hwmon - -The raspberrypi-hwmon driver doesn't automatically load, although it does work -when loaded, by adding the alias it auto loads as expected when built as a -module. Tested on RPi2/RPi3 on 32 bit kernel and RPi3B+ on aarch64 with -Fedora 28 and a patched 4.18 RC kernel. - -Fixes: q3c493c885cf ("hwmon: Add support for RPi voltage sensor") -Signed-off-by: Peter Robinson <pbrobinson@gmail.com> -CC: Stefan Wahren <stefan.wahren@i2se.com> -CC: Eric Anholt <eric@anholt.net> ---- - drivers/hwmon/raspberrypi-hwmon.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/hwmon/raspberrypi-hwmon.c b/drivers/hwmon/raspberrypi-hwmon.c -index fb4e4a6bb1f63..be5ba46908953 100644 ---- a/drivers/hwmon/raspberrypi-hwmon.c -+++ b/drivers/hwmon/raspberrypi-hwmon.c -@@ -164,3 +164,4 @@ module_platform_driver(rpi_hwmon_driver); - MODULE_AUTHOR("Stefan Wahren <stefan.wahren@i2se.com>"); - MODULE_DESCRIPTION("Raspberry Pi voltage sensor driver"); - MODULE_LICENSE("GPL v2"); -+MODULE_ALIAS("platform:raspberrypi-hwmon"); --- -2.17.1 - diff --git a/kernel.spec b/kernel.spec index bb7c49e57..af9b3071e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -597,18 +597,12 @@ Patch308: mmc-sunxi-allow-3.3V-DDR-when-DDR-is-available.patch # https://patchwork.kernel.org/patch/10540521/ Patch309: mmc-sunxi-remove-output-of-virtual-base-address.patch -Patch310: arm-dts-armada388-helios4.patch - # https://www.spinics.net/lists/arm-kernel/msg670137.html Patch311: arm64-ZynqMP-firmware-clock-drivers-core.patch # Enabling Patches for the RPi3+ Patch330: bcm2837-enable-pmu.patch -Patch331: bcm2835-cpufreq-add-CPU-frequency-control-driver.patch - -Patch332: bcm2835-hwmon-Add-support-for-RPi-voltage-sensor.patch - # https://patchwork.freedesktop.org/patch/240917/ Patch334: drm-vc4-Fix-the-no-scaling-case-on-multi-planar-YUV-formats.patch |