Skip to content

qspi: phytium: update phytium qspi controller driver support to 6.6.0.4#1721

Open
xiaqian1486 wants to merge 2 commits into
deepin-community:linux-6.6.yfrom
xiaqian1486:qspi-6.6.y
Open

qspi: phytium: update phytium qspi controller driver support to 6.6.0.4#1721
xiaqian1486 wants to merge 2 commits into
deepin-community:linux-6.6.yfrom
xiaqian1486:qspi-6.6.y

Conversation

@xiaqian1486
Copy link
Copy Markdown

@xiaqian1486 xiaqian1486 commented May 15, 2026

This patches updates the support for phytium qspi controller driver.

  1. Use the corresponding configurations for each chip
  2. Strict QSPI compile dependency

Summary by Sourcery

Update the Phytium QSPI controller driver to track per-chip configuration and correctly program controller registers for dirmap transfers.

Bug Fixes:

  • Store read and write configuration registers per chip select instead of globally to avoid conflicts when multiple flashes are attached.
  • Reprogram the read configuration register before each dirmap read to ensure correct controller state after other operations or power transitions.

Enhancements:

  • Simplify resume handling by only restoring the flash capacity register when dirmap is enabled, relying on per-chip configuration to be set during access.

Solve the problem of abnormal reading and writing of data
when simultaneously accessing flash chips of different capacities.

Mainline: Open-Source
Signed-off-by: Peng Min<pengmin1540@phytium.com.cn>
Signed-off-by: Wang Yinfeng <wangyinfeng@phytium.com.cn>
Signed-off-by: Xia Qian <xiaqian1486@phytium.com.cn>
@sourcery-ai
Copy link
Copy Markdown

sourcery-ai Bot commented May 15, 2026

Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Updates the Phytium QSPI controller driver to maintain per-chip read/write configuration registers and ensure the correct configuration is applied per chip-select during dirmap operations, while also tightening Kconfig dependencies for QSPI build integration.

Sequence diagram for per-chip dirmap read/write configuration

sequenceDiagram
    participant Caller
    participant phytium_qspi_dirmap_create
    participant phytium_qspi_dirmap_read
    participant phytium_qspi_dirmap_write
    participant QSPI_HW

    Caller->>phytium_qspi_dirmap_create: phytium_qspi_dirmap_create(desc)
    activate phytium_qspi_dirmap_create
    phytium_qspi_dirmap_create->>QSPI_HW: writel_relaxed(cmd, QSPI_RD_CFG_REG)
    phytium_qspi_dirmap_create-->>Caller: rd_cfg_reg[spi->chip_select] = cmd
    deactivate phytium_qspi_dirmap_create

    Caller->>phytium_qspi_dirmap_read: phytium_qspi_dirmap_read(desc, offs, len, buf)
    activate phytium_qspi_dirmap_read
    phytium_qspi_dirmap_read->>QSPI_HW: writel_relaxed(rd_cfg_reg[spi->chip_select], QSPI_RD_CFG_REG)
    phytium_qspi_dirmap_read->>QSPI_HW: memcpy_fromio(buf_rx, src, len)
    phytium_qspi_dirmap_read-->>Caller: return len
    deactivate phytium_qspi_dirmap_read

    Caller->>phytium_qspi_dirmap_write: phytium_qspi_dirmap_write(desc, offs, len, buf)
    activate phytium_qspi_dirmap_write
    phytium_qspi_dirmap_write->>QSPI_HW: writel_relaxed(wr_cfg_reg[spi->chip_select], QSPI_WR_CFG_REG)
    phytium_qspi_dirmap_write-->>Caller: return len
    deactivate phytium_qspi_dirmap_write
Loading

File-Level Changes

Change Details Files
Track and apply separate read/write configuration registers per NOR flash chip-select in the Phytium QSPI driver.
  • Change single wr_cfg_reg and rd_cfg_reg fields in the driver state to per-chip arrays indexed by PHYTIUM_QSPI_MAX_NORCHIP.
  • On dirmap creation, store the computed RD_CFG and WR_CFG register values into the per-chip arrays using spi->chip_select as the index.
  • Before each dirmap read, reload the RD_CFG hardware register from the stored per-chip configuration for the corresponding chip-select.
  • Before each dirmap write, reload the WR_CFG hardware register from the stored per-chip configuration for the corresponding chip-select.
  • Remove the resume-time restoration of the single RD_CFG register value, relying instead on other mechanisms or per-chip reprogramming.
drivers/spi/spi-phytium-qspi.c
Tighten SPI Phytium QSPI driver Kconfig dependency on QSPI to ensure correct compilation configuration.
  • Adjust the Phytium QSPI driver Kconfig entry to express a strict dependency on QSPI support.
  • Aligns driver build configuration with kernel 6.6.0.4 expectations.
drivers/spi/Kconfig

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@deepin-ci-robot deepin-ci-robot requested review from Wenlp and shy129 May 15, 2026 06:32
@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign avenger-285714 for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@deepin-ci-robot
Copy link
Copy Markdown

Hi @xiaqian1486. Thanks for your PR.

I'm waiting for a deepin-community member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@Avenger-285714
Copy link
Copy Markdown
Member

/ok-to-test

Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've left some high level feedback:

  • When indexing wr_cfg_reg[] and rd_cfg_reg[] by spi->chip_select, consider adding a sanity check or at least a clear comment that chip_select < PHYTIUM_QSPI_MAX_NORCHIP is guaranteed by the core, to make the per-CS storage assumption explicit and guard against future changes.
  • Now that rd_cfg_reg is per-chip and only programmed in phytium_qspi_dirmap_create(), it may be worth clarifying (via a comment near phytium_qspi_dirmap_read()/write()) that these paths are only reachable after a successful dirmap setup, so using the stored per-CS config cannot hit an uninitialized slot.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- When indexing `wr_cfg_reg[]` and `rd_cfg_reg[]` by `spi->chip_select`, consider adding a sanity check or at least a clear comment that `chip_select < PHYTIUM_QSPI_MAX_NORCHIP` is guaranteed by the core, to make the per-CS storage assumption explicit and guard against future changes.
- Now that `rd_cfg_reg` is per-chip and only programmed in `phytium_qspi_dirmap_create()`, it may be worth clarifying (via a comment near `phytium_qspi_dirmap_read()`/`write()`) that these paths are only reachable after a successful dirmap setup, so using the stored per-CS config cannot hit an uninitialized slot.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the Phytium QSPI controller driver to keep per-chip-select read/write configuration and to reprogram the controller’s read configuration before each direct-mapped read, improving correctness when multiple flashes share the controller and across state transitions.

Changes:

  • Store RD_CFG / WR_CFG programming values per chip select instead of globally.
  • Reprogram RD_CFG_REG on each dirmap read and simplify resume handling by no longer restoring RD_CFG_REG there.
  • Tighten Kconfig dependencies for SPI_PHYTIUM_QSPI.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
drivers/spi/spi-phytium-qspi.c Track RD/WR config per chip select and reapply RD config before each dirmap read; adjust resume behavior accordingly.
drivers/spi/Kconfig Update build dependencies for the Phytium QSPI driver.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread drivers/spi/Kconfig
config SPI_PHYTIUM_QSPI
tristate "Phytium Quad SPI controller"
depends on ARCH_PHYTIUM || COMPILE_TEST
depends on ARCH_PHYTIUM && COMPILE_TEST
Require both ARCH_PHYTIUM and COMPILE_TEST for SPI_PHYTIUM_QSPI.
Ensures driver only builds when explicitly tested on Phytium platforms.
Prevents accidental inclusion in production builds, enforcing controlled
testing visibility for experimental hardware support.

Mainline: Open-Source
Signed-off-by: zhuling <zhuling2709@phytium.com.cn>
Signed-off-by: Wang Yinfeng <wangyinfeng@phytium.com.cn>
Signed-off-by: Xia Qian <xiaqian1486@phytium.com.cn>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants