summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/raspberrypi
diff options
context:
space:
mode:
authorMudit Jain <spark1729@yahoo.com>2016-06-21 02:47:57 +0530
committerPavel Pisa <pisa@cmp.felk.cvut.cz>2016-06-28 15:44:58 +0200
commit48704cdebdd40391c5ca8d8020e5a77edff37677 (patch)
treef04e74e8d8a246756bfbf74a149e6924f3b78aa7 /c/src/lib/libbsp/arm/raspberrypi
parentbsp/mvme162: Include missing <rtems/bspIo.h> (diff)
downloadrtems-48704cdebdd40391c5ca8d8020e5a77edff37677.tar.bz2
arm/raspberrypi: Adding functionalities to Mailbox RPi
Added functions for retrieving firmware revision, board model and board revision.
Diffstat (limited to 'c/src/lib/libbsp/arm/raspberrypi')
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/include/vc.h19
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/misc/vc.c60
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h20
3 files changed, 99 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/vc.h b/c/src/lib/libbsp/arm/raspberrypi/include/vc.h
index 4e91fde832..dbf98120a5 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/include/vc.h
+++ b/c/src/lib/libbsp/arm/raspberrypi/include/vc.h
@@ -135,6 +135,25 @@ typedef struct
int
bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries);
+
+typedef struct
+{
+ uint32_t fw_rev;
+} bcm2835_mailbox_get_fw_rev_entries;
+
+int
+bcm2835_mailbox_get_firmware_revision(bcm2835_mailbox_get_fw_rev_entries* _entries);
+
+typedef struct
+{
+ uint32_t spec;
+} bcm2835_get_board_spec_entries;
+
+int
+bcm2835_mailbox_get_board_model(bcm2835_get_board_spec_entries* _entries);
+
+int
+bcm2835_mailbox_get_board_revision(bcm2835_get_board_spec_entries* _entries);
/** @} */
#endif /* LIBBSP_ARM_RASPBERRYPI_VC_H */
diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c b/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c
index e44d83ffde..2467833756 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c
+++ b/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c
@@ -290,3 +290,63 @@ bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries)
return -2;
return 0;
}
+
+int
+bcm2835_mailbox_get_firmware_revision(bcm2835_mailbox_get_fw_rev_entries* _entries)
+{
+ struct{
+ bcm2835_mbox_buf_hdr hdr;
+ bcm2835_mbox_tag_get_fw_rev get_fw_rev;
+ uint32_t end_tag;
+ }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE;
+ BCM2835_MBOX_INIT_BUF(&buffer);
+ BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_fw_rev,
+ BCM2835_MAILBOX_TAG_FIRMWARE_REVISION);
+ bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer));
+ if (bcm2835_mailbox_send_read_buffer(&buffer))
+ return -1;
+ _entries->fw_rev = buffer.get_fw_rev.body.resp.rev;
+ if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) )
+ return -2;
+ return 0;
+}
+
+int
+bcm2835_mailbox_get_board_model(bcm2835_get_board_spec_entries* _entries)
+{
+ struct{
+ bcm2835_mbox_buf_hdr hdr;
+ bcm2835_mbox_tag_get_board_spec get_board_model;
+ uint32_t end_tag;
+ }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE;
+ BCM2835_MBOX_INIT_BUF(&buffer);
+ BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_board_model,
+ BCM2835_MAILBOX_TAG_GET_BOARD_MODEL);
+ bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer));
+ if (bcm2835_mailbox_send_read_buffer(&buffer))
+ return -1;
+ _entries->spec = buffer.get_board_model.body.resp.spec;
+ if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) )
+ return -2;
+ return 0;
+}
+
+int
+bcm2835_mailbox_get_board_revision(bcm2835_get_board_spec_entries* _entries)
+{
+ struct{
+ bcm2835_mbox_buf_hdr hdr;
+ bcm2835_mbox_tag_get_board_spec get_board_revision;
+ uint32_t end_tag;
+ }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE;
+ BCM2835_MBOX_INIT_BUF(&buffer);
+ BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_board_revision,
+ BCM2835_MAILBOX_TAG_GET_BOARD_VERSION);
+ bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer));
+ if (bcm2835_mailbox_send_read_buffer(&buffer))
+ return -1;
+ _entries->spec = buffer.get_board_revision.body.resp.spec;
+ if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) )
+ return -2;
+ return 0;
+}
diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h b/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h
index f3d5a28897..1b2bf92f5e 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h
+++ b/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h
@@ -135,10 +135,30 @@ typedef struct {
/* Video Core */
#define BCM2835_MAILBOX_TAG_FIRMWARE_REVISION 0x00000001
+typedef struct {
+ bcm2835_mbox_tag_hdr tag_hdr;
+ union {
+ struct {
+ } req;
+ struct {
+ uint32_t rev;
+ } resp;
+ } body;
+} bcm2835_mbox_tag_get_fw_rev;
/* Hardware */
#define BCM2835_MAILBOX_TAG_GET_BOARD_MODEL 0x00010001
#define BCM2835_MAILBOX_TAG_GET_BOARD_VERSION 0x00010002
+typedef struct {
+ bcm2835_mbox_tag_hdr tag_hdr;
+ union {
+ struct {
+ } req;
+ struct {
+ uint32_t spec;
+ } resp;
+ } body;
+} bcm2835_mbox_tag_get_board_spec;
#if (BSP_IS_RPI2 == 1)
#define BCM2836_MAILBOX_BOARD_V_2_B 0x4