summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Robinson <pbrobinson@gmail.com>2018-09-07 10:22:54 +0100
committerPeter Robinson <pbrobinson@gmail.com>2018-09-07 10:22:54 +0100
commitf607ba7581e429900192f457de90b58e9bb6d913 (patch)
tree8c3b3ec81c9beb5c56d63630076265c82cf5a5bd
parent151d4019f7435cc798df88d242e3c6e024fa5f12 (diff)
downloadkernel-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.patch352
-rw-r--r--bcm2835-cpufreq-add-CPU-frequency-control-driver.patch301
-rw-r--r--bcm2835-hwmon-Add-support-for-RPi-voltage-sensor.patch403
-rw-r--r--kernel.spec6
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 = &eth0;
-+ };
-+
-+ 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 = <&reg_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 = <&reg_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 = <&reg_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 = <&reg_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 = <&reg_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
-+ &microsom_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 = <&reg_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