summaryrefslogtreecommitdiff
path: root/md/writeup/raspberry5_baremetal_detect_board.md
diff options
context:
space:
mode:
Diffstat (limited to 'md/writeup/raspberry5_baremetal_detect_board.md')
-rw-r--r--md/writeup/raspberry5_baremetal_detect_board.md49
1 files changed, 49 insertions, 0 deletions
diff --git a/md/writeup/raspberry5_baremetal_detect_board.md b/md/writeup/raspberry5_baremetal_detect_board.md
new file mode 100644
index 0000000..98bd505
--- /dev/null
+++ b/md/writeup/raspberry5_baremetal_detect_board.md
@@ -0,0 +1,49 @@
+title: Raspberry 5 baremetal detect board
+keywords:raspi5,asm,c,kernel,arm64
+
+# Raspberry 5 baremetal detect board
+
+Baremetal code snippet on how to detect what raspi board you are running on
+
+```c
+int get_raspi_board()
+{
+ unsigned int reg;
+ int ret=0;
+
+ /* read the system register */
+#if __aarch64__
+ asm volatile ("mrs %x0, midr_el1" : "=r" (reg));
+#else
+ asm volatile ("mrc p15,0,%0,c0,c0,0" : "=r" (reg));
+#endif
+
+ /* get the PartNum, detect board and MMIO base address */
+ switch ((reg >> 4) & 0xFFF) {
+ case 0xB76:
+ ret=1;
+ break;
+ case 0xC07:
+ ret=2;
+ break;
+ case 0xD03:
+ ret=3;
+ break;
+ case 0xD08:
+ ret=4;
+ break;
+ case 0xD0B:
+ ret=5;
+ default:
+ break;
+ }
+ return ret;
+}
+
+```
+
+## Links
+
+[1] https://wiki.osdev.org/Detecting_Raspberry_Pi_Board
+[2] [/writeup/raspberry5_baremetal_helloworld.md](/writeup/raspberry5_baremetal_helloworld.md)
+[3] https://github.com/DSERIOUSGUY/HobOS/blob/main/mmio.c \ No newline at end of file