mboehmer
Members-
Posts
146 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
Hi there, I have an overlay available for Odroid C4 (Kernel 6.6.51), which needs some testing in the field. It supports 12MHz operation max on the pins 19, 21, 23 and 24 on the GPIO header. In case you have a test case for that, let me know, and I can provide things to you. Michael
-
Thanks to Igor, I have a patch now in the build system (own branch - fix-spi-c4). Would be nice if someone could countercheck if that one also works in other place than mine.
-
Let me revive this thread, finally I found time to get into the issue again. I use the latest C4 server image (Ubuntu 24.04). Changes made so far: I added a line fdtfile=amlogic/meson-sm1-odroid-c4-spidev.dtb into the armbianEnv.txt, which seems at least to load the spidev kernel module. A /dev/spidev0.0 is created, and I can use the standard test program found on https://github.com/KnCMiner/spi-test/blob/master/spi-test.c It seems to work, there are no errors invoking the program, but the I/Os of SPI stay inactive, no matter what I do. gpioinfo shows the lines on PIN_19, PIN_21, PIN_23 and PIN_24 as "unused": Seem that basically the SPI controller is working, but the I/O mux is not setup correctly. Anyone who can contribute here? I can test with logic analyzer, in case some input is given to me
-
Will check after some other issues, thanks for your input! We use an Odroid C2 meanwhile, it is slow, but works.
-
Hi, after a long time I started up my C4 and tried both the standard download kernel as well as a home compiled one. I need SPI on the C4, so I changed the device tree to meson-sm1-odroid-c4-spidev.dtb, and see spidev kernel modul loaded, but no driver, and I don't get any signals on the corresponding pins. Any help is appreciated - would be great to have SPI working again... See you, Michael
-
Have you tried the etcher software? So far I only use eMMC, but this one works really fine.
-
Did you check console output? This would be really helpful.
-
Hi, just returned to start working on a FLIR Lepton camera, with Odroid C4, hooked up to SPI (faster than the C2). WIth the official image from download page (Armbian 22.08 Jammy, kernel 5.10.144) I get the following message on console as soon as I try any access to spidev: [ 77.660325] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 [ 77.666930] Mem abort info: [ 77.670400] ESR = 0x86000004 [ 77.673801] EC = 0x21: IABT (current EL), IL = 32 bits [ 77.677915] SET = 0, FnV = 0 [ 77.681367] EA = 0, S1PTW = 0 [ 77.684796] user pgtable: 4k pages, 48-bit VAs, pgdp=000000000f26b000 [ 77.690454] [0000000000000000] pgd=0000000000000000, p4d=0000000000000000 [ 77.697196] Internal error: Oops: 86000004 [#1] PREEMPT SMP [ 77.702645] Modules linked in: spidev rfkill cpufreq_powersave cpufreq_conservative lz4hc lz4hc_compress lz4 snd_soc_hdmi_codec snd_soc_meson_axg_tdmout snd_soc_meson_axg_sound_card snd_soc_meson_g12a_tohdmitx panfrost snd_soc_meson_card_utils gpu_sched snd_soc_meson_codec_glue snd_soc_meson_axg_frddr snd_soc_meson_axg_fifo meson_gxbb_wdt meson_vdec(C) v4l2_mem2mem ir_nec_decoder videobuf2_dma_contig meson_rng dw_hdmi_i2s_audio videobuf2_memops videobuf2_v4l2 videobuf2_common meson_saradc videodev rc_odroid mc meson_ir rc_core snd_soc_meson_axg_tdm_interface snd_soc_meson_axg_tdm_formatter snd_soc_core ac97_bus snd_pcm_dmaengine snd_pcm snd_timer snd soundcore display_connector zram sch_fq_codel ramoops reed_solomon nfsd efi_pstore auth_rpcgss nfs_acl lockd grace sunrpc ip_tables x_tables autofs4 meson_gxl reset_meson_audio_arb rtc_meson_vrtc axg_audio sclk_div clk_phase dwmac_generic realtek dwmac_meson8b [ 77.810859] CPU: 2 PID: 3156 Comm: spidev_test Tainted: G C 5.10.144-meson64 #22.08.2 [ 77.819904] Hardware name: Hardkernel ODROID-C4 (DT) [ 77.824823] pstate: a0400009 (NzCv daif +PAN -UAO -TCO BTYPE=--) [ 77.830777] pc : 0x0 [ 77.835509] lr : meson_spicc_pow2_determine_rate+0x2c/0x40 [ 77.840340] sp : ffff800012eb3920 [ 77.845116] x29: ffff800012eb3920 x28: 0000000000000000 [ 77.849906] x27: ffff000001170800 x26: 0000000000000000 [ 77.854808] x25: 0000000000000000 x24: ffff80001134cdf8 [ 77.860069] x23: 0000000000000002 x22: 0000000000000000 [ 77.865331] x21: ffff800012eb3a70 x20: ffff000000d75f00 [ 77.870594] x19: 0000000000000000 x18: 0000000000000000 [ 77.875854] x17: 0000000000000000 x16: 0000000000000000 [ 77.881115] x15: 0000aaaaaf3a3018 x14: 0000000000000000 [ 77.886376] x13: 0000000000000000 x12: 0000000000000000 [ 77.891637] x11: 0000000000000000 x10: 0000000000000054 [ 77.896898] x9 : 0000000000000001 x8 : 0000000000000001 [ 77.902159] x7 : 00000000ffffffbf x6 : 0000000000000000 [ 77.907421] x5 : 0000000000000000 x4 : ffff800012eb39c0 [ 77.912682] x3 : ffff800012eb3d30 x2 : 0000000000000000 [ 77.917943] x1 : ffff800012eb39c0 x0 : ffff00003f9c9e28 [ 77.923206] Call trace: [ 77.927258] 0x0 [ 77.931291] clk_core_determine_round_nolock.part.30+0x20/0x88 [ 77.935568] clk_core_round_rate_nolock+0x80/0x90 [ 77.940226] clk_mux_determine_rate_flags+0xdc/0x208 [ 77.945145] clk_mux_determine_rate+0x14/0x20 [ 77.949456] clk_core_determine_round_nolock.part.30+0x20/0x88 [ 77.955234] clk_core_round_rate_nolock+0x80/0x90 [ 77.959889] clk_core_set_rate_nolock+0x5c/0x1f0 [ 77.964460] clk_set_rate+0x38/0xa8 [ 77.968504] meson_spicc_transfer_one+0x88/0x300 [ 77.972483] spi_transfer_one_message+0x258/0x4c0 [ 77.977139] __spi_pump_messages+0x34c/0x570 [ 77.981366] __spi_sync+0x1e8/0x220 [ 77.985297] spi_sync+0x30/0x58 [ 77.989235] spidev_sync+0x48/0x80 [spidev] [ 77.993146] spidev_message+0x2e0/0x400 [spidev] [ 77.997026] spidev_ioctl+0x41c/0x848 [spidev] [ 78.001033] __arm64_sys_ioctl+0xa8/0xe8 [ 78.004914] el0_svc_common.constprop.4+0x8c/0x180 [ 78.009656] do_el0_svc+0x24/0x90 [ 78.013090] el0_svc+0x14/0x20 [ 78.016370] el0_sync_handler+0x90/0xb8 [ 78.019747] el0_sync+0x160/0x180 [ 78.023032] Code: bad PC value [ 78.026046] ---[ end trace b73c9916d0bfd2d6 ]--- This behaviour affects also simple programs like spidev_test from kernel archive. I checked the hardkernel image (kernel 4.9) and there the problem is not existing. Any ideas on that? Thanks in advance, Michael
-
New information: the "last byte read fixed to 0x00" happens only on slow SPI speeds, to my best knowledge it starts with SPI frequencies slower than 300kHz. SPI transmissions always work, correct data is sent out and received (according to logic analyzer). If you want to test it on your own, connect a jumper between pins 19 and 21 on the 40pin expansion header, and use a simple SPI transmission to see if things work. You need to open the SPI device first. SPI transmissions in my code are limited to 20bytes usually (one MachXO2 FlashROM page write/read). uint8_t test_spi( int fd, uint8_t size, uint32_t speed ) { uint8_t tx[size]; uint8_t rx[size]; memset(tx, 0xaa, size); memset(rx, 0x55, size); struct spi_ioc_transfer tr = { .tx_buf = (unsigned long)tx, .rx_buf = (unsigned long)rx, .len = ARRAY_SIZE(tx), .delay_usecs = 0, .speed_hz = speed, .bits_per_word = 8, }; if( ioctl(fd, SPI_IOC_MESSAGE(1), &tr) == -1) { return OP_ERROR; } /* print received data */ for( uint8_t i = 0; i < size; i++ ) { printf("%02x ", rx[i]); } printf("\n"); /* print transmitted data */ for( uint8_t i = 0; i < size; i++ ) { printf("%02x ", tx[i]); } printf("\n"); return OP_OK; }
-
I just came across a bug on C4 SPI - it trashes any transfer with 16++ bytes by overwriting the last received byte in the RX buffer by 0x00. Does it make sense at all to file a bug? Bug can be reproduced by simple means on the board I think (using a MOSI-MISO jumper). I can provide source code of "broken" SPI call, and logic analyzer shots if needed. Greetings, Michael
-
I can confirm now a bug in the SPI kernel driver (AFAIK) for Odroid C4. SPI transfers on Odroid C4 work only reliably with a transfer size of 15 bytes or less. As soon as a transfer on SPI has more than 15 bytes (i.e. 16++), the last byte of the RX field of the transfer is overwritten by 0x00. I can see that correct data is being returned by the connected SPI slave on my logic analyzer. Same user code works without problems on C2 systems. I can file a bug with extended documentation here.
-
Hi all, I have upgraded an Odroid C2 setup to C4, and encountered some strange issues. The SPI interface of C2 is bit banging, while the C4 offers "real" hardware support for SPI. I use a current kernel (5.10.102) with Bullseye. I use two SPI /CS lines, while one SPI controller takes care of "user" interaction with the LatticeSemi MachXO2 FPGA on the addon board. The other SPI controller is used to reflash the MachXO2 by the SPI. On the C2, everything works fine (while slow, due to bitbanging). On the C4, the same code on Odroid and FPGA fails - but only on the reflashing interface, not the user interface. The user interface uses "short" SPI accesses with usually 7 bytes in a command. The programming interface has long accesses with usually 16bytes++ for writing one 128bit FlashROM pages. As first result, the last byte of FlashROM page (16bytes) is usually fixed to zero. It seems to happen on readback. Has anyone encountered similar problems? Thanks in advance, Michael