aboutsummaryrefslogtreecommitdiff
path: root/sys/arm/broadcom/bcm2835/bcm2835_firmware.h
diff options
context:
space:
mode:
authorAndrew Turner <andrew@FreeBSD.org>2020-07-28 10:45:29 +0000
committerAndrew Turner <andrew@FreeBSD.org>2020-07-28 10:45:29 +0000
commit7413ae0ee548a888e3a62f8d5c8332302fad9fc1 (patch)
tree9266da6d240bbcc9f12e5c3a259c29337d1c0f73 /sys/arm/broadcom/bcm2835/bcm2835_firmware.h
parent0083fb5d491c5c539425e4196e573490659beedf (diff)
downloadsrc-7413ae0ee548a888e3a62f8d5c8332302fad9fc1.tar.gz
src-7413ae0ee548a888e3a62f8d5c8332302fad9fc1.zip
Switch the bcm2835 cpufreq driver to use the firmware interface
Use the new Raspberry Pi firmware driver in the cpufreq driver. It is intended all drivers that need to interact with the firmware will move to use the firmware driver, this is the first. Reviewed by: manu Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D25609
Notes
Notes: svn path=/head/; revision=363643
Diffstat (limited to 'sys/arm/broadcom/bcm2835/bcm2835_firmware.h')
-rw-r--r--sys/arm/broadcom/bcm2835/bcm2835_firmware.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_firmware.h b/sys/arm/broadcom/bcm2835/bcm2835_firmware.h
index da6a137083ed..c88b03e62d38 100644
--- a/sys/arm/broadcom/bcm2835/bcm2835_firmware.h
+++ b/sys/arm/broadcom/bcm2835/bcm2835_firmware.h
@@ -33,6 +33,115 @@
#ifndef _BCM2835_FIRMWARE_H_
#define _BCM2835_FIRMWARE_H_
+#define BCM2835_FIRMWARE_TAG_GET_CLOCK_RATE 0x00030002
+#define BCM2835_FIRMWARE_TAG_SET_CLOCK_RATE 0x00038002
+#define BCM2835_FIRMWARE_TAG_GET_MAX_CLOCK_RATE 0x00030004
+#define BCM2835_FIRMWARE_TAG_GET_MIN_CLOCK_RATE 0x00030007
+
+#define BCM2835_FIRMWARE_CLOCK_ID_EMMC 0x00000001
+#define BCM2835_FIRMWARE_CLOCK_ID_UART 0x00000002
+#define BCM2835_FIRMWARE_CLOCK_ID_ARM 0x00000003
+#define BCM2835_FIRMWARE_CLOCK_ID_CORE 0x00000004
+#define BCM2835_FIRMWARE_CLOCK_ID_V3D 0x00000005
+#define BCM2835_FIRMWARE_CLOCK_ID_H264 0x00000006
+#define BCM2835_FIRMWARE_CLOCK_ID_ISP 0x00000007
+#define BCM2835_FIRMWARE_CLOCK_ID_SDRAM 0x00000008
+#define BCM2835_FIRMWARE_CLOCK_ID_PIXEL 0x00000009
+#define BCM2835_FIRMWARE_CLOCK_ID_PWM 0x0000000a
+#define BCM2838_FIRMWARE_CLOCK_ID_EMMC2 0x0000000c
+
+union msg_get_clock_rate_body {
+ struct {
+ uint32_t clock_id;
+ } req;
+ struct {
+ uint32_t clock_id;
+ uint32_t rate_hz;
+ } resp;
+};
+
+union msg_set_clock_rate_body {
+ struct {
+ uint32_t clock_id;
+ uint32_t rate_hz;
+ } req;
+ struct {
+ uint32_t clock_id;
+ uint32_t rate_hz;
+ } resp;
+};
+
+#define BCM2835_FIRMWARE_TAG_GET_VOLTAGE 0x00030003
+#define BCM2835_FIRMWARE_TAG_SET_VOLTAGE 0x00038003
+#define BCM2835_FIRMWARE_TAG_GET_MAX_VOLTAGE 0x00030005
+#define BCM2835_FIRMWARE_TAG_GET_MIN_VOLTAGE 0x00030008
+
+#define BCM2835_FIRMWARE_VOLTAGE_ID_CORE 0x00000001
+#define BCM2835_FIRMWARE_VOLTAGE_ID_SDRAM_C 0x00000002
+#define BCM2835_FIRMWARE_VOLTAGE_ID_SDRAM_P 0x00000003
+#define BCM2835_FIRMWARE_VOLTAGE_ID_SDRAM_I 0x00000004
+
+union msg_get_voltage_body {
+ struct {
+ uint32_t voltage_id;
+ } req;
+ struct {
+ uint32_t voltage_id;
+ uint32_t value;
+ } resp;
+};
+
+union msg_set_voltage_body {
+ struct {
+ uint32_t voltage_id;
+ uint32_t value;
+ } req;
+ struct {
+ uint32_t voltage_id;
+ uint32_t value;
+ } resp;
+};
+
+#define BCM2835_FIRMWARE_TAG_GET_TEMPERATURE 0x00030006
+#define BCM2835_FIRMWARE_TAG_GET_MAX_TEMPERATURE 0x0003000a
+
+union msg_get_temperature_body {
+ struct {
+ uint32_t temperature_id;
+ } req;
+ struct {
+ uint32_t temperature_id;
+ uint32_t value;
+ } resp;
+};
+
+#define BCM2835_FIRMWARE_TAG_GET_TURBO 0x00030009
+#define BCM2835_FIRMWARE_TAG_SET_TURBO 0x00038009
+
+#define BCM2835_FIRMWARE_TURBO_ON 1
+#define BCM2835_FIRMWARE_TURBO_OFF 0
+
+union msg_get_turbo_body {
+ struct {
+ uint32_t id;
+ } req;
+ struct {
+ uint32_t id;
+ uint32_t level;
+ } resp;
+};
+
+union msg_set_turbo_body {
+ struct {
+ uint32_t id;
+ uint32_t level;
+ } req;
+ struct {
+ uint32_t id;
+ uint32_t level;
+ } resp;
+};
+
int bcm2835_firmware_property(device_t, uint32_t, void *, size_t);
#endif