Thread (8 messages) 8 messages, 2 authors, 19d ago

Re: [PATCH v4] driver: fpga: xilinx-selectmap: add csi and rdwr support

From: Xu Yilun <hidden>
Date: 2026-09-08 18:59:49
Also in: linux-arm-kernel, linux-fpga, lkml

I would change v5 commit message to:
"""
    The driver requests the optional CSI_B and RDWR_B GPIOs with
    GPIOD_OUT_HIGH and never touches them again. That flag carries a
    logical value, so both signals end up asserted on every board,
    whatever polarity the device tree states.
Yeah, that's clear now.
    Keeping them asserted works as long as a single FPGA owns the
    SelectMAP port. That FPGA is the only device on the bus, so it may
    stay selected, and the driver never reads from it, so the port may
    stay in write mode.
I think keeping them asserted is a bad idea even for single FPGA, isn't
it?
    It stops working as soon as two FPGAs share one SelectMAP data bus,
    which is the case CSI_B exists for. Both devices are selected all
    the time, so every byte written for one of them is clocked into the
    other as well, and neither can be configured on its own.

    CSI_B (Chip Select) selects the target FPGA. Assert it before the
    configuration data is transferred and deassert it afterwards, so that
    only the intended device sees the bus cycles.
What if we re-program the 2 FPGAs at the same time? Is there still
chance the 2 CS lines are all asserted? Can they be correctly
re-programmed in this case?

I mean I think this patch does fix the problem of "always assertion",
which is good to me. But the changelog seems stop me, it talks all about
2 FPGAs sharing the same bus, which seems more complex than just
manipulating the CS.

Thanks,
Yilun
    RDWR_B (Read/Write) selects the transfer direction on the SelectMAP
    interface. Assert it for the write cycles that carry the bitstream and
    deassert it afterwards. UG570 wants RDWR_B settled before CSI_B is
    asserted, a change while the device is selected aborts the
    configuration on the next CCLK.

    Both are requested with GPIOD_OUT_LOW now, the logical 0 that leaves
    them deasserted, and their descriptors are kept in the driver private
    data.

    A board with one FPGA keeps working. SelectMAP allows the bitstream to
    be loaded non-continuously, with CSI_B deasserted between the data
    transfers, and a deselected device ignores the bus.
"""
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help