Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1575178 > unrolled thread
| Started by | Markus Mayer <code@mmayer.net> |
|---|---|
| First post | 2017-02-06 23:00 +0100 |
| Last post | 2017-02-07 05:20 +0100 |
| Articles | 9 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH v2 0/4] cpufreq: bmips-cpufreq: Add CPUfreq driver for Broadcom's BMIPS SoCs Markus Mayer <code@mmayer.net> - 2017-02-06 23:00 +0100
[PATCH v2 1/4] MIPS: BMIPS: Update defconfig Markus Mayer <code@mmayer.net> - 2017-02-06 23:00 +0100
Re: [PATCH v2 1/4] MIPS: BMIPS: Update defconfig Viresh Kumar <viresh.kumar@linaro.org> - 2017-02-07 05:20 +0100
[PATCH v2 2/4] BMIPS: Enable prerequisites for CPUfreq in MIPS Kconfig. Markus Mayer <code@mmayer.net> - 2017-02-06 23:00 +0100
Re: [PATCH v2 2/4] BMIPS: Enable prerequisites for CPUfreq in MIPS Kconfig. "Rafael J. Wysocki" <rafael@kernel.org> - 2017-02-07 13:50 +0100
[PATCH v2 4/4] MIPS: BMIPS: enable CPUfreq Markus Mayer <code@mmayer.net> - 2017-02-06 23:00 +0100
Re: [PATCH v2 4/4] MIPS: BMIPS: enable CPUfreq Viresh Kumar <viresh.kumar@linaro.org> - 2017-02-07 05:30 +0100
[PATCH v2 3/4] cpufreq: bmips-cpufreq: CPUfreq driver for Broadcom's BMIPS SoCs Markus Mayer <code@mmayer.net> - 2017-02-06 23:00 +0100
Re: [PATCH v2 3/4] cpufreq: bmips-cpufreq: CPUfreq driver for Broadcom's BMIPS SoCs Viresh Kumar <viresh.kumar@linaro.org> - 2017-02-07 05:20 +0100
| From | Markus Mayer <code@mmayer.net> |
|---|---|
| Date | 2017-02-06 23:00 +0100 |
| Subject | [PATCH v2 0/4] cpufreq: bmips-cpufreq: Add CPUfreq driver for Broadcom's BMIPS SoCs |
| Message-ID | <t7Zuh-28q-1@gated-at.bofh.it> |
From: Markus Mayer <mmayer@broadcom.com>
This series adds a CPUfreq driver for the BMIPS SoCs. In the first
iteration only BMIPS5xxx SoCs are supported.
The very first patch contains updates to bmips_stb_defconfig that are
unrelated to this series. Looks like bmips_stb_defconfig hasn't been
updated in a while. I didn't want to mix those changes with the CPUfreq
related ones, so that patch now comes first in the series and is
independent of the CPUfreq related changes to bmips_stb_defconfig
(patch 4/4).
This series is based on pm/linux-next.
Changes since v1:
- based on pm/linux-next rather than 4.10-rc1
- sanitized bmips_stb_defconfig by running "make savedefconfig"; this
also lead to an additional patch (1/4), which contains non-CPUfreq
related updates that "make savedefconfig" performed
- use gobal variable to store driver data rather than policy->driver_data
- got rid of some code as a result of using said global variable
- kzalloc -> kmalloc
- removed policy->freq_table = NULL;
Markus Mayer (4):
MIPS: BMIPS: Update defconfig
BMIPS: Enable prerequisites for CPUfreq in MIPS Kconfig.
cpufreq: bmips-cpufreq: CPUfreq driver for Broadcom's BMIPS SoCs
MIPS: BMIPS: enable CPUfreq
arch/mips/Kconfig | 2 +
arch/mips/configs/bmips_stb_defconfig | 16 +--
drivers/cpufreq/Kconfig | 10 ++
drivers/cpufreq/Makefile | 1 +
drivers/cpufreq/bmips-cpufreq.c | 195 ++++++++++++++++++++++++++++++++++
5 files changed, 218 insertions(+), 6 deletions(-)
create mode 100644 drivers/cpufreq/bmips-cpufreq.c
--
2.7.4
[toc] | [next] | [standalone]
| From | Markus Mayer <code@mmayer.net> |
|---|---|
| Date | 2017-02-06 23:00 +0100 |
| Subject | [PATCH v2 1/4] MIPS: BMIPS: Update defconfig |
| Message-ID | <t7Zui-28q-15@gated-at.bofh.it> |
| In reply to | #1575178 |
From: Markus Mayer <mmayer@broadcom.com> Ran "make savedefconfig" to bring bmips_stb_defconfig up to date. Signed-off-by: Markus Mayer <mmayer@broadcom.com> --- arch/mips/configs/bmips_stb_defconfig | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/arch/mips/configs/bmips_stb_defconfig b/arch/mips/configs/bmips_stb_defconfig index 4eb5d6e..3be15cb 100644 --- a/arch/mips/configs/bmips_stb_defconfig +++ b/arch/mips/configs/bmips_stb_defconfig @@ -9,7 +9,6 @@ CONFIG_MIPS_O32_FP64_SUPPORT=y # CONFIG_SWAP is not set CONFIG_NO_HZ=y CONFIG_BLK_DEV_INITRD=y -CONFIG_RD_GZIP=y CONFIG_EXPERT=y # CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_SLUB_DEBUG is not set @@ -24,7 +23,6 @@ CONFIG_INET=y # CONFIG_INET_XFRM_MODE_TRANSPORT is not set # CONFIG_INET_XFRM_MODE_TUNNEL is not set # CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_LRO is not set # CONFIG_INET_DIAG is not set CONFIG_CFG80211=y CONFIG_NL80211_TESTMODE=y @@ -34,8 +32,6 @@ CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y # CONFIG_STANDALONE is not set # CONFIG_PREVENT_FIRMWARE_BUILD is not set -CONFIG_PRINTK_TIME=y -CONFIG_BRCMSTB_GISB_ARB=y CONFIG_MTD=y CONFIG_MTD_CFI=y CONFIG_MTD_CFI_INTELEXT=y @@ -51,16 +47,15 @@ CONFIG_USB_USBNET=y # CONFIG_INPUT is not set # CONFIG_SERIO is not set # CONFIG_VT is not set -# CONFIG_DEVKMEM is not set CONFIG_SERIAL_8250=y # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_OF_PLATFORM=y # CONFIG_HW_RANDOM is not set -CONFIG_POWER_SUPPLY=y CONFIG_POWER_RESET=y CONFIG_POWER_RESET_BRCMSTB=y CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_SUPPLY=y # CONFIG_HWMON is not set CONFIG_USB=y CONFIG_USB_EHCI_HCD=y @@ -82,6 +77,7 @@ CONFIG_CIFS=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ASCII=y CONFIG_NLS_ISO8859_1=y +CONFIG_PRINTK_TIME=y CONFIG_DEBUG_FS=y CONFIG_MAGIC_SYSRQ=y CONFIG_CMDLINE_BOOL=y -- 2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Viresh Kumar <viresh.kumar@linaro.org> |
|---|---|
| Date | 2017-02-07 05:20 +0100 |
| Subject | Re: [PATCH v2 1/4] MIPS: BMIPS: Update defconfig |
| Message-ID | <t85q1-6db-7@gated-at.bofh.it> |
| In reply to | #1575180 |
On 06-02-17, 13:51, Markus Mayer wrote: > From: Markus Mayer <mmayer@broadcom.com> > > Ran "make savedefconfig" to bring bmips_stb_defconfig up to date. > > Signed-off-by: Markus Mayer <mmayer@broadcom.com> > --- > arch/mips/configs/bmips_stb_defconfig | 8 ++------ > 1 file changed, 2 insertions(+), 6 deletions(-) > > diff --git a/arch/mips/configs/bmips_stb_defconfig b/arch/mips/configs/bmips_stb_defconfig > index 4eb5d6e..3be15cb 100644 > --- a/arch/mips/configs/bmips_stb_defconfig > +++ b/arch/mips/configs/bmips_stb_defconfig > @@ -9,7 +9,6 @@ CONFIG_MIPS_O32_FP64_SUPPORT=y > # CONFIG_SWAP is not set > CONFIG_NO_HZ=y > CONFIG_BLK_DEV_INITRD=y > -CONFIG_RD_GZIP=y > CONFIG_EXPERT=y > # CONFIG_VM_EVENT_COUNTERS is not set > # CONFIG_SLUB_DEBUG is not set > @@ -24,7 +23,6 @@ CONFIG_INET=y > # CONFIG_INET_XFRM_MODE_TRANSPORT is not set > # CONFIG_INET_XFRM_MODE_TUNNEL is not set > # CONFIG_INET_XFRM_MODE_BEET is not set > -# CONFIG_INET_LRO is not set > # CONFIG_INET_DIAG is not set > CONFIG_CFG80211=y > CONFIG_NL80211_TESTMODE=y > @@ -34,8 +32,6 @@ CONFIG_DEVTMPFS=y > CONFIG_DEVTMPFS_MOUNT=y > # CONFIG_STANDALONE is not set > # CONFIG_PREVENT_FIRMWARE_BUILD is not set > -CONFIG_PRINTK_TIME=y > -CONFIG_BRCMSTB_GISB_ARB=y > CONFIG_MTD=y > CONFIG_MTD_CFI=y > CONFIG_MTD_CFI_INTELEXT=y > @@ -51,16 +47,15 @@ CONFIG_USB_USBNET=y > # CONFIG_INPUT is not set > # CONFIG_SERIO is not set > # CONFIG_VT is not set > -# CONFIG_DEVKMEM is not set > CONFIG_SERIAL_8250=y > # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set > CONFIG_SERIAL_8250_CONSOLE=y > CONFIG_SERIAL_OF_PLATFORM=y > # CONFIG_HW_RANDOM is not set > -CONFIG_POWER_SUPPLY=y > CONFIG_POWER_RESET=y > CONFIG_POWER_RESET_BRCMSTB=y > CONFIG_POWER_RESET_SYSCON=y > +CONFIG_POWER_SUPPLY=y > # CONFIG_HWMON is not set > CONFIG_USB=y > CONFIG_USB_EHCI_HCD=y > @@ -82,6 +77,7 @@ CONFIG_CIFS=y > CONFIG_NLS_CODEPAGE_437=y > CONFIG_NLS_ASCII=y > CONFIG_NLS_ISO8859_1=y > +CONFIG_PRINTK_TIME=y > CONFIG_DEBUG_FS=y > CONFIG_MAGIC_SYSRQ=y > CONFIG_CMDLINE_BOOL=y This is what happens when people don't update defconfigs properly :) Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> -- viresh
[toc] | [prev] | [next] | [standalone]
| From | Markus Mayer <code@mmayer.net> |
|---|---|
| Date | 2017-02-06 23:00 +0100 |
| Subject | [PATCH v2 2/4] BMIPS: Enable prerequisites for CPUfreq in MIPS Kconfig. |
| Message-ID | <t7Zuh-28q-11@gated-at.bofh.it> |
| In reply to | #1575178 |
From: Markus Mayer <mmayer@broadcom.com> Turn on CPU_SUPPORTS_CPUFREQ and MIPS_EXTERNAL_TIMER for BMIPS. Signed-off-by: Markus Mayer <mmayer@broadcom.com> --- arch/mips/Kconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index b3c5bde..e137eed 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -1703,6 +1703,8 @@ config CPU_BMIPS select WEAK_ORDERING select CPU_SUPPORTS_HIGHMEM select CPU_HAS_PREFETCH + select CPU_SUPPORTS_CPUFREQ + select MIPS_EXTERNAL_TIMER help Support for BMIPS32/3300/4350/4380 and BMIPS5000 processors. -- 2.7.4
[toc] | [prev] | [next] | [standalone]
| From | "Rafael J. Wysocki" <rafael@kernel.org> |
|---|---|
| Date | 2017-02-07 13:50 +0100 |
| Subject | Re: [PATCH v2 2/4] BMIPS: Enable prerequisites for CPUfreq in MIPS Kconfig. |
| Message-ID | <t8dnA-2Us-15@gated-at.bofh.it> |
| In reply to | #1575183 |
On Mon, Feb 6, 2017 at 10:51 PM, Markus Mayer <code@mmayer.net> wrote: > From: Markus Mayer <mmayer@broadcom.com> > > Turn on CPU_SUPPORTS_CPUFREQ and MIPS_EXTERNAL_TIMER for BMIPS. > > Signed-off-by: Markus Mayer <mmayer@broadcom.com> An ACK from the MIPS maintainers is requisite here. > --- > arch/mips/Kconfig | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig > index b3c5bde..e137eed 100644 > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > @@ -1703,6 +1703,8 @@ config CPU_BMIPS > select WEAK_ORDERING > select CPU_SUPPORTS_HIGHMEM > select CPU_HAS_PREFETCH > + select CPU_SUPPORTS_CPUFREQ > + select MIPS_EXTERNAL_TIMER > help > Support for BMIPS32/3300/4350/4380 and BMIPS5000 processors. > > -- Thanks, Rafael
[toc] | [prev] | [next] | [standalone]
| From | Markus Mayer <code@mmayer.net> |
|---|---|
| Date | 2017-02-06 23:00 +0100 |
| Subject | [PATCH v2 4/4] MIPS: BMIPS: enable CPUfreq |
| Message-ID | <t7Zui-28q-25@gated-at.bofh.it> |
| In reply to | #1575178 |
From: Markus Mayer <mmayer@broadcom.com> Enable all applicable CPUfreq options. Signed-off-by: Markus Mayer <mmayer@broadcom.com> --- arch/mips/configs/bmips_stb_defconfig | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/mips/configs/bmips_stb_defconfig b/arch/mips/configs/bmips_stb_defconfig index 3be15cb..3cefa6b 100644 --- a/arch/mips/configs/bmips_stb_defconfig +++ b/arch/mips/configs/bmips_stb_defconfig @@ -15,6 +15,14 @@ CONFIG_EXPERT=y # CONFIG_BLK_DEV_BSG is not set # CONFIG_IOSCHED_DEADLINE is not set # CONFIG_IOSCHED_CFQ is not set +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +CONFIG_BMIPS_CPUFREQ=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_PACKET_DIAG=y -- 2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Viresh Kumar <viresh.kumar@linaro.org> |
|---|---|
| Date | 2017-02-07 05:30 +0100 |
| Subject | Re: [PATCH v2 4/4] MIPS: BMIPS: enable CPUfreq |
| Message-ID | <t85zH-6gC-1@gated-at.bofh.it> |
| In reply to | #1575184 |
On 06-02-17, 13:51, Markus Mayer wrote: > From: Markus Mayer <mmayer@broadcom.com> > > Enable all applicable CPUfreq options. > > Signed-off-by: Markus Mayer <mmayer@broadcom.com> > --- > arch/mips/configs/bmips_stb_defconfig | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/arch/mips/configs/bmips_stb_defconfig b/arch/mips/configs/bmips_stb_defconfig > index 3be15cb..3cefa6b 100644 > --- a/arch/mips/configs/bmips_stb_defconfig > +++ b/arch/mips/configs/bmips_stb_defconfig > @@ -15,6 +15,14 @@ CONFIG_EXPERT=y > # CONFIG_BLK_DEV_BSG is not set > # CONFIG_IOSCHED_DEADLINE is not set > # CONFIG_IOSCHED_CFQ is not set > +CONFIG_CPU_FREQ=y > +CONFIG_CPU_FREQ_STAT=y > +CONFIG_CPU_FREQ_GOV_POWERSAVE=y > +CONFIG_CPU_FREQ_GOV_USERSPACE=y > +CONFIG_CPU_FREQ_GOV_ONDEMAND=y > +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y > +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y > +CONFIG_BMIPS_CPUFREQ=y > CONFIG_NET=y > CONFIG_PACKET=y > CONFIG_PACKET_DIAG=y Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> -- viresh
[toc] | [prev] | [next] | [standalone]
| From | Markus Mayer <code@mmayer.net> |
|---|---|
| Date | 2017-02-06 23:00 +0100 |
| Subject | [PATCH v2 3/4] cpufreq: bmips-cpufreq: CPUfreq driver for Broadcom's BMIPS SoCs |
| Message-ID | <t7Zui-28q-21@gated-at.bofh.it> |
| In reply to | #1575178 |
From: Markus Mayer <mmayer@broadcom.com>
Add the MIPS CPUfreq driver. This driver currently supports CPUfreq on
BMIPS5xxx-based SoCs.
Signed-off-by: Markus Mayer <mmayer@broadcom.com>
---
drivers/cpufreq/Kconfig | 10 +++
drivers/cpufreq/Makefile | 1 +
drivers/cpufreq/bmips-cpufreq.c | 195 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 206 insertions(+)
create mode 100644 drivers/cpufreq/bmips-cpufreq.c
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
index 15adef4..ec040a5 100644
--- a/drivers/cpufreq/Kconfig
+++ b/drivers/cpufreq/Kconfig
@@ -263,6 +263,16 @@ config IA64_ACPI_CPUFREQ
endif
if MIPS
+config BMIPS_CPUFREQ
+ tristate "BMIPS CPUfreq Driver"
+ help
+ This option adds a CPUfreq driver for BMIPS processors with
+ support for configurable CPU frequency.
+
+ For now, BMIPS5 chips are supported (such as the Broadcom 7425).
+
+ If in doubt, say N.
+
config LOONGSON2_CPUFREQ
tristate "Loongson2 CPUFreq Driver"
help
diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
index 1e46c39..b7b3fc7 100644
--- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile
@@ -98,6 +98,7 @@ obj-$(CONFIG_POWERNV_CPUFREQ) += powernv-cpufreq.o
# Other platform drivers
obj-$(CONFIG_AVR32_AT32AP_CPUFREQ) += at32ap-cpufreq.o
obj-$(CONFIG_BFIN_CPU_FREQ) += blackfin-cpufreq.o
+obj-$(CONFIG_BMIPS_CPUFREQ) += bmips-cpufreq.o
obj-$(CONFIG_CRIS_MACH_ARTPEC3) += cris-artpec3-cpufreq.o
obj-$(CONFIG_ETRAXFS) += cris-etraxfs-cpufreq.o
obj-$(CONFIG_IA64_ACPI_CPUFREQ) += ia64-acpi-cpufreq.o
diff --git a/drivers/cpufreq/bmips-cpufreq.c b/drivers/cpufreq/bmips-cpufreq.c
new file mode 100644
index 0000000..505aa83
--- /dev/null
+++ b/drivers/cpufreq/bmips-cpufreq.c
@@ -0,0 +1,195 @@
+/*
+ * CPU frequency scaling for Broadcom BMIPS SoCs
+ *
+ * Copyright (c) 2017 Broadcom
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/cpufreq.h>
+#include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/slab.h>
+
+/* for mips_hpt_frequency */
+#include <asm/time.h>
+
+#define BMIPS_CPUFREQ_PREFIX "bmips"
+#define BMIPS_CPUFREQ_NAME BMIPS_CPUFREQ_PREFIX "-cpufreq"
+
+#define TRANSITION_LATENCY (25 * 1000) /* 25 us */
+
+#define BMIPS5_CLK_DIV_SET_SHIFT 0x7
+#define BMIPS5_CLK_DIV_SHIFT 0x4
+#define BMIPS5_CLK_DIV_MASK 0xf
+
+enum bmips_type {
+ BMIPS5000,
+ BMIPS5200,
+};
+
+struct cpufreq_compat {
+ const char *compatible;
+ unsigned int bmips_type;
+ unsigned int clk_mult;
+ unsigned int max_freqs;
+};
+
+#define BMIPS(c, t, m, f) { \
+ .compatible = c, \
+ .bmips_type = (t), \
+ .clk_mult = (m), \
+ .max_freqs = (f), \
+}
+
+static struct cpufreq_compat bmips_cpufreq_compat[] = {
+ BMIPS("brcm,bmips5000", BMIPS5000, 8, 4),
+ BMIPS("brcm,bmips5200", BMIPS5200, 8, 4),
+ { }
+};
+
+static struct cpufreq_compat *priv;
+
+static int htp_freq_to_cpu_freq(unsigned int clk_mult)
+{
+ return mips_hpt_frequency * clk_mult / 1000;
+}
+
+static struct cpufreq_frequency_table *
+bmips_cpufreq_get_freq_table(const struct cpufreq_policy *policy)
+{
+ struct cpufreq_frequency_table *table;
+ unsigned long cpu_freq;
+ int i;
+
+ cpu_freq = htp_freq_to_cpu_freq(priv->clk_mult);
+
+ table = kmalloc((priv->max_freqs + 1) * sizeof(*table), GFP_KERNEL);
+ if (!table)
+ return ERR_PTR(-ENOMEM);
+
+ for (i = 0; i < priv->max_freqs; i++) {
+ table[i].frequency = cpu_freq / (1 << i);
+ table[i].driver_data = i;
+ }
+ table[i].frequency = CPUFREQ_TABLE_END;
+
+ return table;
+}
+
+static unsigned int bmips_cpufreq_get(unsigned int cpu)
+{
+ unsigned long freq, cpu_freq;
+ unsigned int div;
+ uint32_t mode;
+
+ switch (priv->bmips_type) {
+ case BMIPS5200:
+ case BMIPS5000:
+ mode = read_c0_brcm_mode();
+ div = ((mode >> BMIPS5_CLK_DIV_SHIFT) & BMIPS5_CLK_DIV_MASK);
+ break;
+ default:
+ div = 0;
+ }
+
+ cpu_freq = htp_freq_to_cpu_freq(priv->clk_mult);
+ freq = cpu_freq / (1 << div);
+
+ return freq;
+}
+
+static int bmips_cpufreq_target_index(struct cpufreq_policy *policy,
+ unsigned int index)
+{
+ unsigned int div = policy->freq_table[index].driver_data;
+
+ switch (priv->bmips_type) {
+ case BMIPS5200:
+ case BMIPS5000:
+ change_c0_brcm_mode(BMIPS5_CLK_DIV_MASK << BMIPS5_CLK_DIV_SHIFT,
+ (1 << BMIPS5_CLK_DIV_SET_SHIFT) |
+ (div << BMIPS5_CLK_DIV_SHIFT));
+ break;
+ default:
+ return -ENOTSUPP;
+ }
+
+ return 0;
+}
+
+static int bmips_cpufreq_exit(struct cpufreq_policy *policy)
+{
+ kfree(policy->freq_table);
+
+ return 0;
+}
+
+static int bmips_cpufreq_init(struct cpufreq_policy *policy)
+{
+ struct cpufreq_frequency_table *freq_table;
+ int ret;
+
+ /* Store the compatibility data. */
+ priv = cpufreq_get_driver_data();
+
+ freq_table = bmips_cpufreq_get_freq_table(policy);
+ if (IS_ERR(freq_table)) {
+ ret = PTR_ERR(freq_table);
+ pr_err("%s: couldn't determine frequency table (%d).\n",
+ BMIPS_CPUFREQ_NAME, ret);
+ return ret;
+ }
+
+ ret = cpufreq_generic_init(policy, freq_table, TRANSITION_LATENCY);
+ if (ret)
+ bmips_cpufreq_exit(policy);
+ else
+ pr_info("%s: registered\n", BMIPS_CPUFREQ_NAME);
+
+ return ret;
+}
+
+static struct cpufreq_driver bmips_cpufreq_driver = {
+ .flags = CPUFREQ_NEED_INITIAL_FREQ_CHECK,
+ .verify = cpufreq_generic_frequency_table_verify,
+ .target_index = bmips_cpufreq_target_index,
+ .get = bmips_cpufreq_get,
+ .init = bmips_cpufreq_init,
+ .exit = bmips_cpufreq_exit,
+ .attr = cpufreq_generic_attr,
+ .name = BMIPS_CPUFREQ_PREFIX,
+};
+
+static int __init bmips_cpufreq_probe(void)
+{
+ struct cpufreq_compat *cc;
+ struct device_node *np;
+
+ for (cc = bmips_cpufreq_compat; cc->compatible; cc++) {
+ np = of_find_compatible_node(NULL, "cpu", cc->compatible);
+ if (np) {
+ of_node_put(np);
+ bmips_cpufreq_driver.driver_data = cc;
+ break;
+ }
+ }
+
+ /* We hit the guard element of the array. No compatible CPU found. */
+ if (!cc->compatible)
+ return -ENODEV;
+
+ return cpufreq_register_driver(&bmips_cpufreq_driver);
+}
+device_initcall(bmips_cpufreq_probe);
+
+MODULE_AUTHOR("Markus Mayer <mmayer@broadcom.com>");
+MODULE_DESCRIPTION("CPUfreq driver for Broadcom BMIPS SoCs");
+MODULE_LICENSE("GPL");
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Viresh Kumar <viresh.kumar@linaro.org> |
|---|---|
| Date | 2017-02-07 05:20 +0100 |
| Subject | Re: [PATCH v2 3/4] cpufreq: bmips-cpufreq: CPUfreq driver for Broadcom's BMIPS SoCs |
| Message-ID | <t85q1-6db-13@gated-at.bofh.it> |
| In reply to | #1575187 |
On 06-02-17, 13:51, Markus Mayer wrote: > From: Markus Mayer <mmayer@broadcom.com> > > Add the MIPS CPUfreq driver. This driver currently supports CPUfreq on > BMIPS5xxx-based SoCs. > > Signed-off-by: Markus Mayer <mmayer@broadcom.com> > --- > drivers/cpufreq/Kconfig | 10 +++ > drivers/cpufreq/Makefile | 1 + > drivers/cpufreq/bmips-cpufreq.c | 195 ++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 206 insertions(+) > create mode 100644 drivers/cpufreq/bmips-cpufreq.c Acked-by: Viresh Kumar <viresh.kumar@linaro.org> -- viresh
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web