diff options
Diffstat (limited to 'md/writeup')
-rw-r--r-- | md/writeup/raspberry5_baremetal_detect_board.md | 49 |
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 |