Skip to content

gpio: phytium: update phytium gpio controller driver support to 6.6.0.4#1750

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

gpio: phytium: update phytium gpio controller driver support to 6.6.0.4#1750
xiaqian1486 wants to merge 4 commits into
deepin-community:linux-6.6.yfrom
xiaqian1486:GPIO-6.6.y

Conversation

@xiaqian1486
Copy link
Copy Markdown

This patches updates the support for phytium gpio controller driver.

  1. Rebind parent chained handler after resuming from S4
  2. Remove redundant enable_irq in chained handler setup
  3. Add PCI and platform dependency

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.

Sorry @xiaqian1486, your pull request is larger than the review limit of 150000 diff characters

@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 opsiff 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.

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

This PR updates and extends Phytium (and related Zhaoxin) platform support against the 6.6.0.4 kernel baseline, spanning GPIO suspend/resume handling as well as several adjacent subsystems (ASoC, PCI endpoint/hotplug, perf PMUs, devfreq, DT bindings, and maintenance metadata).

Changes:

  • GPIO: rebind chained parent IRQ handler after S4 resume and related driver adjustments.
  • Audio: improve ASoC machine/DP link identification and error handling; add new sysfs control; update Phytium codec handling and ES8388 init.
  • PCI/perf/devfreq/platform: add Phytium-specific PCI EPC DMA hooks + DT binding/MAINTAINERS updates; extend HDA handling for Zhaoxin; add/update Phytium perf PMUs and devfreq drivers; various cleanups/guards (e.g., XFS trace compat guard).

Reviewed changes

Copilot reviewed 52 out of 52 changed files in this pull request and generated 21 comments.

Show a summary per file
File Description
sound/soc/phytium/pmdk_dp.c Propagates jack setup return value; assigns DAI link IDs for DP audio links.
sound/soc/phytium/phytium-machine-v2.c Adds DAI link ID for the V2 machine link.
sound/soc/phytium/phytium-i2s-v2.c Updates version; sets component options; adds sysfs control attribute.
sound/soc/phytium/Kconfig Adds ARCH_PHYTIUM dependency and formats help text consistently.
sound/soc/codecs/phytium-codec-v2.h Introduces a codec status enum for clearer error reporting.
sound/soc/codecs/phytium-codec-v2.c Reworks status handling; clears shared command structure at key transitions; stores channel count in priv.
sound/soc/codecs/Kconfig Adds ARCH_PHYTIUM dependency for Phytium codec v2.
sound/soc/codecs/es8388.c Updates version and adds error handling during component probe initialization.
sound/pci/hda/patch_hdmi.c Adds additional HDMI/DP codec IDs mapped to gf HDMI patch handler.
sound/pci/hda/hda_intel.c Extends VIA-specific position fix / snoop behavior and adds new PCI IDs for Zhaoxin HDMI controllers.
drivers/gpio/gpio-phytium-platform.c Rebinds chained handler on resume via helper; adjusts suspend/resume flow.
include/linux/pci-epc.h Adds Phytium-specific EPC DMA ops and exported APIs under CONFIG_ARCH_PHYTIUM.
drivers/pci/endpoint/pci-epc-core.c Implements/exports Phytium-specific EPC DMA entry points.
drivers/pci/endpoint/pci-ep-cfs.c Adds configfs exposure related to EPC function mapping.
drivers/pci/controller/pcie-phytium-ep.c Updates Phytium PCIe EP controller behavior (BAR/DMA related paths).
Documentation/devicetree/bindings/pci/phytium,pe2201-pcie-ep.yaml Adds DT binding for a Phytium PCIe EP device.
drivers/pci/hotplug/pciehp_hpc.c Adds Phytium-specific link-status override logic for hotplug.
drivers/devfreq/phytium_noc.c Adds/updates Phytium NoC devfreq driver functionality and PM behavior.
drivers/devfreq/phytium_dmu.c Adds/updates Phytium DMU devfreq driver (incl. SPDX tag).
drivers/perf/phytium/phytium_ddr_pmu.c Adds Phytium DDR PMU driver for perf.
drivers/perf/phytium/phytium_msi_pmu.c Adds Phytium MSI PMU driver for perf (counter handling/overflow paths).
drivers/perf/phytium/phytium_pcie_link_pmu.c Adds Phytium PCIe link PMU driver for perf (event/counter reads).
drivers/pinctrl/zhaoxin/pinctrl-zhaoxin.h Adds a helper macro for socket-specific pin definitions.
drivers/pinctrl/zhaoxin/pinctrl-kh50000.c Refactors KH50000 pin definitions using the new socket macro; adjusts resource/init paths.
fs/xfs/xfs_trace.h Adjusts tracepoint definitions/guards (e.g., compat-ioctl tracepoint under CONFIG_COMPAT).
MAINTAINERS Extends Phytium maintainer file globs to cover additional bindings and drivers.

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

Comment on lines +966 to +970
p = kmalloc(size, GFP_KERNEL);
if (p == NULL)
return -EINVAL;
strscpy(p, buf, sizeof(p));

Comment on lines +971 to +996
token = strsep(&p, " ");
if (!token) {
ret = -EINVAL;
goto error;
}

ret = kstrtol(token, 0, &value);
if (ret)
goto error;
loc = (u8)value;

if (loc == 1) {
//Enable I2S and DMA
phyt_writel_reg(priv->dma_reg_base, PHYTIUM_DMA_CTL, 1);
phyt_writel_reg(priv->regfile_base, PHYTIUM_REGFILE_ITER, TX_EN);
} else if (loc == 0) {
//Disable I2S and DMA
phyt_writel_reg(priv->regfile_base, PHYTIUM_REGFILE_ITER, TX_DIS);
phyt_writel_reg(priv->dma_reg_base, PHYTIUM_DMA_CTL, 0);
}

kfree(p);
return size;
error:
kfree(p);
return ret;
struct device;
struct zhaoxin_pinctrl;

#define SOCKET_PINCTRL_PIN(sock, a, b) PINCTRL_PIN(a, b"_"#sock)
Comment on lines +350 to +359
res_pmio = platform_get_resource(pdev, IORESOURCE_IO, 0);
if (!res_pmio) {
dev_err(&pdev->dev, "can't fetch device pmio resource info\n");
return;
}

if (!request_region(res_pmio->start, resource_size(res_pmio), pdev->name)) {
dev_err(&pdev->dev, "can't request region\n");
return;
}
Comment thread drivers/pci/endpoint/pci-epc-core.c Outdated
Comment on lines +226 to +230
if (IS_ERR(epc))
return -EINVAL;

if (!epc->ops->start_dma)
return 0;
Comment thread drivers/perf/phytium/phytium_msi_pmu.c Outdated
Comment on lines +457 to +466
j = event_type * 5;
for (i = 0; i < 4; i++) {
reqid_val = readl(misc_pmu->base + misc_reqid_record_reg_offset[j]);
req_cnt = readl(misc_pmu->base + misc_counter_reg_offset[j]);
record_mov_bits = (i % 2) * 16;
reqid[i] = (u32)(0xFFFF & (reqid_val >> record_mov_bits));
cnt_mov_bits = i * 4;
reqcnt[i] = (u32)(0xF & (req_cnt >> cnt_mov_bits));
dev_info(misc_pmu->dev, "reqid(%u),cnt=%u\n", reqid[i], reqcnt[i]);
j += 1;
Comment thread drivers/perf/phytium/phytium_msi_pmu.c Outdated
Comment on lines +578 to +583
if ((event->attr.config & PHYTIUM_MSI_PMU_EVENT_MASK) > PHYTIUM_MISC_MAX_COUNTERS)
return -EINVAL;

if (misc_pmu->on_cpu == -1)
return -EINVAL;

Comment thread drivers/perf/phytium/phytium_msi_pmu.c Outdated
Comment on lines +932 to +967
static irqreturn_t phytium_msi_pmu_overflow_handler(int irq, void *dev_id)
{
struct phytium_msi_pmu *misc_pmu = dev_id;
struct perf_event *event;
unsigned long now_state, stop_state;
int idx, event_type;
unsigned long dev_stop_mask, dev_mask;
unsigned long *used_mask = misc_pmu->pmu_events.used_mask;
u32 opt_val = 0;
int event_added = bitmap_weight(used_mask, PHYTIUM_MISC_MAX_COUNTERS);

// 0:pcu 1:pxu 2:peu
now_state = phytium_msi_pmu_get_now_status(misc_pmu);

if (!is_interrupt_state(now_state))
return IRQ_NONE;

if (!event_added) {
phytium_msi_pmu_clear_counters(misc_pmu, MISC_MSI_MON_OPT_MASK);
return IRQ_HANDLED;
}

stop_state = phytium_msi_pmu_get_stop_status(misc_pmu);
if (stop_state & MISC_MSI_MON_COUNT_FULL_MASK) {
for_each_set_bit(idx, used_mask, PHYTIUM_MISC_MAX_COUNTERS) {
event = misc_pmu->pmu_events.hw_events[idx];
if (!event)
continue;
event_type = phytium_msi_pmu_get_event_type(event);
dev_stop_mask = pcie_dev_msi_mon_stop_mask[event_type];

if (stop_state & dev_stop_mask & MISC_MSI_MON_COUNT_FULL_MASK) {
phytium_msi_pmu_event_update(event);
opt_val |= pcie_dev_msi_mon_opt_bits[event_type];
set_bit(event_type, &dev_mask);
}
Comment on lines +19 to +40
reg:
maxItems: 2

reg-names:
items:
- const: reg
- const: mem

required:
- compatible
- reg
- reg-names

examples:
- |
ep0: ep@0x31000000 {
compatible = "phytium,pe2201-pcie-ep";
interrupts = <0x00000000 0x0000000a 0x00000004 0x00000000 0x0000000b 0x00000004>;
reg = <0x00000000 0x31000000 0x00000000 0x00010000 0x00000011 0x00000000 0x00000001 0x00000000 0x00000000 0x31100000 0x00000000 0x00001000>;
reg-names = "reg", "mem", "hpb";
max-outbound-regions = <0x00000003>;
max-functions = [02];
Comment on lines +139 to +143
/* Rebind parent-to-child dispatch chain and enable parent IRQ lines. */
static void phytium_set_irq_chained_handler(struct phytium_gpio *gpio)
{
struct gpio_irq_chip *girq = &gpio->gc.irq;
int i;
Add device IDs for the next generation of switchtec products.

No changes to the driver were required with the new version of the
hardware.

[logang: rewrote commit message]

Signed-off-by: Ben Reed <Ben.Reed@microchip.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20260505161633.67454-1-logang@deltatee.com
Link: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?h=next&id=5e6c21c56998e1e58d2f314e70779989ea0fee5d
Signed-off-by: WangYuli <wangyl5933@chinaunicom.cn>
Fix module (=m) case where GPIO interrupts stop after S4 resume
because the parent IRQ loses the chained handler setting up at probe.
So rebind the handler for each parent in resume() to restore
parent-to-child dispatch. While builtin (=y) builds unaffected.

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>
Linux PM framework automatically calls suspend_device_irqs() during
suspend to disable IRQs, and resume_device_irqs() during resume to
re-enable them. The current GPIO driver redundantly calls enable_irq()
in its resume flow, which will create an unbalanced IRQ enable since
the kernel has already restored the IRQ state through resume_device_irqs().

Mainline: Open-Source
Signed-off-by: Zhu Ling <zhuling2709@phytium.com.cn>
Signed-off-by: Wang Yinfeng <wangyinfeng@phytium.com.cn>
Signed-off-by: Xia Qian <xiaqian1486@phytium.com.cn>
Ensure the Phytium GPIO PCI driver is only selectable for its intended
environment. This driver depends on both the Phytium platform and a
working PCI subsystem.

Mainline: Open-Source
Signed-off-by: Zhu Ling <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.

3 participants