uzbek-plus/linux/dts/msm8916-jz08-aurora-b9b.dts
q 4a7224c41f B9: built-in display (ST7735S SPI) in Linux and persistent B9C cache
- B9A: read-only audit of stock LK/DT: the panel is an ST7735S 128x128 on SPI (BLSP1 QUP4,
  16 MHz, mode 3, D/C GPIO116, RESET GPIO118), backlight = PM8916 MPP4 current sink 40 mA.
- B9B: upstream panel-mipi-dbi with the stock init sequence as firmware; MPP4 sink via pinctrl
  + gpio-backlight; first light with correct colours/orientation/offsets.
- B9C: fbcon (6x8, 21x16) on tty1 + getty, UART console kept, aurora-display service;
  cache B9C b9ce13c9 written and verified, cold boots with LTE + Wi-Fi + display.
- B9L (RAM only): lk2nd second stage with an msm8916 SPI panel port shows a picture before Linux.
- Sanitizer: whitelist for b8/ and b9/.
2026-10-03 01:45:02 +03:00

257 lines
7.8 KiB
Text

// SPDX-License-Identifier: GPL-2.0-only
/*
* Project Aurora — JZ08AU-XPA-7J-R3 (MSM8916, 512 MB, ST7735S SPI panel).
* B9B (RAM test only) = B8B + SPI ST7735S panel (panel-mipi-dbi) + MPP4 backlight. B8B: bam1 + Pronto/WCNSS remoteproc + Iris (no WLAN stack, no NV).
* Base was RAM-BOOT MODEM1: EMMC1 + MPSS remoteproc (native Aurora firmware, rmtfs -r). No BAM-DMUX/WWAN/WCNSS. Everything that could touch
* storage, radios or power management is explicitly disabled.
*
* Hardware facts from stock Aurora dtb_01 (see NOTES.md S2.1/S12):
* console = BLSP1 UART2 serial@78b0000, GPIO4 (TX) / GPIO5 (RX), 115200 8N1.
* RAM size (memory@80000000 reg) is filled in by lk2nd from SMEM.
*/
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include "msm8916-pm8916.dtsi" /* + RPM regulators (USB PHY L7/L13) */
/ {
model = "JZ08AU Aurora (RAM boot B9B)";
compatible = "jz08au,aurora", "qcom,msm8916";
chassis-type = "embedded";
aliases {
serial0 = &blsp_uart2;
mmc0 = &sdhc_1; /* eMMC */
};
chosen {
stdout-path = "serial0:115200n8";
};
/*
* B8B: WCNSS/Pronto carve-out at the stock Aurora address. Stock dtb_01 "peripheral_mem"
* (pronto PIL region) = 0x8b600000 size 0x600000; wcnss.mdt is linked at 0x8b600000.
* Directly follows mpss_mem (0x86800000 + 0x4e00000 = 0x8b600000) -> no overlap.
* Same fixed-address pattern as upstream msm8916-longcheer-l8150.dts.
*/
reserved-memory {
/delete-node/ wcnss;
wcnss_mem: wcnss@8b600000 {
reg = <0x0 0x8b600000 0x0 0x600000>;
no-map;
};
};
};
&blsp_uart2 {
pinctrl-0 = <&blsp_uart2_console_default>;
pinctrl-1 = <&blsp_uart2_console_sleep>;
pinctrl-names = "default", "sleep";
status = "okay";
};
/* --- RAM boot MODEM1 safety: no SD slot, no Wi-Fi, no modem data plane --- */
/* sdhc_1 (eMMC): enabled below, READ-ONLY enforced by initramfs (blockdev --setro) */
&sdhc_2 { status = "disabled"; };
/* usb: see peripheral block below */
/* mpss: enabled below */
&bam_dmux { status = "okay"; }; /* B4b1: data-plane mux driver (no bearer) */
&bam_dmux_dma { status = "okay"; };
/* wcnss: enabled below (B8B) */
/*
* USB peripheral only (ChipIdea ci-hdrc + qcom,usb-hs-phy-msm8916, upstream bindings).
* Stock Aurora: HSUSB_1p8 = L7 1.8 V, HSUSB_3p3 = L13 3.075 V, otg-control = 2 (PMIC VBUS detect),
* PHY init-seq identical to upstream. VBUS detect via PM8916 USB_IN (as on JZ02). No host, no role switch.
*/
&pm8916_usbin {
status = "okay";
};
&usb {
dr_mode = "peripheral";
extcon = <&pm8916_usbin>;
status = "okay";
};
&usb_hs_phy {
extcon = <&pm8916_usbin>;
};
/*
* Internal eMMC (stock: bootdevice=7824900.sdhci, qcom,bus-width 8, nonremovable,
* vdd = 8916_l8 2.85-2.9 V, vdd-io = 8916_l5 1.8 V). Upstream msm8916.dtsi already provides
* bus-width = <8>, non-removable, mmc-ddr-1_8v (no HS200 = conservative), sdc1 pinctrl;
* msm8916-pm8916.dtsi provides vmmc = pm8916_l8, vqmmc = pm8916_l5. Only enable it here.
*/
&sdhc_1 {
status = "okay";
};
/*
* MPSS (modem) remoteproc, native Aurora firmware from the RO-mounted modem FAT.
* mpss_mem: stock Aurora "modem_adsp_region" base 0x86800000 size 78 MiB (0x4e00000);
* Aurora modem.mdt load span 0x86800000..0x8b300000 (75 MiB), same as stock PIL log.
* mba_mem: upstream dynamic 1 MiB. pll-supply (pm8916_l7), cx/mx rpmpd from msm8916(-pm8916).dtsi.
* Driver has auto_boot = false: MSS starts only when rmtfs (-s) requests it.
* BAM-DMUX stays disabled (no data plane at this stage).
*/
&mba_mem {
status = "okay";
};
&mpss_mem {
reg = <0x0 0x86800000 0x0 0x4e00000>;
status = "okay";
};
&mpss {
pinctrl-0 = <&sim_ctrl_default>;
pinctrl-names = "default";
status = "okay";
};
/*
* SIM routing as found on stock Aurora (dtb_01 gpio-leds default-state and live
* Android /sys/kernel/debug/gpio): gpio1 (sim3_switch) high, gpio20 (sim_hotdet),
* gpio22 (sim1_switch), gpio23 (sim2_switch) low. Passive routing only.
*/
&tlmm {
sim_ctrl_default: sim-ctrl-default-state {
sim-low-pins {
pins = "gpio20", "gpio22", "gpio23";
function = "gpio";
bias-disable;
output-low;
};
sim-high-pins {
pins = "gpio1";
function = "gpio";
bias-disable;
output-high;
};
};
};
/*
* B8B: Pronto (WCNSS) remoteproc + Iris RF. Firmware = default "wcnss.mdt" from /firmware/image (RO FAT).
* Supplies come from msm8916-pm8916.dtsi and match stock dtb_01: vddpx/vddxo = L7 1.8 V, vddrfa = S3,
* vddpa = L9 3.3 V, vdddig = L5 1.8 V.
* Iris compatible: stock DT has none (generic qcom,wcnss_wlan + qcom,has-autodetect-xo). Stock voltages exclude
* WCN3660 (vddpa 2.9-3.0 V, vdddig 1.2 V); WCN3620 vs WCN3680 have identical vregs (differ in 48 MHz XO);
* stock Pronto FW caps lack DOT11AC -> WCN3620 (controlled hypothesis, see logs/b8/b8b).
* WLAN/cfg80211/wcn36xx are NOT in this kernel; wcnss_ctrl NV download is expected to fail (no NV in rootfs).
*/
&wcnss {
status = "okay";
};
&wcnss_iris {
compatible = "qcom,wcn3620";
};
/*
* B9B: built-in display, reconstructed from stock Aurora LK (aboot) + stock dtb_01 (logs/b9/b9a/B9A-RESULT.md).
* Panel: ST7735S 128x128 on BLSP1 QUP4 (spi@78b8000), MIPI-DBI type C 4-wire: GPIO12 MOSI, 13 MISO, 14 CS0 (native), 15 CLK;
* D/C = GPIO116 (stock "disp_dc"), RESET = GPIO118 (stock "disp_rst_n"). Stock LK: 16 MHz, SPI mode 3, TX only.
* Supplies per stock dtb_01 qcom,mdss_spi: vdd = 8916_l17 2.85 V, vddio = 8916_l6 1.8 V.
* Init sequence = exact stock 19 commands (firmware file jz08au,aurora-st7735s.bin, without trailing RAMWR).
* GRAM offset X=2 / Y=3 (stock CASET 2..129, RASET 3..130) via panel-timing back porches (panel-mipi-dbi convention).
* Backlight: PM8916 MPP4 current sink 40 mA as in stock LK (MODE_CTL 0x61, SINK_CTL 7, EN_CTL 0x80 when on).
* B9B step 1: backlight is NOT linked to the panel -> stays off (MODE_CTL 0x60) until enabled by hand via sysfs after readback.
*/
&pm8916_rpm_regulators {
pm8916_l17: l17 {
regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>;
};
};
&tlmm {
/* stock spi0_active: gpio12/13/15 func blsp_spi4 12 mA; spi0_cs0_active: gpio14 func blsp_spi4 2 mA (native CS0) */
blsp_spi4_b9b_default: blsp-spi4-b9b-default-state {
spi-pins {
pins = "gpio12", "gpio13", "gpio15";
function = "blsp_spi4";
drive-strength = <12>;
bias-disable;
};
cs-pins {
pins = "gpio14";
function = "blsp_spi4";
drive-strength = <2>;
bias-disable;
};
};
/* stock pmx_mdss active: gpio116 (D/C) + gpio118 (RESET), func gpio, 8 mA, no bias */
lcd_b9b_default: lcd-b9b-default-state {
pins = "gpio116", "gpio118";
function = "gpio";
drive-strength = <8>;
bias-disable;
};
};
&blsp_spi4 {
pinctrl-0 = <&blsp_spi4_b9b_default>;
pinctrl-1 = <&blsp_spi4_sleep>;
pinctrl-names = "default", "sleep";
status = "okay";
panel@0 {
compatible = "jz08au,aurora-st7735s", "panel-mipi-dbi-spi";
reg = <0>;
spi-max-frequency = <16000000>;
spi-cpol;
spi-cpha;
write-only;
dc-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>;
reset-gpios = <&tlmm 118 GPIO_ACTIVE_HIGH>; /* mipi-dbi drives 0 = in reset, 1 = run */
pinctrl-0 = <&lcd_b9b_default>;
pinctrl-names = "default";
power-supply = <&pm8916_l17>;
io-supply = <&pm8916_l6>;
format = "r5g6b5";
width-mm = <26>; /* 1.44" diagonal, square */
height-mm = <26>;
panel-timing {
hactive = <128>;
vactive = <128>;
hback-porch = <2>; /* GRAM column offset */
vback-porch = <3>; /* GRAM row offset */
clock-frequency = <0>;
hfront-porch = <0>;
vfront-porch = <0>;
hsync-len = <0>;
vsync-len = <0>;
};
};
};
&pm8916_mpps {
/* MPP4 current sink: mode 6 (sink), source sel 0, SINK_CTL = 7 (40 mA); output-low = sink off at probe */
lcd_bl_mpp4_default: mpp4-sink-state {
pins = "mpp4";
function = "sink";
drive-strength = <7>;
output-low;
};
};
/ {
lcd_backlight: backlight {
compatible = "gpio-backlight";
gpios = <&pm8916_mpps 4 GPIO_ACTIVE_HIGH>;
pinctrl-0 = <&lcd_bl_mpp4_default>;
pinctrl-names = "default";
};
};