mirror of
https://git.code.sf.net/p/openocd/code
synced 2024-11-24 19:56:23 +00:00
ad87fbd1cf
Make sure raspberrypi-native.cfg cannot be used on RPi5. Add raspberrypi5-gpiod.cfg which uses linuxgpiod adapter driver. Issue a warning if PCIe is in power save mode. While on it, re-format warnings issued from Tcl to look similar to LOG_WARNING() output. Change-Id: If19b0350bd5fff83d9a0c65999e33b161fb6957a Signed-off-by: Tomas Vanek <vanekt@fbl.cz> Reviewed-on: https://review.openocd.org/c/openocd/+/8333 Tested-by: jenkins Reviewed-by: Jonathan Bell <jonathan@raspberrypi.com>
76 lines
2.4 KiB
INI
76 lines
2.4 KiB
INI
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# Config for Raspberry Pi used as a bitbang adapter.
|
|
# https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
|
|
|
|
# Supports all models with 40-pin or 26-pin GPIO connector up to Raspberry Pi 4 B
|
|
# also supports Raspberry Pi Zero, Zero W and Zero 2 W.
|
|
|
|
# Adapter speed calibration is computed from cpufreq/scaling_max_freq.
|
|
# Adjusts automatically if CPU is overclocked.
|
|
|
|
adapter driver bcm2835gpio
|
|
|
|
proc read_file { name } {
|
|
if {[catch {open $name r} fd]} {
|
|
return ""
|
|
}
|
|
set result [read $fd]
|
|
close $fd
|
|
return $result
|
|
}
|
|
|
|
proc measure_clock {} {
|
|
set result [exec vcgencmd measure_clock arm]
|
|
set clock_hz [lindex [split $result "="] 1]
|
|
expr { $clock_hz / 1000 }
|
|
}
|
|
|
|
proc get_max_cpu_clock { default } {
|
|
set clock [read_file /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq]
|
|
if { $clock > 100000 } {
|
|
return $clock
|
|
}
|
|
|
|
# cpufreq not available. As the last resort try Broadcom's proprietary utility
|
|
if {![catch measure_clock clock] && $clock > 100000} {
|
|
return $clock
|
|
}
|
|
|
|
echo "Warn : Host CPU clock unknown."
|
|
echo "Warn : Using the highest possible value $default kHz as a safe default."
|
|
echo "Warn : Expect JTAG/SWD clock significantly slower than requested."
|
|
|
|
return $default
|
|
}
|
|
|
|
set compat [read_file /proc/device-tree/compatible]
|
|
set clocks_per_timing_loop 4
|
|
|
|
if {[string match *bcm2711* $compat]} {
|
|
set speed_offset 52
|
|
} elseif {[string match *bcm2837* $compat] || [string match *bcm2710* $compat]} {
|
|
set speed_offset 34
|
|
} elseif {[string match *bcm2836* $compat] || [string match *bcm2709* $compat]} {
|
|
set speed_offset 36
|
|
} elseif {[string match *bcm2835* $compat] || [string match *bcm2708* $compat]} {
|
|
set clocks_per_timing_loop 6
|
|
set speed_offset 32
|
|
} elseif {[string match *bcm2712* $compat]} {
|
|
echo "Error: Raspberrypi Pi 5 has moved GPIOs to PCIe connected RP1 chip."
|
|
echo "Error: Native GPIO handling is not supported, use 'raspberrypi5-gpiod.cfg'"
|
|
shutdown
|
|
} else {
|
|
set speed_offset 32
|
|
echo "Warn : Unknown type of the host SoC. Expect JTAG/SWD clock slower than requested."
|
|
}
|
|
|
|
set clock [get_max_cpu_clock 2000000]
|
|
set speed_coeff [expr { $clock / $clocks_per_timing_loop }]
|
|
|
|
# Transition delay calculation: SPEED_COEFF/khz - SPEED_OFFSET
|
|
# The coefficients depend on system clock and CPU frequency scaling.
|
|
bcm2835gpio speed_coeffs $speed_coeff $speed_offset
|
|
|
|
source [find interface/raspberrypi-gpio-connector.cfg]
|