mirror of
https://github.com/richardghirst/PiBits.git
synced 2025-02-26 19:54:16 +01:00
Fix for Pi3 and PiZero, by lifting bits from Stuart Shelton's version.
This commit is contained in:
parent
025715a605
commit
4309bab2ca
@ -3,7 +3,7 @@
|
|||||||
all: servod
|
all: servod
|
||||||
|
|
||||||
servod: servod.c mailbox.c
|
servod: servod.c mailbox.c
|
||||||
gcc -Wall -g -O2 -o servod servod.c mailbox.c -lm
|
gcc -Wall -g -O2 -L/opt/vc/lib -I/opt/vc/include -o servod servod.c mailbox.c -lm -lbcm_host
|
||||||
|
|
||||||
install: servod
|
install: servod
|
||||||
[ "`id -u`" = "0" ] || { echo "Must be run as root"; exit 1; }
|
[ "`id -u`" = "0" ] || { echo "Must be run as root"; exit 1; }
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <bcm_host.h>
|
||||||
|
|
||||||
#include "mailbox.h"
|
#include "mailbox.h"
|
||||||
|
|
||||||
@ -957,13 +958,12 @@ get_model_and_revision(void)
|
|||||||
|
|
||||||
if (strstr(modelstr, "BCM2708"))
|
if (strstr(modelstr, "BCM2708"))
|
||||||
board_model = 1;
|
board_model = 1;
|
||||||
else if (strstr(modelstr, "BCM2709"))
|
else if (strstr(modelstr, "BCM2709") || strstr(modelstr, "BCM2835"))
|
||||||
board_model = 2;
|
board_model = 2;
|
||||||
else if (strstr(modelstr, "BCM2835")) /* Quick hack for Pi-Zero */
|
|
||||||
board_model = 1;
|
|
||||||
else
|
else
|
||||||
fatal("servod: Cannot parse the hardware name string\n");
|
fatal("servod: Cannot parse the hardware name string\n");
|
||||||
|
|
||||||
|
/* Revisions documented at http://elinux.org/RPi_HardwareHistory */
|
||||||
ptr = revstr + strlen(revstr) - 3;
|
ptr = revstr + strlen(revstr) - 3;
|
||||||
board_revision = strtol(ptr, &end, 16);
|
board_revision = strtol(ptr, &end, 16);
|
||||||
if (end != ptr + 2)
|
if (end != ptr + 2)
|
||||||
@ -977,16 +977,27 @@ get_model_and_revision(void)
|
|||||||
else
|
else
|
||||||
gpio_cfg = 3;
|
gpio_cfg = 3;
|
||||||
|
|
||||||
|
periph_virt_base = bcm_host_get_peripheral_address();
|
||||||
|
dram_phys_base = bcm_host_get_sdram_address();
|
||||||
|
periph_phys_base = 0x7e000000;
|
||||||
|
/*
|
||||||
|
* See https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface
|
||||||
|
*
|
||||||
|
* 1: MEM_FLAG_DISCARDABLE = 1 << 0 // can be resized to 0 at any time. Use for cached data
|
||||||
|
* MEM_FLAG_NORMAL = 0 << 2 // normal allocating alias. Don't use from ARM
|
||||||
|
* 4: MEM_FLAG_DIRECT = 1 << 2 // 0xC alias uncached
|
||||||
|
* 8: MEM_FLAG_COHERENT = 2 << 2 // 0x8 alias. Non-allocating in L2 but coherent
|
||||||
|
* MEM_FLAG_L1_NONALLOCATING = // Allocating in L2
|
||||||
|
* (MEM_FLAG_DIRECT | MEM_FLAG_COHERENT)
|
||||||
|
* 16: MEM_FLAG_ZERO = 1 << 4 // initialise buffer to all zeros
|
||||||
|
* 32: MEM_FLAG_NO_INIT = 1 << 5 // don't initialise (default is initialise to all ones
|
||||||
|
* 64: MEM_FLAG_HINT_PERMALOCK = 1 << 6 // Likely to be locked for long periods of time
|
||||||
|
*
|
||||||
|
*/
|
||||||
if (board_model == 1) {
|
if (board_model == 1) {
|
||||||
periph_virt_base = 0x20000000;
|
mem_flag = 0x0c; /* MEM_FLAG_DIRECT | MEM_FLAG_COHERENT */
|
||||||
periph_phys_base = 0x7e000000;
|
|
||||||
dram_phys_base = 0x40000000;
|
|
||||||
mem_flag = 0x0c;
|
|
||||||
} else {
|
} else {
|
||||||
periph_virt_base = 0x3f000000;
|
mem_flag = 0x04; /* MEM_FLAG_DIRECT */
|
||||||
periph_phys_base = 0x7e000000;
|
|
||||||
dram_phys_base = 0xc0000000;
|
|
||||||
mem_flag = 0x04;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1266,6 +1277,8 @@ main(int argc, char **argv)
|
|||||||
get_model_and_revision();
|
get_model_and_revision();
|
||||||
if (board_model == 1 && gpio_cfg == 1 && p5pins[0])
|
if (board_model == 1 && gpio_cfg == 1 && p5pins[0])
|
||||||
fatal("Board model 1 revision 1 does not have a P5 header\n");
|
fatal("Board model 1 revision 1 does not have a P5 header\n");
|
||||||
|
if (board_model == 2 && p5pins[0])
|
||||||
|
fatal("Board models 2 and later do not have a P5 header\n");
|
||||||
|
|
||||||
parse_pin_lists(p1first, p1pins, p5pins);
|
parse_pin_lists(p1first, p1pins, p5pins);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user