From a7ee44c491655207a442495dc93c5a85a32d73fe Mon Sep 17 00:00:00 2001 From: gtxaspec Date: Mon, 23 Oct 2023 18:46:15 -0700 Subject: [PATCH] Update research-ingenic.md (#201) --- en/research-ingenic.md | 99 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/en/research-ingenic.md b/en/research-ingenic.md index 0aeccba..0cad41f 100644 --- a/en/research-ingenic.md +++ b/en/research-ingenic.md @@ -4,4 +4,101 @@ Ingenic SoC research and debugging notes ---------------------------------------- -Collection of information... +#### Control PWM channels on ingenic devices using `ingenic-pwm` utility included with OpenIPC: + +``` +INGENIC PWM Control Version: Oct 19 2023_18:01:16_latest-2294-g72f266e7 +Usage: ingenic-pwm [options] + +Options: + -c, --channel=<0-7> Specify PWM channel number + -q, --query Query channel state + -e, --enable Enable channel + -d, --disable Disable channel + -p, --polarity=<0|1> Set polarity (0: Inversed, 1: Normal) + -D, --duty= Set duty cycle in ns + -P, --period= Set period in ns + -r, --ramp= Ramp PWM (+value: Ramp up, -value: Ramp down) + -x, --max_duty= Set max duty for ramping + -n, --min_duty= Set min duty for ramping + -h, --help Display this help message +``` + +Example commands: +Turn on LED, Dim ON: Set PWM Channel 3 enabled, Period to 1000000, min Duty 0, max Duty 1000000, ramp rate + Dim Up, - to Dim down + +`ingenic-pwm -c 3 -e -p 1 -P 1000000 -n 0 -x 1000000 -r 50000` +`ingenic-pwm -c 3 -e -p 1 -P 1000000 -n 0 -x 1000000 -r -50000` + +--- + +#### Enable full engineering debuging + +Enable: Run `switch_debug on` to enable debugging +Disable: Run `switch debug off` or `switch_debug` to surpress debugging output + +Enabling will enable **FULL** engineering debuging output in dmesg. + +--- + +#### Dynamic Debugging + +Dynamic Debugging has been enabled on the Linux Kernel for the Ingenic platforms to surpress excess engineering debugging. + +https://www.kernel.org/doc/html/v4.14/admin-guide/dynamic-debug-howto.html + +Mount debugfs first: +`mount -t debugfs none /sys/kernel/debug` + +Check entries: +`cat /sys/kernel/debug/dynamic_debug/control` + +Example output: + +``` +../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:314 [avpu]write_reg =_ "Out-of-range register write: 0x%.4X\012" +../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:304 [avpu]write_reg =_ "Reg write: 0x%.4X: 0x%.8x\012" +../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:302 [avpu]write_reg =_ "Reg write: 0x%.4X: 0x%.8x\012" +../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:290 [avpu]read_reg =_ "Reg read: 0x%.4X: 0x%.8x\012" +../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:234 [avpu]wait_irq =_ "Unblocking channel\012" +../ingenic-opensdk/kernel/avpu/t31/avpu_ip.c:128 [avpu]avpu_hardirq_handler =_ "ENOMEM: Missed interrupt\012" +../ingenic-opensdk/kernel/avpu/t31/avpu_ip.c:117 [avpu]avpu_hardirq_handler =_ "bitfield is 0\012" +/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1860 [sensor_gc2053_t31]gc2053_probe =p "probe ok ------->gc2053\012" +/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1422 [sensor_gc2053_t31]gc2053_s_stream =p "gc2053 stream off\012" +/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1415 [sensor_gc2053_t31]gc2053_s_stream =p "gc2053 stream on\012" +/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1288 [sensor_gc2053_t31]gc2053_detect =p "-----%s: %d ret = %d, v = 0x%02x\012" +/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1282 [sensor_gc2053_t31]gc2053_detect =p "-----%s: %d ret = %d, v = 0x%02x\012" +``` + +`=_` means debugging output is `disabled`, while `=P` will indcate that debugging output is `enabled`. + +Check `dmesg` for output + +Note: Some old kernel modules may complain about missing symbols relating to dynamic debugging: +``` +[ 4.357160] sample_core: Unknown symbol __dynamic_dev_dbg (err 1) +[ 4.361299] sample_hal: Unknown symbol __dynamic_dev_dbg (err 1) +``` +To resolve this, make sure you update your entire OpenIPC installation to the latest versions after 10-20-2023, or try to update the individual kernel modules experiencing issues. As a last restort, you can also disable `CONFIG_DYNAMIC_DEBUG` in your kernel config, but extensive testing has not shown this to be an issue. + +--- + +#### Change sensor clock rate dynamically + +`echo "30000000" > /proc/jz/clock/cgu_cim/rate` +This may be used to change the MCLK clockrate setting for image sensors. You can use this to get more bandwidth for higher resoluitons for FPS rates. + +--- + +#### Dynamically insert or remove SDIO device + +Use these commands to enable or disable SDIO devices after the system has already booted. + +`echo "INSERT" > /sys/devices/platform/jzmmc_v1.2.X/present` +`echo "REMOVE" > /sys/devices/platform/jzmmc_v1.2.X/present` + +Where X = the MMC device you want to control MSC0=0 MSC1=1 + +--- + +