Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Current mainlining progress #1

Open
11 of 35 tasks
knuxify opened this issue Mar 13, 2021 · 53 comments
Open
11 of 35 tasks

Current mainlining progress #1

knuxify opened this issue Mar 13, 2021 · 53 comments

Comments

@knuxify
Copy link

knuxify commented Mar 13, 2021

This issue outlines the current mainlining progress in this repo.

(As a general note: the default branch in this repo will contain random commits that are simply made to save my work. Once the time comes to upstream my patches, I'll re-do them.)

For those interested in Broadcom Kona mainlining: I'm actively looking for developers to help out with the mainlining process, feel free to reply in this thread and make a pull request if you want to contribute! Just adding a DTS for your device and telling us about the status would be enough.

  • Initial bringup
    • Initial "booting" prototype (can see kernel logs)
    • Booting to initramfs
    • Fix clock initialization
    • Add pinmux driver (d63db4a)
    • pwr_mgr driver (partial, see bb08b0e)
    • Fix SMP
    • Fix USB (bringup seems to be fine but I can't confirm that it works)
  • Things that need to be fixed ASAP
    • Figure out why i2c read/writes are getting NAKed
    • Figure out why SD card fails to reset
  • Add PMU (bcm59054, needs driver modification to use custom reg names)
  • Add basic peripherals
    • Simple framebuffer
    • konafb DRM driver (required for panel support)
      • Panel driver (one of the panels is supported as an SPI panel, this one is connected via MIPI/DSI)
    • Sensors (in DTS, at least for Grand Neo - currently broken, see "Things that need to be fixed ASAP")
    • OTG/USB switch
    • Touch screen (in DTS, at least for Grand Neo - currently broken, see "Things that need to be fixed ASAP")
  • Future tasks
    • Audio
      • CAPH audio
      • Headset detection (this is handled with a separate input driver downstream; the driver is rather large (~1000 lines) but very clean and has good documentation at first glance, see also Documentation/Broadcom/headset.txt in downstream)
    • Hardware 3D acceleration
    • Hardware video decoding(?) - figure out what HAWAII_MM in downstream is (drivers/char/broadcom/mm)
    • Modem
    • Camera
    • SPI driver
  • Other stuff to figure out (may be required earlier)
    • pi_mgr/Kona Power Island
    • axitrace, whatever it is it's very low-level debuging stuff, no clue if it would even work on a production device, and doubt it's of any use to us
    • IOMMU/IOVMM (aka MMMMU/M4U, will likely be required for the multimedia features, might be required for GPU support?)
    • Kona PWM (should work, the drivers in mainline and downstream are nearly identical)
    • memc driver (?)

See also: https://wiki.postmarketos.org/wiki/Samsung_Galaxy_Grand_Neo_(samsung-baffinlite)

@knuxify
Copy link
Author

knuxify commented Apr 14, 2021

NOTE: This comment is obsolete. The things that were required to get clocks working were initializing the power manager and adding bus clock support.

For anyone who wants to take up fixing clocks:

  • I verified that the values used in clock initialization are correct
  • Some clocks also have bus clocks (at presumably the same address), but this type of clock is not implemented in the driver. However, in downstream these appear to be nearly identical in handling to peripheral clocks. Adding those clocks does not fix the issues, however. (EDIT: I only enabled these for SDIO, but forgot to enable sleep clocks as well; bsc/i2c clocks only have bus clocks, they're a better target) (EDIT 2: Added sleep and bus clocks as per the u-boot driver; still doesn't work. (Although initializing the sleep clocks as software clocks doesn't bring up any issues.))
  • The mainline clock driver appears to work in the same way as the downstream driver (although they're implemented very differently).
  • This leaves the Kona Power Island (PI) as the only other potential culprit. It's enabled with CONFIG_KONA_PI_MGR and has files in arch/arm/plat-kona/pi_mgr.c and arch/arm/mach-java/pi_mgr.c on downstream. It appears to control the operating frequency (OPP) of certain components and keeps a list of enabled clocks for use with "DFS" (which does not stand for debug fs, but it's not explained what it means anywhere). There's a file in downstream called Documentation/Broadcom/Kona_PM_DFS_and_QOS_API.txt which appears to explain some of the API used.
  • Seems like there were some changes to the clocks, but just doing git revert doesn't work; this might take a little fiddling (edit: tested this somewhat, i don't think that's the issue)
  • See also: clock drivers in the u-boot tree: https://github.com/u-boot/u-boot/tree/master/arch/arm/cpu/armv7/bcm235xx

TL;DR: mainline driver matches downstream, this is probably a power management issue or a bootloader issue

UPDATE: Seems like PI_MGR/dfs isn't just for clocks; I was able to find mentions of it in the UART driver (alongside some other bcm-specific fixes, enabled with the CONFIG_BRCM_UART_CHANGES kernel config (also of note are CONFIG_DW_UART_WA_JIRA_1744 and CONFIG_DW_BT_UART_CHANGES).
Also, there's some mentions of a wakelock, so we might need to add support for that as well.

@knuxify
Copy link
Author

knuxify commented Apr 27, 2021

UPDATE: this log is now obsolete, see next post
Posting an example boot log here:

[    0.000000][    T0] Booting Linux on physical CPU 0x0␍␊
[    0.000000][    T0] Linux version 5.12.0-next-20210427-NG (pmos@muffet) (armv7-alpine-linux-musleabihf-gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, GNU ld (GNU Binutils) 2.35.2) #1 SMP PREEMPT Tue Apr 27 19:27:10 UTC 2021␍␊
[    0.000000][    T0] CPU: ARMv7 Processor [410fc074] revision 4 (ARMv7), cr=10c5387d␍␊
[    0.000000][    T0] CPU: div instructions available: patching division code␍␊
[    0.000000][    T0] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache␍␊
[    0.000000][    T0] OF: fdt: Machine model: Samsung Galaxy Grand Neo␍␊
[    0.000000][    T0] printk: debug: ignoring loglevel setting.␍␊
[    0.000000][    T0] Memory policy: Data cache writealloc␍␊
[    0.000000][    T0] Ignoring RAM at 0xb0000000-0xbe200000␍␊
[    0.000000][    T0] Consider using a HIGHMEM enabled kernel.␍␊
[    0.000000][    T0] Zone ranges:␍␊
[    0.000000][    T0]   Normal   [mem 0x0000000080000000-0x00000000afffffff]␍␊
[    0.000000][    T0] Movable zone start for each node␍␊
[    0.000000][    T0] Early memory node ranges␍␊
[    0.000000][    T0]   node   0: [mem 0x0000000080000000-0x00000000afffffff]␍␊
[    0.000000][    T0] Initmem setup node 0 [mem 0x0000000080000000-0x00000000afffffff]␍␊
[    0.000000][    T0] On node 0 totalpages: 196608␍␊
[    0.000000][    T0]   Normal zone: 1536 pages used for memmap␍␊
[    0.000000][    T0]   Normal zone: 0 pages reserved␍␊
[    0.000000][    T0]   Normal zone: 196608 pages, LIFO batch:63␍␊
[    0.000000][    T0] percpu: Embedded 16 pages/cpu s32780 r8192 d24564 u65536␍␊
[    0.000000][    T0] pcpu-alloc: s32780 r8192 d24564 u65536 alloc=16*4096␍␊
[    0.000000][    T0] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 ␍␊
[    0.000000][    T0] Built 1 zonelists, mobility grouping on.  Total pages: 195072␍␊
[    0.000000][    T0] Kernel command line: console=ttyS1,115200n8 mem=994M ignore_loglevel PMOS_NO_OUTPUT_REDIRECT nosmp␍␊
[    0.000000][    T0] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes, linear)␍␊
[    0.000000][    T0] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes, linear)␍␊
[    0.000000][    T0] mem auto-init: stack:off, heap alloc:off, heap free:off␍␊
[    0.000000][    T0] Memory: 761092K/786432K available (8192K kernel code, 3532K rwdata, 2740K rodata, 1024K init, 1166K bss, 25340K reserved, 0K cma-reserved)␍␊
[    0.000000][    T0] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1␍␊
[    0.000000][    T0] rcu: Preemptible hierarchical RCU implementation.␍␊
[    0.000000][    T0] ⇥	Trampoline variant of Tasks RCU enabled.␍␊
[    0.000000][    T0] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.␍␊
[    0.000000][    T0] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16␍␊
[    0.000000][    T0] random: get_random_bytes called from start_kernel+0x2e8/0x4dc with crng_init=0␍␊
[    0.000000][    T0] __ccu_wait_bit: slave_ccu/0x0404 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for uartb2␍␊
[    0.000000][    T0] __ccu_wait_bit: slave_ccu/0x0458 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for bsc1␍␊
[    0.000000][    T0] __ccu_wait_bit: slave_ccu/0x045c bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for bsc2␍␊
[    0.000000][    T0] __ccu_wait_bit: slave_ccu/0x0470 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for bsc3␍␊
[    0.000000][    T0] __ccu_wait_bit: slave_ccu/0x0474 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for bsc4␍␊
[    0.000000][    T0] Broadcom slave_ccu initialization had errors␍␊
[    0.000000][    T0] __ccu_wait_bit: master_ccu/0x0358 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for sdio1␍␊
[    0.000000][    T0] __ccu_wait_bit: master_ccu/0x0364 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for sdio3␍␊
[    0.000000][    T0] __ccu_wait_bit: master_ccu/0x0360 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for sdio4␍␊
[    0.000000][    T0] __ccu_wait_bit: master_ccu/0x0358 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for sdio1_sleep␍␊
[    0.000000][    T0] __ccu_wait_bit: master_ccu/0x0364 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for sdio3_sleep␍␊
[    0.000000][    T0] __ccu_wait_bit: master_ccu/0x0360 bit 18 was never set␍␊
[    0.000000][    T0] __peri_clk_init: error initializing gate for sdio4_sleep␍␊
[    0.000000][    T0] Broadcom master_ccu initialization had errors␍␊
[    0.000000][    T0] sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 21474836475000000ns␍␊
[    0.000000][    T0] Calibrating delay loop... 2393.70 BogoMIPS (lpj=11968512)␍␊
[    0.060000][    T0] pid_max: default: 32768 minimum: 301␍␊
[    0.060000][    T0] LSM: Security Framework initializing␍␊
[    0.060000][    T0] SELinux:  Initializing.␍␊
[    0.060000][    T0] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)␍␊
[    0.060000][    T0] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)␍␊
[    0.060000][    T0] CPU: Testing write buffer coherency: ok␍␊
[    0.060000][    T1] CPU0: update cpu_capacity 1024␍␊
[    0.060000][    T1] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000␍␊
[    0.060000][    T1] Setting up static identity map for 0x80100000 - 0x80100060␍␊
[    0.060000][    T1] rcu: Hierarchical SRCU implementation.␍␊
[    0.060000][    T1] smp: Bringing up secondary CPUs ...␍␊
[    0.060000][    T1] smp: Brought up 1 node, 1 CPU␍␊
[    0.060000][    T1] SMP: Total of 1 processors activated (2393.70 BogoMIPS).␍␊
[    0.060000][    T1] CPU: All CPU(s) started in SVC mode.␍␊
[    0.060000][    T1] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 4␍␊
[    0.060000][    T1] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns␍␊
[    0.060000][    T1] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)␍␊
[    0.060000][    T1] pinctrl core: initialized pinctrl subsystem␍␊
[    0.060000][    T1] reg-dummy reg-dummy: no of_node; not parsing pinctrl DT␍␊
[    0.060000][    T1] NET: Registered protocol family 16␍␊
[    0.060000][    T1] DMA: preallocated 256 KiB pool for atomic coherent allocations␍␊
[    0.060000][    T1] audit: initializing netlink subsys (disabled)␍␊
[    0.060000][   T15] audit: type=2000 audit(0.060:1): state=initialized audit_enabled=0 res=1␍␊
[    0.060000][    T1] cpuidle: using governor ladder␍␊
[    0.060000][    T1] cpuidle: using governor menu␍␊
[    0.060000][    T1] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.␍␊
[    0.060000][    T1] hw-breakpoint: maximum watchpoint size is 8 bytes.␍␊
[    0.060000][    T1] cryptd: max_cpu_qlen set to 1000␍␊
[    0.060000][    T1] usbcore: registered new interface driver usbfs␍␊
[    0.060000][    T1] usbcore: registered new interface driver hub␍␊
[    0.060000][    T1] usbcore: registered new device driver usb␍␊
[    0.060000][    T1] mc: Linux media interface: v0.10␍␊
[    0.060000][    T1] videodev: Linux video capture interface: v2.00␍␊
[    0.060000][    T1] Advanced Linux Sound Architecture Driver Initialized.␍␊
[    0.060000][    T1] Bluetooth: Core ver 2.22␍␊
[    0.060000][    T1] NET: Registered protocol family 31␍␊
[    0.060000][    T1] Bluetooth: HCI device and connection manager initialized␍␊
[    0.060000][    T1] Bluetooth: HCI socket layer initialized␍␊
[    0.060000][    T1] Bluetooth: L2CAP socket layer initialized␍␊
[    0.060000][    T1] Bluetooth: SCO socket layer initialized␍␊
[    0.060000][    T1] NET: Registered protocol family 2␍␊
[    0.060000][    T1] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)␍␊
[    0.060000][    T1] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)␍␊
[    0.060000][    T1] TCP established hash table entries: 8192 (order: 3, 32768 bytes, linear)␍␊
[    0.060000][    T1] TCP bind hash table entries: 8192 (order: 4, 65536 bytes, linear)␍␊
[    0.060000][    T1] TCP: Hash tables configured (established 8192 bind 8192)␍␊
[    0.060000][    T1] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)␍␊
[    0.060000][    T1] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)␍␊
[    0.060000][    T1] NET: Registered protocol family 1␍␊
[    0.060000][    T1] Initialise system trusted keyrings␍␊
[    0.060000][    T7] Unpacking initramfs...␍␊
[    0.060000][    T7] Freeing initrd memory: 1108K␍␊
[    0.060000][    T1] workingset: timestamp_bits=30 max_order=18 bucket_order=0␍␊
[    0.060000][    T1] ntfs: driver 2.1.32 [Flags: R/W].␍␊
[    0.060000][    T1] fuse: init (API version 7.33)␍␊
[    0.060000][    T1] jitterentropy: Initialization failed with host not compliant with requirements: 2␍␊
[    0.060000][    T1] Key type asymmetric registered␍␊
[    0.060000][    T1] Asymmetric key parser 'x509' registered␍␊
[    0.060000][    T1] io scheduler mq-deadline registered␍␊
[    0.060000][    T1] io scheduler kyber registered␍␊
[    0.060000][    T1] io scheduler bfq registered␍␊
[    0.060000][    T1] bcm-kona-gpio 35003000.gpio: Setting up Kona GPIO␍␊
[    0.060000][    T1] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled␍␊
[    0.060000][    T1] serial8250 serial8250: no of_node; not parsing pinctrl DT␍␊
[    0.060000][    T1] 3e000000.serial: ttyS0 at MMIO 0x3e000000 (irq = 29, base_baud = 808290) is a 16550A␍␊
[    0.060000][    T1] printk: console [ttyS1] disabled␍␊
[    0.060000][    T1] 3e002000.serial: ttyS1 at MMIO 0x3e002000 (irq = 31, base_baud = 808290) is a 16550A␍␊
[    0.060000][    T1] printk: console [ttyS1] enabled␍␊
[    0.060000][    T1] loop: module loaded␍␊
[    0.060000][    T1] zram: Added device: zram0␍␊
[    0.060000][    T1] tun: Universal TUN/TAP device driver, 1.6␍␊
[    0.060000][    T1] PPP generic driver version 2.4.2␍␊
[    0.060000][    T1] PPP BSD Compression module registered␍␊
[    0.060000][    T1] PPP Deflate Compression module registered␍␊
[    0.060000][    T1] PPP MPPE Compression module registered␍␊
[    0.060000][    T1] NET: Registered protocol family 24␍␊
[    0.060000][    T1] mousedev: PS/2 mouse device common for all mice␍␊
[    0.060000][    T1] i2c /dev entries driver␍␊
[    0.060000][    T1] bcm-kona-i2c 3e016000.i2c: device registered successfully␍␊
[    0.060000][    T1] bcm-kona-i2c 3e017000.i2c: device registered successfully␍␊
[    0.060000][    T1] bcm-kona-i2c 3e018000.i2c: device registered successfully␍␊
[    0.060000][    T1] bcm-kona-i2c 3e01c000.i2c: device registered successfully␍␊
[    0.060000][    T1] device-mapper: uevent: version 1.0.3␍␊
[    0.060000][    T1] device-mapper: ioctl: 4.45.0-ioctl (2021-03-22) initialised: dm-devel@redhat.com␍␊
[    0.060000][    T1] sdhci: Secure Digital Host Controller Interface driver␍␊
[    0.060000][    T1] sdhci: Copyright(c) Pierre Ossman␍␊
[    0.060000][    T1] Synopsys Designware Multimedia Card Interface Driver␍␊
[    0.060000][    T1] sdhci-pltfm: SDHCI platform and OF driver helper␍␊
[    0.060000][    T1] hid: raw HID events driver (C) Jiri Kosina␍␊
[    0.060000][    T1] usbcore: registered new interface driver usbhid␍␊
[    0.060000][    T1] usbhid: USB HID core driver␍␊
[    0.060000][    T1] ashmem: initialized␍␊
[    0.060000][    T1] usbcore: registered new interface driver snd-usb-audio␍␊
[    0.060000][    T1] snd-soc-dummy snd-soc-dummy: no of_node; not parsing pinctrl DT␍␊
[    0.060000][    T1] GACT probability NOT on␍␊
[    0.060000][    T1] Mirror/redirect action on␍␊
[    0.060000][    T1] u32 classifier␍␊
[    0.060000][    T1]     input device check on␍␊
[    0.060000][    T1]     Actions configured␍␊
[    0.060000][    T1] xt_time: kernel timezone is -0000␍␊
[    0.060000][    T1] IPVS: Registered protocols ()␍␊
[    0.060000][    T1] IPVS: Connection hash table configured (size=4096, memory=32Kbytes)␍␊
[    0.060000][    T1] IPVS: ipvs loaded.␍␊
[    0.060000][    T1] ipip: IPv4 and MPLS over IPv4 tunneling driver␍␊
[    0.060000][    T1] Initializing XFRM netlink socket␍␊
[    0.060000][    T1] NET: Registered protocol family 10␍␊
[    0.060000][   T61] (NULL device *): Debounce value 200000 not in range␍␊
[    0.060000][   T61] sdhci-kona 3f180000.sdio: Got CD GPIO␍␊
[    0.060000][   T61] __ccu_wait_bit: master_ccu/0x0358 bit 18 was never set␍␊
[    0.060000][   T61] kona_peri_clk_set_rate: gating failure for sdio1␍␊
[    0.060000][   T61] __ccu_wait_bit: master_ccu/0x0358 bit 18 was never set␍␊
[    0.060000][   T61] clk_gate: failed to enable gate for sdio1␍␊
[    0.060000][   T61] sdhci-kona 3f180000.sdio: Failed to enable core clock␍␊
[    0.060000][   T61] sdhci-kona 3f180000.sdio: Probing of sdhci-pltfm failed: -5␍␊
[    0.060000][   T61] sdhci-kona: probe of 3f180000.sdio failed with error -5␍␊
[    0.060000][    T1] Segment Routing with IPv6␍␊
[    0.060000][    T1] mip6: Mobile IPv6␍␊
[    0.060000][    T1] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver␍␊
[    0.060000][    T1] NET: Registered protocol family 17␍␊
[    0.060000][    T1] NET: Registered protocol family 15␍␊
[    0.060000][    T1] Bridge firewalling registered␍␊
[    0.060000][    T1] Bluetooth: RFCOMM TTY layer initialized␍␊
[    0.060000][    T1] Bluetooth: RFCOMM socket layer initialized␍␊
[    0.060000][    T1] Bluetooth: RFCOMM ver 1.11␍␊
[    0.060000][    T1] Bluetooth: BNEP (Ethernet Emulation) ver 1.3␍␊
[    0.060000][    T1] Bluetooth: BNEP socket layer initialized␍␊
[    0.060000][    T1] Bluetooth: HIDP (Human Interface Emulation) ver 1.2␍␊
[    0.060000][    T1] Bluetooth: HIDP socket layer initialized␍␊
[    0.060000][    T1] l2tp_core: L2TP core driver, V2.0␍␊
[    0.060000][    T1] l2tp_ppp: PPPoL2TP kernel driver, V2.0␍␊
[    0.060000][    T1] NET: Registered protocol family 35␍␊
[    0.060000][    T1] Key type dns_resolver registered␍␊
[    0.060000][    T1] Registering SWP/SWPB emulation handler␍␊
[    0.060000][    T1] Loading compiled-in X.509 certificates␍␊
[    0.060000][    T1] input: gpio-keys as /devices/platform/gpio-keys/input/input0␍␊
[    0.060000][    T1] cfg80211: Loading compiled-in X.509 certificates for regulatory database␍␊
[    0.060000][    T1] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'␍␊
[    0.060000][    T1] ALSA device list:␍␊
[    0.060000][    T1]   No soundcards found.␍␊
[    0.060000][    T1] dw-apb-uart 3e002000.serial: forbid DMA for kernel console␍␊
[    0.060000][   T16] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2␍␊
[    0.060000][   T16] cfg80211: failed to load regulatory.db␍␊

@knuxify knuxify pinned this issue Apr 28, 2021
@knuxify
Copy link
Author

knuxify commented May 3, 2021

Update: IT'S ALIVE

image

Turns out SMP was more broken than I thought, and just setting nosmp didn't fix all issues. Disabling SMP in the kernel config did, however, and I managed to get the boot log from the initramfs!

Now to get USB working...

@knuxify
Copy link
Author

knuxify commented May 4, 2021

For anyone who wants to take up writing the charging driver:

  • There are 3 bcmpmu drivers in downstream, this device uses the ones enabled with CONFIG_MFD_BCM_PMU59xxx (files in drivers/mfd starting with bcmpmu59xxx-)
  • The part of the driver that handles charging is called "accy"
  • Also, we have CONFIG_SEC_CHARGING_FEATURE enabled; seems like without it, it does some rudimentary checks to make sure the battery doesn't discharge too far.
    • However, this also brings in a whole new level of complexity, because this option enables an entire custom charging driver... it's about 2000 lines in total (+ 500 in the other file). This driver can be found in drivers/power/spa_power.c and drivers/power/spa_ps.c.
    • And to make matters even worse, it seems like USB detection is essentially just hacked-in in the board file, so we'd need to figure out how to get this information from the driver (but it should be relatively simple?)
    • However, we might be able to get basic charging working on the device regardless of this driver's presence; a quick glance at it reveals a value, CONFIG_SPA_SUPPLEMENTARY_CHARGING, which I think means that charging is handled separately? If I had to guess, the only thing we'd need this driver for is enabling/disabling the charging mode.

Generally, we still need a LOT more research to figure this out. Which parts of the driver are responsible for what? What does the accy driver do by itself, and what does sec_charging to that accy doesn't? What handles the battery, and battery values? How is USB detection handled (and how should we handle it in mainline?)

@knuxify
Copy link
Author

knuxify commented May 4, 2021

Today's progress: did some research on how to approach the USB issue. I found a few things:

  • seems like the FSA9485 is just a switch, actual OTG stuff is handled in dwc2 driver
  • dwc2 driver keeps using the wrong irq? needs to be investigated
  • also, it needs some regulators, which are added by the PMU - thus, I started working on PMU bringup. added pmu_bsc (i2c bus for pmu) and other required stuff in DTS - only thing left now is to fix the driver up to work with the bcm59054.

@knuxify
Copy link
Author

knuxify commented May 7, 2021

The last 2 days' progress: I modified the bcm590xx driver to use bcm59054 regulator values. So far, it appears to work well! While skimming through the downstream source though, I found some extra code related to default/available regulator modes. This has yet to be implemented.

bcm590xx-vregs bcm590xx-vregs: no of_node; not parsing pinctrl DT␍␊
[    1.500000][    T1] bcm590xx-vregs bcm590xx-vregs: no of_node; not parsing pinctrl DT␍␊
[    1.510000][    T1] rfldo: mapping for mode 8 not defined␍␊
[    1.520000][    T1] rfldo: mode mapping not defined␍␊
[    1.530000][    T1] camldo1: mapping for mode 8 not defined␍␊
[    1.540000][    T1] camldo2: mapping for mode 8 not defined␍␊
[    1.550000][    T1] simldo1: mode mapping not defined␍␊
[    1.560000][    T1] simldo2: mode mapping not defined␍␊
[    1.570000][    C0] random: fast init done␍␊
[    1.580000][    T1] audldo: mapping for mode 8 not defined␍␊
[    1.590000][    T1] audldo: mode mapping not defined␍␊
[    1.600000][    T1] micldo: Bringing 1200000uV into 1800000-1800000uV␍␊
[    1.610000][    T1] csr: mapping for mode 8 not defined␍␊
[    1.620000][    T1] iosr1: mapping for mode 4 not defined␍␊
[    1.630000][    T1] sdsr1: mapping for mode 4 not defined␍␊
[    1.640000][    T1] sdsr2: mapping for mode 4 not defined␍␊

@knuxify
Copy link
Author

knuxify commented May 7, 2021

For anyone who wants to take up fixing USB:

  • It uses the dwc_otg driver downstream, which seems to have evolved to the dwc2 driver in mainline
  • For some reason, the IRQ it seems to reserve/print out is incorrect... however, manually changing it in the code doesn't fix initialization at all.
  • And of course it just wouldn't be downstream without some overengineered wrappers. Seems like CONFIG_KONA_USB_CONTROL enables the bcm_hsotgctrl driver, which seems to manage some power-related stuff regarding the dwc2 controller. This driver is likely responsible for allowing dwc2 bringup and may need to be ported. It's ~1250 lines long, but it seems relatively simple to re-implement.

As of now, the driver fails to initalize with the following errors:

[    2.140000][    T7] dwc2 3f120000.usb: mapped PA 3f120000 to VA (ptrval)␍␊
[    2.150000][    T7] dwc2 3f120000.usb: registering common handler for irq29␍␊
[    2.170000][    T7] dwc2 3f120000.usb: Configuration mismatch. dr_mode forced to device␍␊
[    2.180000][    T7] dwc2 3f120000.usb: Bad value for GSNPSID: 0x00000000␍␊

Which is odd, considering that all initial values (i2c address, irq number, GSNPSID mask) match up with their downstream counterparts.

Update: seems like the hsotgctrl driver is actually mostly responsible for usbphy bringup, and the drivers seem to be quite similar! Downstream has a lot of extra setup though, and whatever MDIO is. Currently investigating this.

As of now, considering that the "configuration mismatch" part comes after usb-phy bringup (checked this with printk statements), I'm assuming it's some kind of misconfiguration/miscommunication between the two? Could still be something that Broadcom modified in downstream.

Edit 2: I suspect this might be a similar situation to the clocks, where USB is enabled upon power manager init. This has yet to be checked though.

@knuxify
Copy link
Author

knuxify commented May 10, 2021

Upon further investigation, it seems like the pi_mgr driver could be quite closely connected to the pwr_mgr driver... so if we want to get things working, we might have to port both at once.

@knuxify
Copy link
Author

knuxify commented Jun 27, 2021

Update on the clocks - it turns out there is something I missed in the clock initialization function, and it's a function that flips something related to the pwr_mgr. However switching that will probably require me to make a separate pwr_mgr driver (unless I wanna play around with trying to guess the right virtual address, which I'm quite sure wouldn't be the correct way to go about this anyways).

Knowing my luck though, it'll probably also require me to port some initialization stuff from the pwr_mgr driver, and that also has ties to pi_mgr...

...this will take a while.

@onny
Copy link

onny commented Jul 20, 2021

This work is really astonishing 👍 I guess that I don't have this phone yet but the mainlining process seems challenging :) As far as I can see there is not so much working yet on mainline but would it be possible to already package the mainline kernel part for pmOS?

@knuxify
Copy link
Author

knuxify commented Jul 21, 2021

would it be possible to already package the mainline kernel part for pmOS?

@onny In theory - it could be packaged like a regular mainline kernel, but the mainline kernel packages in pmOS are just regular upstream Linux source + any needed patches, so I'd probably have to clean up my patches before it can be cleanily done.

But if we used this repo as the source, it could work. (Note the localversion needs to be changed in the defconfig to match the package name IIRC, or it won't build.)

Probably wouldn't get accepted into upstream at the current state, though.

@santeri3700
Copy link

Hi, it's great so see that the BCM Kona platform is getting some love from a knowledgeable developer!

Would you mind helping me try to compile and boot this kernel on my Samsung Galaxy Core Plus SM-G3500 (codename: cs02)?
I also have another cs02 and a Samsung Galaxy Trend Plus (codename: kylepro) and can do testing on it too.

I have to say that I'm in no way a kernel developer or hacker, I've experimented my way here half-blindly and somehow my device is still alive. My skills are mostly above the kernel.

cs02 documentation: https://wiki.postmarketos.org/wiki/Samsung_Galaxy_Core_Plus_(samsung-cs02)
kylepro documentation: https://wiki.postmarketos.org/wiki/Samsung_Galaxy_Trend_Plus_(samsung-kylepro)
(I've documented S-Boot 4.0 to the cs02 documentation and I'm able to get debug output directly via serial)

I've tried booting it with two different DTS (compiled separately) and a slightly customized defconfig based on your defconfig and I'm getting the following error in early boot (output captured with a USB serial debug cable).

I'm using pmOS as a base for testing the kernel, if that matters (I'm willing to compile separately if needed).

Starting kernel at 0x81e08000...

Uncompressing Linux... done, booting the kernel.

Error: invalid dtb and unrecognized/unsupported machine ID
  r1=0x00000a8d, r2=0x81e00100
  r2[]=05 00 00 00 01 00 41 54 00 00 00 00 00 00 00 00
Available machine support:

ID (hex)        NAME
ffffffff        Generic DT based system
ffffffff        BCM21664 Broadcom Application Processor

Please check your kernel config and/or bootloader.

Not sure where to start to be honest.. Can you see something obviously wrong with the first DTS file?

DTS option 1: https://gist.github.com/santeri3700/cfe89c73367f88a901ea7b81f11949f6
DTS option 2: https://github.com/santeri3700/linux-samsung-cs02-mainline/blob/master/arch/arm/boot/dts/bcm21664-cs02.dts
Original downstream DTS (didn't try it): https://github.com/santeri3700/android_kernel_samsung_cs02/blob/stock/arch/arm/boot/dts/hawaii_ss_cs02_rev02.dts

DTS option 2 kernel fork actually boots further, but is broken in some way which is described in here: https://gitlab.com/deata/kylepro-mainlining/-/issues/1
I'm getting the exact same results with my "cs02" since it's almost identical to "kylepro".

My customized defconfig: https://gist.github.com/santeri3700/61a9b87b2f9bb58b78944d6cf1e389a4

  • Disabled BCM23550 (because the error above previously contained both 21664 and 23550)
  • Adapted CMDLINE to match my device (see cs02 documentation and my defconfig)
  • Enabled LCD driver (HX8357)
  • Enabled accelerometer driver (BMC150)
  • Enabled camera driver (S5K4ECGX)

@knuxify
Copy link
Author

knuxify commented Jul 30, 2021

@santeri3700

Hi, it's great so see that the BCM Kona platform is getting some love from a knowledgeable developer!

wouldn't necessarily call myself knowledgeable yet, but alas... :)

I've tried booting it with two different DTS (compiled separately) and a slightly customized defconfig based on your defconfig and I'm getting the following error in early boot (output captured with a USB serial debug cable).

Kinda looks like you forgot to append the DTB to the boot image.

DTS option 2 kernel fork actually boots further, but is broken in some way which is described in here: https://gitlab.com/deata/kylepro-mainlining/-/issues/1
I'm getting the exact same results with my "cs02" since it's almost identical to "kylepro".

This is because SMP is currently broken (I suspect this might be a regression somewhere down the build chain as it worked with Deata's kernel, according to build logs they sent once...) and it just hangs when bringing up the extra cores. Adding nosmp to the CMDLINE won't help, and will only cause the device to freeze up later in the boot process - you'll have to disable CONFIG_SMP entirely.

btw, I've had some people test on the kylepro and cs02 as well (using the kylepro dts which is in this repo - these two devices are basically identical except for a few peripherals which we don't enable yet anyways), and it booted for them.

Original downstream DTS (didn't try it): https://github.com/santeri3700/android_kernel_samsung_cs02/blob/stock/arch/arm/boot/dts/hawaii_ss_cs02_rev02.dts

The downstream DTS won't really work because Broadcom packed it full of their own bindings.

@santeri3700
Copy link

@knuxify thanks for the tips! I found my mistake in the DTS Makefile (.dts -> .dtb) and now I'm able to get further with the kylepro based DTS file, but now I get stuck here.. I'll probably continue my experiments tomorrow with new eyes.
I'll try cleaning up my pmOS packages and I'll push them to my repository probably tomorrow.

...
ATAG_CORE: 5 54410001 0 0 0
ATAG_MEM: 4 54410002 1e00000 80000000
ATAG_MEM: 4 54410002 2e200000 81e00000
ATAG_SERIAL: 4 54410006 4d0a4a24 c40bc000
ATAG_INITRD2: 4 54420005 83000000 11128f
ATAG_REVISION: 3 54410007 2
ATAG_CMDLINE: 64 54410009 'console=ttyS2,115200n8 mem=738M cma0=0M carveout0=0M vmalloc=136M androidboot.console=ttyS2 logbuf_nocache=1 sec_debug.reset_reason=0x1A2B3C00 sec_debug.level=0 androidboot.debug_level=0x4f4c loglevel=7 sec_log=0x70000@0xae900000 bootloaderfb=0xae980000,0x180000 lpcharge=0 cordon=xxxxxxx androidboot.emmc_checksum=3 brd_ver=2 androidboot.serialno=xxxxxxx'
ATAG_NONE: 0 0

Starting kernel at 0x81e08000...

DTB:0x823DCF40 (0x000016D9)
Uncompressing Linux... done, booting the kernel.
# Stuck here indefinitely

@knuxify
Copy link
Author

knuxify commented Jul 31, 2021

@santeri3700 try changing the tty to ttyS1, one of the ttys doesn't get initialized causing the kernel to assign what should be ttyS2 to ttyS1

@santeri3700
Copy link

Thanks for helping me with my silly mistakes. I got it booting now (without SMP, framebuffer and peripherals as expected).
Here's the log until initramfs if this is of any help to you: https://gist.github.com/santeri3700/70fbffcf55ca8b98eaeb20d66ceb7986
If you need a BCM21664(T) tester who is willing to sacrifice their device, throw me a message :)

@knuxify
Copy link
Author

knuxify commented Feb 3, 2022

OK, small update on the power manager and PI manager: tl;dr - I was wrong about... a lot of things.

I've spent the past few days looking into the driver and slowly, function by function, porting it to the mainline kernel. Most importantly, however, I noticed that the actual software ties from the PI mgr to the pwr mgr are pretty minimal (mostly boiling down to the changes of policies). (Whether they're related in hardware - I have no clue. I'd assume so, since the power manager gets initialized before the PI manager, but they could also be completely unrelated. EDIT: The power manager has some functions regarding the PI manager modes (see downstream pwr_mgr_pi_set_wakeup_override) so there might be some kind of correlation - turns out, I wasn't that wrong after all...)

Although the power manager does call some PI managment functions, it does so in functions that aren't directly called during initialization (EDIT: pwr_mgr_pi_set_wakeup_override is a thing). It's fair to say that the two work in a sort-of synergy.

I haven't gotten to the PI mgr driver portion yet (or rather, I'm about to start taking a look at it as of writing), but there's quite a bit I've learnt about the power manager since my previous investigation: mostly about the actual things it manages. There are at least 4 elements that the power manager comprises of:

  • The i2c sequencer, the functions of which are only used in the PMU code; as I understand it, it carries a bunch of commands which it runs... sometimes. I haven't looked into it much, as I didn't get to writing any of the fancier code for the sequencer, but I think the commands are executed based on the accessed event...?
  • Events. Again, didn't quite get to them yet, can't tell what they are.
  • Policies.
  • Some kind of voltage control(?) for all the power domains.

No ETAs on when the driver will be finished, or in an usable state; especially given that I still don't know that much about kernel development. Can't promise I'll get anything that works in any capacity; it's entirely possible I won't even finish it, I tend to jump from project to project - just in case, don't get too excited :p

Just wanted to throw this correction out there - I'll need to get around to writing something about this in the docs, but as mentioned I don't have a good enough understanding of any of this to make any proper statements. I've been rather haphazard with my discoveries last year, and I'd rather avoid jumping to conclusions this time around.

@CheetahPixie
Copy link

Any further updates on this on deck?

@knuxify
Copy link
Author

knuxify commented Sep 24, 2022

Not really, haven't had the time to properly look into this. This turned out to be a lot more work than I was expecting even for a basic bringup, so I'm planning to first polish my Linux/C knowledge somewhere else, then maybe come back to this eventually. It could take months or even years though :/

@CheetahPixie
Copy link

Just a question.
Did you ever find the uboot sources for this? If you haven't, I know Samsung doesn't have that in their own code archives. We might have to seek out Broadcom themselves for that code.
Because with that, we might be able to get tow-boot on this device.

@knuxify
Copy link
Author

knuxify commented Sep 30, 2022

We might be able to avoid doing all of that because the bcm23550 is actually supported in mainline uboot, but uses some old driver model from what I've seen. The bcm21664 is pretty similar so it likely wouldn't take that long to adapt it to run on both chips.

I've been planning to run it as a secondary bootloader (kinda like lk2nd on qcom devices, or the sterricson-mainline uboot fork), since it's less destructive than replacing the entire bootloader, but it's certainly something to consider.

@CheetahPixie
Copy link

My idea was to throw the bootloader to mmcblk0boot0 and just not need the primary mmc bootloader at all.
Either way, it's probably less effort to see what Broadcom will give us.

@knuxify
Copy link
Author

knuxify commented Jan 5, 2023

New year, new rebase, and new drivers! I've rebased the kernel on 6.1, and I can confirm that it still works... and is still equally as bare bones as before.

There's a new power manager driver now, but it doesn't solve the clock issues (and also intializes only after the main ccu init part is done... moving the driver to the arch folder would probably fix this, I might try to do it later, but I am unconvinced that it will change anything.) The entire early init sequence is implemented, as for actual power island enabling/disabling... who knows. Downstream pi_mgr driver is largely just the APIs to make it available for clients, which we don't need to reimplement because genpd does pretty much the same thing. The tough part is figuring out how it actually interacts with the hardware...

My power manager research is now contained in https://github.com/bcm-kona-mainline/docs/blob/main/platform/power-manager.md (sorry for the weird formatting in places, I wrote this entirely in Obsidian with the intention to use it for my own reference while writing the driver). It's still fairly barebones, but attempts to explain most of the concepts in the driver at least at a surface level. There's still a lot of unknowns. (Maybe we should ask someone from Broadcom about this, maybe they wouldn't mind revealing a bit of info for an SoC that has been EoL for nearly 9 years...)

@knuxify
Copy link
Author

knuxify commented Jan 7, 2023

Update: found that downstream does some more stuff when initializing CCUs, implemented it in bf88ab3, clocks are still broken. Meh.

@knuxify
Copy link
Author

knuxify commented Jan 8, 2023

update: IT WORKS (well, sort of)

I forced the power manager initialization function to run before the clocks (in a very ugly hack - see 05a0ff9), and now they all initialize without complaining \o/

...sadly it doesn't fix the remaining issues like USB not working or one of the uart lanes missing, and SMP is still broken. Also I should probably do this correctly since right now it complains about "EXPORT_SYMBOL used for init/exit symbol".

(note to self: check if this hack doesn't break anything. seems like init_irq is kinda fragile (I already had to add the irqchip_init or it would hang))

@CheetahPixie
Copy link

holy shit/10

@knuxify
Copy link
Author

knuxify commented Jan 13, 2023

update: I re-added support for bus clocks (had it working on older kernels, but I figured it wasn't useful since they didn't initialize anyways). Turns out, with the power manager enabled, they do initialize, and now ttyS2 gets initialized properly!

We also got some progress with USB, in that the error is now different. Same story with the sdcard controller. Buuuut, we're getting to a point where we could actually slowly start debugging things!

@knuxify
Copy link
Author

knuxify commented Jan 14, 2023

Here's an example boot log, for future reference (note that mmc0/sd card is disabled, so mmc1/internal storage takes its place):

Boot logs
[    0.000000][    T0] Booting Linux on physical CPU 0x0
[    0.000000][    T0] Linux version 6.1.0-NG (pmos@aubrey) (armv7-alpine-linux-musleabihf-gcc (Alpine 12.2.1_git20220924-r6) 12.2.1 20220924, GNU ld (GNU Binutils) 2.39) #89 PREEMPT Sat Jan 14 21:46:36 UTC 2023
[    0.000000][    T0] CPU: ARMv7 Processor [410fc074] revision 4 (ARMv7), cr=10c53c7d
[    0.000000][    T0] CPU: div instructions available: patching division code
[    0.000000][    T0] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000][    T0] OF: fdt: Machine model: Samsung Galaxy Grand Neo
[    0.000000][    T0] printk: debug: ignoring loglevel setting.
[    0.000000][    T0] printk: bootconsole [earlycon0] enabled
[    0.000000][    T0] Memory policy: Data cache writeback
[    0.000000][    T0] Zone ranges:
[    0.000000][    T0]   Normal   [mem 0x0000000080000000-0x00000000afffffff]
[    0.000000][    T0]   HighMem  [mem 0x00000000b0000000-0x00000000be1fffff]
[    0.000000][    T0] Movable zone start for each node
[    0.000000][    T0] Early memory node ranges
[    0.000000][    T0]   node   0: [mem 0x0000000080000000-0x00000000be1fffff]
[    0.000000][    T0] Initmem setup node 0 [mem 0x0000000080000000-0x00000000be1fffff]
[    0.000000][    T0] ------------[ cut here ]------------
[    0.000000][    T0] WARNING: CPU: 0 PID: 0 at arch/arm/kernel/devtree.c:130 arm_dt_init_cpu_maps+0xc0/0x154
[    0.000000][    T0] DT /cpu 2 nodes greater than max cores 1, capping them
[    0.000000][    T0] Modules linked in:
[    0.000000][    T0] CPU: 0 PID: 0 Comm: swapper Not tainted 6.1.0-NG #89
[    0.000000][    T0] Hardware name: BCM23550 Broadcom Application Processor
[    0.000000][    T0]  unwind_backtrace from show_stack+0x10/0x14
[    0.000000][    T0]  show_stack from dump_stack_lvl+0x24/0x2c
[    0.000000][    T0]  dump_stack_lvl from __warn+0xc0/0xd8
[    0.000000][    T0]  __warn from warn_slowpath_fmt+0x78/0xac
[    0.000000][    T0]  warn_slowpath_fmt from arm_dt_init_cpu_maps+0xc0/0x154
[    0.000000][    T0]  arm_dt_init_cpu_maps from setup_arch+0x248/0x494
[    0.000000][    T0]  setup_arch from start_kernel+0x60/0x864
[    0.000000][    T0]  start_kernel from 0x0
[    0.000000][    T0] ---[ end trace 0000000000000000 ]---
[    0.000000][    T0] CPU: All CPU(s) started in SVC mode.
[    0.000000][    T0] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000][    T0] pcpu-alloc: [0] 0 
[    0.000000][    T0] Built 1 zonelists, mobility grouping on.  Total pages: 252928
[    0.000000][    T0] Kernel command line: console=ttyS2,115200n8 mem=994M ignore_loglevel PMOS_NO_OUTPUT_REDIRECT root=/dev/ram0 clk_ignore_unused pd_ignore_unused earlyprintk
[    0.000000][    T0] Unknown kernel command line parameters "PMOS_NO_OUTPUT_REDIRECT pd_ignore_unused", will be passed to user space.
[    0.000000][    T0] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes, linear)
[    0.000000][    T0] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.000000][    T0] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000][    T0] Memory: 990740K/1017856K available (8192K kernel code, 3543K rwdata, 2636K rodata, 1024K init, 1171K bss, 27116K reserved, 0K cma-reserved, 231424K highmem)
[    0.000000][    T0] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000][    T0] rcu: Preemptible hierarchical RCU implementation.
[    0.000000][    T0] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000][    T0] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000][    T0] in bcm23550_init
[    0.000000][    T0] kona-pwrmgr: initialized
[    0.000000][    T0] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000][    T0] Need to initialize 8ph pll1
[    0.000000][    T0] Console: colour dummy device 80x30
[    0.000000][    T0] sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 21474836475000000ns
[    0.010000][    T0] Calibrating delay loop... 2393.70 BogoMIPS (lpj=11968512)
[    0.070000][    T0] pid_max: default: 32768 minimum: 301
[    0.080000][    T0] LSM: Security Framework initializing
[    0.080000][    T0] SELinux:  Initializing.
[    0.090000][    T0] SELinux: CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE is non-zero.  This is deprecated and will be rejected in a future kernel release.
[    0.100000][    T0] SELinux: https://github.com/SELinuxProject/selinux-kernel/wiki/DEPRECATE-checkreqprot
[    0.110000][    T0] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
[    0.110000][    T0] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
[    0.120000][    T0] CPU: Testing write buffer coherency: ok
[    0.120000][    T1] Setting up static identity map for 0x80100000 - 0x80100060
[    0.130000][    T1] rcu: Hierarchical SRCU implementation.
[    0.130000][    T1] rcu: 	Max phase no-delay instances is 1000.
[    0.140000][    T1] devtmpfs: initialized
[    0.140000][    T1] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 4
[    0.150000][    T1] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.160000][    T1] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[    0.160000][    T1] pinctrl core: initialized pinctrl subsystem
[    0.170000][    T1] reg-dummy reg-dummy: no of_node; not parsing pinctrl DT
[    0.170000][    T1] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.180000][    T1] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.180000][    T1] audit: initializing netlink subsys (disabled)
[    0.190000][   T15] audit: type=2000 audit(0.200:1): state=initialized audit_enabled=0 res=1
[    0.190000][    T1] cpuidle: using governor ladder
[    0.200000][    T1] cpuidle: using governor menu
[    0.200000][    T1] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[    0.210000][    T1] hw-breakpoint: maximum watchpoint size is 8 bytes.
[    0.230000][    T1] cryptd: max_cpu_qlen set to 1000
[    0.230000][    T1] usbcore: registered new interface driver usbfs
[    0.240000][    T1] usbcore: registered new interface driver hub
[    0.240000][    T1] usbcore: registered new device driver usb
[    0.250000][    T1] mc: Linux media interface: v0.10
[    0.250000][    T1] videodev: Linux video capture interface: v2.00
[    0.260000][    T1] Advanced Linux Sound Architecture Driver Initialized.
[    0.260000][    T1] Bluetooth: Core ver 2.22
[    0.270000][    T1] NET: Registered PF_BLUETOOTH protocol family
[    0.270000][    T1] Bluetooth: HCI device and connection manager initialized
[    0.280000][    T1] Bluetooth: HCI socket layer initialized
[    0.280000][    T1] Bluetooth: L2CAP socket layer initialized
[    0.290000][    T1] Bluetooth: SCO socket layer initialized
[    0.300000][    T1] NET: Registered PF_INET protocol family
[    0.310000][    T1] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.320000][    T1] tcp_listen_portaddr_hash hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.330000][    T1] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.330000][    T1] TCP established hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    0.340000][    T1] TCP bind hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.340000][    T1] TCP: Hash tables configured (established 8192 bind 8192)
[    0.350000][    T1] UDP hash table entries: 512 (order: 1, 8192 bytes, linear)
[    0.350000][    T1] UDP-Lite hash table entries: 512 (order: 1, 8192 bytes, linear)
[    0.360000][    T1] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.360000][    T1] Initialise system trusted keyrings
[    0.370000][    T9] Unpacking initramfs...
[    0.390000][    T1] workingset: timestamp_bits=30 max_order=18 bucket_order=0
[    0.420000][    T1] ntfs: driver 2.1.32 [Flags: R/W].
[    0.420000][    T1] fuse: init (API version 7.37)
[    0.440000][    T1] jitterentropy: Initialization failed with host not compliant with requirements: 2
[    0.460000][    T1] Key type asymmetric registered
[    0.460000][    T1] Asymmetric key parser 'x509' registered
[    0.470000][    T9] Freeing initrd memory: 1244K
[    0.470000][    T1] bounce: pool size: 64 pages
[    0.480000][    T1] io scheduler mq-deadline registered
[    0.480000][    T1] io scheduler kyber registered
[    0.490000][    T1] io scheduler bfq registered
[    0.490000][    T1] bcm-kona-gpio 35003000.gpio: Setting up Kona GPIO
[    0.500000][    T1] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.500000][    T1] serial8250 serial8250: no of_node; not parsing pinctrl DT
[    0.510000][    T1] 3e000000.serial: ttyS0 at MMIO 0x3e000000 (irq = 21, base_baud = 808290) is a 16550A
[    0.520000][    T1] 3e001000.serial: ttyS1 at MMIO 0x3e001000 (irq = 22, base_baud = 812500) is a 16550A
[    0.530000][    T1] 3e002000.serial: ttyS2 at MMIO 0x3e002000 (irq = 23, base_baud = 808290) is a 16550A
[    0.540000][    T1] printk: console [ttyS2] enabled
[    0.540000][    T1] printk: console [ttyS2] enabled
[    0.550000][    T1] printk: bootconsole [earlycon0] disabled
[    0.550000][    T1] printk: bootconsole [earlycon0] disabled
[    0.560000][    T1] loop: module loaded
[    0.570000][    T1] zram: Added device: zram0
[    0.570000][    T1] tun: Universal TUN/TAP device driver, 1.6
[    0.580000][    T1] PPP generic driver version 2.4.2
[    0.580000][    T1] PPP BSD Compression module registered
[    0.590000][    T1] PPP Deflate Compression module registered
[    0.590000][    T1] PPP MPPE Compression module registered
[    0.600000][    T1] NET: Registered PF_PPPOX protocol family
[    0.600000][    T1] mousedev: PS/2 mouse device common for all mice
[    0.610000][    T1] i2c_dev: i2c /dev entries driver
[    0.610000][    T1] dummy 0-000c: no of_node; not parsing pinctrl DT
[    0.620000][    T1] bcm590xx-vregs bcm590xx-vregs: no of_node; not parsing pinctrl DT
[    0.630000][    T1] micldo: Bringing 1200000uV into 1800000-1800000uV
[    0.650000][    T1] bcm-kona-i2c 3500d000.i2c: device registered successfully
[    0.660000][    T1] bcm-kona-i2c 3e016000.i2c: device registered successfully
[    0.660000][    T1] bcm-kona-i2c 3e017000.i2c: device registered successfully
[    0.670000][    T1] bcm-kona-i2c 3e018000.i2c: device registered successfully
[    0.670000][    T1] bcm-kona-i2c 3e01c000.i2c: device registered successfully
[    0.680000][    T1] device-mapper: uevent: version 1.0.3
[    0.680000][    T1] device-mapper: ioctl: 4.47.0-ioctl (2022-07-28) initialised: dm-devel@redhat.com
[    0.690000][    T1] sdhci: Secure Digital Host Controller Interface driver
[    0.690000][    T1] sdhci: Copyright(c) Pierre Ossman
[    0.700000][    T1] Synopsys Designware Multimedia Card Interface Driver
[    0.700000][    T1] sdhci-pltfm: SDHCI platform and OF driver helper
[    0.710000][    T1] hid: raw HID events driver (C) Jiri Kosina
[    0.710000][    T1] usbcore: registered new interface driver usbhid
[    0.720000][    T1] usbhid: USB HID core driver
[    0.720000][    T1] usbcore: registered new interface driver snd-usb-audio
[    0.730000][    T1] snd-soc-dummy snd-soc-dummy: no of_node; not parsing pinctrl DT
[    0.730000][    T1] GACT probability NOT on
[    0.740000][    T1] Mirror/redirect action on
[    0.740000][    T1] u32 classifier
[    0.740000][    T1]     input device check on
[    0.750000][    T1]     Actions configured
[    0.750000][    T1] xt_time: kernel timezone is -0000
[    0.760000][    T1] IPVS: Registered protocols ()
[    0.760000][    T1] IPVS: Connection hash table configured (size=4096, memory=16Kbytes)
[    0.770000][    T9] mmc0: SDHCI controller on 3f190000.sdio [3f190000.sdio] using ADMA
[    0.770000][    T1] IPVS: ipvs loaded.
[    0.780000][    T1] ipip: IPv4 and MPLS over IPv4 tunneling driver
[    0.780000][    T1] Initializing XFRM netlink socket
[    0.790000][    T1] NET: Registered PF_INET6 protocol family
[    0.790000][    T1] Segment Routing with IPv6
[    0.800000][    T1] In-situ OAM (IOAM) with IPv6
[    0.800000][    T1] mip6: Mobile IPv6
[    0.810000][    T1] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    0.810000][    T1] NET: Registered PF_PACKET protocol family
[    0.820000][    T1] NET: Registered PF_KEY protocol family
[    0.820000][    T1] Bridge firewalling registered
[    0.830000][    T1] Bluetooth: RFCOMM TTY layer initialized
[    0.830000][    T1] Bluetooth: RFCOMM socket layer initialized
[    0.840000][    T1] Bluetooth: RFCOMM ver 1.11
[    0.840000][    T1] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    0.850000][    T1] Bluetooth: BNEP socket layer initialized
[    0.850000][    T1] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[    0.860000][    T1] Bluetooth: HIDP socket layer initialized
[    0.860000][    T1] l2tp_core: L2TP core driver, V2.0
[    0.870000][    T1] l2tp_ppp: PPPoL2TP kernel driver, V2.0
[    0.870000][    T1] NET: Registered PF_PHONET protocol family
[    0.880000][    T1] Key type dns_resolver registered
[    0.880000][    T1] Loading compiled-in X.509 certificates
[    0.890000][    T9] i2c-gpio i2c-gpio: using lines 113 (SDA) and 114 (SCL)
[    0.910000][   T16] mmc0: new high speed MMC card at address 0001
[    0.920000][   T16] mmcblk mmc0:0001: no of_node; not parsing pinctrl DT
[    0.920000][   T16] mmcblk0: mmc0:0001 K7XVMB 7.28 GiB 
[    0.930000][   T16]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19
[    0.940000][   T16] mmcblk0boot0: mmc0:0001 K7XVMB 4.00 MiB 
[    0.950000][    T9] dwc2 3f120000.usb: dwc2_check_params: Invalid parameter besl=1
[    0.950000][    T9] dwc2 3f120000.usb: DWC OTG Controller
[    0.960000][   T16] mmcblk0boot1: mmc0:0001 K7XVMB 4.00 MiB 
[    0.960000][   T16] mmcblk0rpmb: mmc0:0001 K7XVMB 512 KiB, chardev (249:0)
[    0.970000][    T9] dwc2 3f120000.usb: new USB bus registered, assigned bus number 1
[    0.970000][    T9] dwc2 3f120000.usb: irq 31, io mem 0x3f120000
[    0.980000][    T9] dwc2 3f120000.usb: startup error -1
[    0.980000][    T9] dwc2 3f120000.usb: USB bus 1 deregistered
[    0.990000][    T9] dwc2 3f120000.usb: dwc2_hcd_init() FAILED, returning -1
[    0.990000][    T9] dwc2: probe of 3f120000.usb failed with error -1
[    1.000000][    T1] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[    1.010000][    T1] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    1.020000][    T1] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    1.030000][   T16] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[    1.040000][    T1] clk: Not disabling unused clocks
[    1.040000][    T1] ALSA device list:
[    1.040000][    T1]   No soundcards found.
[    1.050000][   T16] cfg80211: failed to load regulatory.db
[    1.050000][    T1] dw-apb-uart 3e002000.serial: forbid DMA for kernel console
[    1.060000][    T1] Freeing unused kernel image (initmem) memory: 1024K
[    1.080000][    T1] Run /init as init process
[    1.080000][    T1]   with arguments:
[    1.080000][    T1]     /init
[    1.090000][    T1]     PMOS_NO_OUTPUT_REDIRECT
[    1.090000][    T1]     pd_ignore_unused
[    1.090000][    T1]   with environment:
[    1.100000][    T1]     HOME=/
[    1.100000][    T1]     TERM=linux

@knuxify
Copy link
Author

knuxify commented Jan 15, 2023

Update: the USB error seems to have been caused by me using the wrong settings in the baffinlite dts, now it initializes fine (although I don't know if it actually works). SD card/mmc0 errors aren't fixed, but I did find that I messed up the card detect GPIO, so now it doesn't spam the kernel logs when an SD card is not inserted.

Next up: fully implementing the timer and pinmux drivers. The former might help with the SMP initialization issues, and the latter might help with miscellaneous other issues.

@onny
Copy link

onny commented Jan 15, 2023

Impressive work! Are there some fixes or drivers of your work which might can get upstreamed?

@knuxify
Copy link
Author

knuxify commented Jan 15, 2023

Yup, I'm planning to get it all cleaned up and upstreamed once I can get at least the most important peripherals (those being SD card support, USB, and maybe framebuffer if I can do it with simple-framebuffer) and SMP working. The power manager driver still needs more work (the init does happen but I'm not convinced it's all set up properly to act as a power domain controller, plus it needs to be moved to the arch folder to get rid of the hacky "exporting init function" thing).

@CheetahPixie
Copy link

and I've got a thermal camera in the mail just in time to figure out wtf is wrong with my own kylepro. Can't wait to run this and have plasma.

@knuxify
Copy link
Author

knuxify commented Jan 18, 2023

Update: SMP is... weird. Seems like enabling CONFIG_SMP causes the kernel to completely hang early in the initialization process, even if nosmp is passed to the command line. Adding prints leads to somewhere around timer init, but the exact halt point changes depening on how many statements are added. Sometimes it manages to get a bit further, but hangs nonetheless.

Printk debugging is completely useless because the hang seems unpredictable. Adding panic=5 does not actually cause a panic. ftrace won't help because I can't get into userspace because it doesn't boot. I tried a few "hang detection" options I found in the menuconfig, but to no avail.

I'm honestly at a loss as to how to debug this. My only pointer is that it at least got a bit further on the older kernel (5.12) but with nosmp it still hanged without explaination before initramfs (but that was at least a bit later, which I think would be easier to debug). At least then the other CPU cores would at least attempt to start up...

@knuxify
Copy link
Author

knuxify commented Jan 30, 2023

Update time: it's been a while since I updated this issue, but there's been quite a bit of progress on the driver front.

  • The timer driver has been adapted to support multiple timers (and selecting a custom system timer - no clue how it works though).
  • The pincontrol driver was modified to add support for the BCM21664/BCM23550 pincontrol.
  • I re-did the commit adding support for the BCM59054, and added the correct voltage tables (turns out, in some they weren't exactly the same as BCM59056...).
  • I also got the framebuffer working on the Grand Neo, using simple-framebuffer for now. Was hoping to get the touchscreen working too, but sadly all i2c requests seem to get NAK'd. I'm currently investigating this.

Out of curiosity, I also made some test builds for the Galaxy Trend Plus (kylepro) (should hopefully work with kyleprods and cs02 as well). These are very barebones (no framebuffer or anything), but should be enough to see if SMP/clocks work on the BCM21664, or if my experimentation broke something (the Grand Neo I use for development is a BCM23550 device, and I don't own any BCM21664-based ones...) @santeri3700, do you still have your kylepro? @CheetahPixie, any updates on the state of yours?

INSTRUCTIONS: Flash these with heimdall flash --KERNEL boot-kylepro-{variant}.img. Serial cable is required to get any output because USB/framebuffer aren't working yet. Send the serial output from the two builds.

https://cloud.dithernet.org/s/ogLBpnxZDkkrdji

https://cloud.dithernet.org/s/aDAA3jnjQMFreyc

This applies to any BCM21664 devices: I'd appreciate downstream kernel dmesg logs (preferably from Android or recovery), since they have various useful bits of information which might prove useful while mainlining.

@CheetahPixie
Copy link

No updates yet, but I have my thermal camera now. I did order some TMS diodes for a hard drive to fix that, but hadn't gotten around to looking at the kylepro. Guess I'll do that now real quick.

@CheetahPixie
Copy link

CheetahPixie commented Jan 30, 2023

Update: Blown ceramic capacitor. Short found.

Near the CPU, no less.

@CheetahPixie
Copy link

CheetahPixie commented Jan 30, 2023

I've got news, and it ain't looking good.

If I'm not wrong, the EMMC in the EMCP is shorted. It might be dead.

If I could at all figure out how to boot other media, I probably could actually; It doesn't look like the RAM portion is dead, only the EMMC.

Then again it might also be cracked solder joints...

@knuxify
Copy link
Author

knuxify commented Jan 31, 2023

Minor update: the hang when CONFIG_SMP is enabled seems to have started happening after the CCU initialization was added. Disabling the entire sequence fixes the hang (then it hangs at a later point, just like in the 5.12 kernel). Enabling any part of the sequence, for any CCU, makes the freeze re-appear. I'll keep looking into this.

@santeri3700
Copy link

@knuxify great work! I tested both of the kernels on my kylepro and I've attached full debug logs starting from S-boot all the way to TWRP recovery or kernel panics depending on which kernel was used.

I see that the kernel CMDLINE has mem=994M instead of the original mem=738M. The kylepro only has about 768MB of RAM.
Have you accidentally forgotten to change the RAM amount to match kylepro instead? I think I'm unable to override that.

I'm more than happy to do more testing. I still have my kylepro and two cs02's that I'm willing to sacrifice.

@CheetahPixie
Copy link

You can probably drop into a twrp shell and change the requisite values with a bit of mount and loop device magic. I have static binaries on hand for precisely this purpose.

@knuxify
Copy link
Author

knuxify commented Feb 5, 2023

...yup, I forgot to change the cmdline. These are just quickly rebuilt on top of my usual development setup (which is configured for my Samsung Galaxy Grand Neo), and I forgot to change the setting... should be fixed now.

https://cloud.dithernet.org/s/mYpJN6bTSseNkz9

@santeri3700
Copy link

Thanks, I've gathered new logs. I hope these logs and the previous TWRP boot log can be of use.
SMP seems to get stuck indefinitely without panicking and NOSMP goes further, but panics.

@knuxify
Copy link
Author

knuxify commented Feb 9, 2023

Sorry for the lack of updates, my working schedule has been all over the place. Currently working on getting PLL clocks working, since they're responsible for the CPU frequency, and will likely help us get the other cores working. If not, at least we'll have a starting point for a cpufreq driver. (The SMP hang I mentioned a few comments ago was fixed btw, see e8ef552.)

@k8ieone
Copy link

k8ieone commented Mar 29, 2023

Hi, I'm just leaving a comment here because I have a Galaxy S2+ with a BCM28155. If you need any testing on that, let me know.

I don't have access to the debug interface tho, so I guess my time will come much later.

@knuxify
Copy link
Author

knuxify commented Jul 28, 2023

Been a while since I updated this, so here's an update:

Since the last message, I added the PLL clocks - unfortunately, SMP was still broken. I suppose I'll just leave it be for the time being, and focus on getting basic peripherals running so that we can have at least a comparable experience to downstream (simple-framebuffer works for the display, but the touchscreen is broken due to i2c issues - look-but-don't-touch is no fun on a smartphone :p).

Then I went on a multiple-month break while I did all sorts of other things, including mainlining the Samsung Galaxy Tab 3 8.0 - which is an Exynos 4212 device, so in no way related to the Broadcom Kona SoCs, but the whole process meant that I became more familiar with kernel internals and, perhaps most crucially, the process of submitting patches to upstream. I'm certainly not an expert yet, but it means that I have more knowledge that can help me get these patches upstreamed and conformant with upstream quality.

With that being said, I've been working for the past 2 weeks or so on getting all the patches rebased on Linux 6.5-rc1, preparing them for upstream submission, writing all the DT bindings I didn't write before (and fixing the ones I did - clearly I hadn't heard of make dt-binding-check :p) and generally reordering some things. I've got a few commits still ahead of me - my plan is to get far enough to run the rebased kernel on my device, and make sure all of my patches work before sending them off.

Here's a checklist:

  • Split BCM21664 and BCM23550 into separate common DTSI (38f6ea5) - renamed again, see 0378883
  • Add support for BCM59054 to bcm590xx driver (56320ad, b0b4e1c, 509c4b1, 94c7fce, 9983307)
  • Add bus clocks (e20dd3b, bbe4fbe, d11f938)
  • Add PMU node to BCM21664 common DTSI, PMU clocks (9742e21, 238435e)
  • Add Galaxy Grand Neo DTS (8177d77)
  • If we get the time - convert the remaining TXT bindings in the DTSI to YAML (upstream isn't really keen on accepting new boards with missing bindings) - someone seems to have been doing some progress towards this (see e.g. c500ebe which I cherry-picked from the mailing list into this tree), we could probably speed up the process ;)

You can see the current progress in the kona-pre6.5 branch.

@StandaSK
Copy link

StandaSK commented Aug 4, 2023

Hello, @knuxify I seem to be that someone converting those pesky old TXT bindings to YAML :)

I've been working on those during the last ~3 months in my free time, along with some minor cleanups for the kona mainline device trees.

I believe most of the existing bindings should be already converted in linux-next:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/log/?qt=author&q=Stanislav+Jakubek

Unless I missed something, the only one that's currently not merged into linux-next and still on the mailing list is the bcm11351-pinctrl (with no feedback yet):
http://patchwork.ozlabs.org/project/linux-gpio/patch/ZMZ3aEnrrZRDNdO+@standask-GA-A55M-S2HP/

Also, a good place to check Broadcom-related future patches is Broadcom's GitHub repo, the devicetree/next branch also having one of my patches not yet in linux-next :P
https://github.com/broadcom/stblinux

I'm willing to help in my free time, let me know if you need help (with dt-bindings or otherwise) :)

@knuxify
Copy link
Author

knuxify commented Aug 4, 2023

@StandaSK Ah, I was curious why someone would pick the Broadcom Kona bindings in particular - now I know ;) This has been immensely useful - thank you so much!

As for the pinctrl bindings - I was planning to convert these as part of preparing the BCM21664 patch for the BCM28155 pin controller, though ultimately ended up postponing it since I already had a hard time forcing myself to go through all the other patches I had to remake 🙃

Fortunately, the most important prerequisites are out of the way now (literally just finished them just as you sent this comment), so this is on my priority list. I'll check the patch out in more depth when I get around to working on that. Thanks again!

@ijiki16
Copy link

ijiki16 commented Aug 7, 2023

Hi, I have Samsung Galaxy Ace 3 Duos ( samsung-logands ) with BCM21664 SOC. I ported it to PostmarketOS with downstream kernel and want to help with some mainline work/testing. At the moment I don't have UART cable to connect to PCB, but I found JTAG 300 pads on board.

@knuxify
Copy link
Author

knuxify commented Aug 13, 2023

Preparing-for-upstreaming update: while going through the CCU initialization sequence, I realized that the only two things actually needed to get all the clocks initializing are:

  • adding the .policy member to all the clocks - this sets up the "policy mask" which dictates which clocks are enabled for a specific CCU policy. Our hacky initialization code on the 6.1 branch copied a downstream hack that enabled all of these masks by default. Here, I'm just enabling what's necessary.
  • adding bus clocks, and making sure they initialize before everything else.

Notably, no power manager init here! That's good, since it means we can delay writing a proper power manager driver and still get somewhat functional hardware into the kernel.

Well, somewhat. All of my I2C peripherals are still not working, but I suspect the issue may not be related to clocks anymore - rather, I think something's wrong with the regulators... I tried manually forcing the regulator responsible for the touchkey LEDs (gpldo3) on, but no matter what I do, it does not seem to turn the LEDs on, which would suggest that I messed something up. This is next on my list of things to investigate.

@knuxify
Copy link
Author

knuxify commented Aug 20, 2023

Yup, my suspicion was right - I found a bug in the regulator driver that caused it to write the enable value to the wrong register. That's fixed now, and my LEDs work, and the errors for initializing the i2c peripherals are gone!

...but the touch screen still doesn't work. It seems to start up, though for some reason it starts and stops multiple times before eventually staying started-up after the UI boots. It seems that it's not actually getting any of the interrupts (which is how the touch screen knows that it's been pressed, etc.). So... I guess that's the next thing to debug?

@sostk
Copy link

sostk commented Mar 9, 2024

Hi everyone I was wondering if there is any new updates on this project? Thank you.

@knuxify
Copy link
Author

knuxify commented Mar 9, 2024

@sostk Since the last post, not really... I've been working on upstreaming some of the changes I made to the kernel, but that got stuck as I have various other things that take up my time (school, other projects...). It is very much on my todo list, but I can't give an ETA as to when I'll have the time and energy to get back to working on it...

I see you have a few Android-related repos on your profile. FYI, there's a lot of work still left to be done to make the mainline kernel anywhere close to usable: once we get the basics down, we still need to write drivers for the display, audio, modem (which is rather limited by the fact that 3G has been shut down in many networks (including in the country I live in) so I can test 2G at best), cameras (this one is especially tough on mainline, many other devices struggle with it) and everything else you might expect from a working smartphone. This is mostly a hobby project with the primary goal being running postmarketOS on these devices, though it could certainly be expanded to Android (see e.g. the Replicant project which tried to do this with Exynos 4 devices) once it matures.

@sostk
Copy link

sostk commented Mar 9, 2024

Thank you for your reply @knuxify, you have done an amazing job till now, hope you will be able to continue working on this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants