From: matthew.gerlach@linux.intel.com
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: lpieralisi@kernel.org, kw@linux.com,
manivannan.sadhasivam@linaro.org, robh@kernel.org,
bhelgaas@google.com, krzk+dt@kernel.org, conor+dt@kernel.org,
dinguyen@kernel.org, joyce.ooi@intel.com,
linux-pci@vger.kernel.org, devicetree@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
matthew.gerlach@altera.com, peter.colberg@altera.com, "D M,
Sharath Kumar" <sharath.kumar.d.m@intel.com>,
D@web.codeaurora.org, M@web.codeaurora.org
Subject: Re: [PATCH v4 5/5] PCI: altera: Add Agilex support
Date: Sat, 25 Jan 2025 08:16:37 -0800 (PST) [thread overview]
Message-ID: <e3e95c4b-9b71-c2f5-4c83-2e4048627d89@linux.intel.com> (raw)
In-Reply-To: <f2c9061a-6a9c-4cd1-8a3f-a286a2eb30a8@linux.intel.com>
[-- Attachment #1: Type: text/plain, Size: 4564 bytes --]
On Fri, 24 Jan 2025, Ilpo Järvinen wrote:
> On Thu, 23 Jan 2025, Matthew Gerlach wrote:
>
>> From: "D M, Sharath Kumar" <sharath.kumar.d.m@intel.com>
>>
>> Add PCIe root port controller support for the Agilex family of chips.
>> The Agilex PCIe IP has three variants that are mostly sw compatible,
>> except for a couple register offsets. The P-Tile variant supports
>> Gen3/Gen4 1x16. The F-Tile variant supports Gen3/Gen4 4x4, 4x8, and 4x16.
>> The R-Tile variant improves on the F-Tile variant by adding Gen5 support.
>>
>> To simplify the implementation of pci_ops read/write functions,
>> ep_{read/write}_cfg() callbacks were added to struct altera_pci_ops
>> to easily distinguish between hardware variants.
>>
>> Signed-off-by: D M, Sharath Kumar <sharath.kumar.d.m@intel.com>
>> Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
[snip]
>> +}
>> +
>> +static inline void cra_writeb(struct altera_pcie *pcie, const u32 value,
>> + const u32 reg)
>> +{
>> + writeb_relaxed(value, pcie->cra_base + reg);
>> +}
>> +
>> +static inline u32 cra_readb(struct altera_pcie *pcie, const u32 reg)
>> +{
>> + return readb_relaxed(pcie->cra_base + reg);
>> +}
>> +
>> static bool altera_pcie_link_up(struct altera_pcie *pcie)
>> {
>> return !!((cra_readl(pcie, RP_LTSSM) & RP_LTSSM_MASK) == LTSSM_L0);
>> @@ -145,6 +185,15 @@ static bool s10_altera_pcie_link_up(struct altera_pcie *pcie)
>> return !!(readw(addr) & PCI_EXP_LNKSTA_DLLLA);
>> }
>>
>> +static bool aglx_altera_pcie_link_up(struct altera_pcie *pcie)
>> +{
>> + void __iomem *addr = AGLX_RP_CFG_ADDR(pcie,
>> + pcie->pcie_data->cap_offset +
>> + PCI_EXP_LNKSTA);
>> +
>> + return !!(readw_relaxed(addr) & PCI_EXP_LNKSTA_DLLLA);
>
> This returns bool so double negations are not necessary.
I will remove unecessary !!
>
>> +}
>> +
>> /*
>> * Altera PCIe port uses BAR0 of RC's configuration space as the translation
>> * from PCI bus to native BUS. Entire DDR region is mapped into PCIe space
>> @@ -425,6 +474,103 @@ static int s10_rp_write_cfg(struct altera_pcie *pcie, u8 busno,
>> return PCIBIOS_SUCCESSFUL;
>> }
>>
>> +static int aglx_rp_read_cfg(struct altera_pcie *pcie, int where,
>> + int size, u32 *value)
>> +{
>> + void __iomem *addr = AGLX_RP_CFG_ADDR(pcie, where);
>> +
>> + switch (size) {
>> + case 1:
>> + *value = readb_relaxed(addr);
>> + break;
>> + case 2:
>> + *value = readw_relaxed(addr);
>> + break;
>> + default:
>> + *value = readl_relaxed(addr);
>> + break;
>> + }
>> +
>> + /* interrupt pin not programmed in hardware, set to INTA */
>> + if (where == PCI_INTERRUPT_PIN && size == 1 && !(*value))
>> + *value = 0x01;
>> + else if (where == PCI_INTERRUPT_LINE && !(*value & 0xff00))
>> + *value |= 0x0100;
>> +
>> + return PCIBIOS_SUCCESSFUL;
>> +}
>> +
>> +static int aglx_rp_write_cfg(struct altera_pcie *pcie, u8 busno,
>> + int where, int size, u32 value)
>> +{
>> + void __iomem *addr = AGLX_RP_CFG_ADDR(pcie, where);
>> +
>> + switch (size) {
>> + case 1:
>> + writeb_relaxed(value, addr);
>> + break;
>> + case 2:
>> + writew_relaxed(value, addr);
>> + break;
>> + default:
>> + writel_relaxed(value, addr);
>> + break;
>> + }
>> +
>> + /*
>> + * Monitor changes to PCI_PRIMARY_BUS register on root port
>> + * and update local copy of root bus number accordingly.
>> + */
>> + if (busno == pcie->root_bus_nr && where == PCI_PRIMARY_BUS)
>> + pcie->root_bus_nr = value & 0xff;
>> +
>> + return PCIBIOS_SUCCESSFUL;
>> +}
>> +
>> +static int aglx_ep_write_cfg(struct altera_pcie *pcie, u8 busno,
>> + unsigned int devfn, int where, int size, u32 value)
>> +{
>> + cra_writel(pcie, ((busno << 8) | devfn), AGLX_BDF_REG);
>> + if (busno > AGLX_RP_SECONDARY(pcie))
>> + where |= BIT(12); /* type 1 */
>
> Add a define to replace the comment?
I will create a suitably name macro; so that a comment won't be necessary.
>
>> +
>> + switch (size) {
>> + case 1:
>> + cra_writeb(pcie, value, where);
>> + break;
>> + case 2:
>> + cra_writew(pcie, value, where);
>> + break;
>> + default:
>> + cra_writel(pcie, value, where);
>> + break;
>> + }
>> +
>> + return PCIBIOS_SUCCESSFUL;
>> +}
>> +
>> +static int aglx_ep_read_cfg(struct altera_pcie *pcie, u8 busno,
>> + unsigned int devfn, int where, int size, u32 *value)
>> +{
>> + cra_writel(pcie, ((busno << 8) | devfn), AGLX_BDF_REG);
>> + if (busno > AGLX_RP_SECONDARY(pcie))
>> + where |= BIT(12); /* type 1 */
>
> Same here?
Yes, use a better macro here too.
>
> --
> i.
Thanks for the review,
Matthew Gerlach
>
>
prev parent reply other threads:[~2025-01-25 16:16 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-23 18:19 [PATCH v4 0/5] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
2025-01-23 18:19 ` [PATCH v4 1/5] dt-bindings: PCI: altera: Add binding for Agilex Matthew Gerlach
2025-01-23 18:19 ` [PATCH v4 2/5] arm64: dts: agilex: add soc0 label Matthew Gerlach
2025-01-23 18:19 ` [PATCH v4 3/5] arm64: dts: agilex: add dtsi for PCIe Root Port Matthew Gerlach
2025-01-23 18:19 ` [PATCH v4 4/5] arm64: dts: agilex: add dts enabling " Matthew Gerlach
2025-01-23 18:19 ` [PATCH v4 5/5] PCI: altera: Add Agilex support Matthew Gerlach
2025-01-24 14:10 ` Ilpo Järvinen
2025-01-25 16:16 ` matthew.gerlach [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e3e95c4b-9b71-c2f5-4c83-2e4048627d89@linux.intel.com \
--to=matthew.gerlach@linux.intel.com \
--cc=D@web.codeaurora.org \
--cc=M@web.codeaurora.org \
--cc=bhelgaas@google.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dinguyen@kernel.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=joyce.ooi@intel.com \
--cc=krzk+dt@kernel.org \
--cc=kw@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=manivannan.sadhasivam@linaro.org \
--cc=matthew.gerlach@altera.com \
--cc=peter.colberg@altera.com \
--cc=robh@kernel.org \
--cc=sharath.kumar.d.m@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.