From: Frank Li <Frank.li@nxp.com>
To: York Sun <york.sun@nxp.com>, Borislav Petkov <bp@alien8.de>,
Tony Luck <tony.luck@intel.com>,
James Morse <james.morse@arm.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Robert Richter <rric@kernel.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
Rob Herring <robh@kernel.org>, Conor Dooley <conor+dt@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>
Cc: linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org,
Borislav Petkov <bp@suse.de>,
devicetree@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/6] EDAC: fsl_ddr: Pass down fsl_mc_pdata in ddr_in32() and ddr_out32()
Date: Thu, 29 Aug 2024 18:03:07 -0400 [thread overview]
Message-ID: <ZtDwG2xFGaUssJVN@lizhi-Precision-Tower-5810> (raw)
In-Reply-To: <20240709-imx95_edac-v1-1-3e9c146c1b01@nxp.com>
On Tue, Jul 09, 2024 at 04:23:02PM -0400, Frank Li wrote:
> Pass down fsl_mc_data in help function ddr_in32() and ddr_out32() to
> prepare add iMX9 support. iMX9 have a little difference register layout.
>
> No functional change.
>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
Ping?
Frank
> drivers/edac/fsl_ddr_edac.c | 62 ++++++++++++++++++++++++---------------------
> 1 file changed, 33 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/edac/fsl_ddr_edac.c b/drivers/edac/fsl_ddr_edac.c
> index d148d262d0d4d..a7982370e2381 100644
> --- a/drivers/edac/fsl_ddr_edac.c
> +++ b/drivers/edac/fsl_ddr_edac.c
> @@ -35,13 +35,17 @@ static u32 orig_ddr_err_disable;
> static u32 orig_ddr_err_sbe;
> static bool little_endian;
>
> -static inline u32 ddr_in32(void __iomem *addr)
> +static inline u32 ddr_in32(struct fsl_mc_pdata *pdata, unsigned int off)
> {
> + void __iomem *addr = pdata->mc_vbase + off;
> +
> return little_endian ? ioread32(addr) : ioread32be(addr);
> }
>
> -static inline void ddr_out32(void __iomem *addr, u32 value)
> +static inline void ddr_out32(struct fsl_mc_pdata *pdata, unsigned int off, u32 value)
> {
> + void __iomem *addr = pdata->mc_vbase + off;
> +
> if (little_endian)
> iowrite32(value, addr);
> else
> @@ -60,7 +64,7 @@ static ssize_t fsl_mc_inject_data_hi_show(struct device *dev,
> struct mem_ctl_info *mci = to_mci(dev);
> struct fsl_mc_pdata *pdata = mci->pvt_info;
> return sprintf(data, "0x%08x",
> - ddr_in32(pdata->mc_vbase + FSL_MC_DATA_ERR_INJECT_HI));
> + ddr_in32(pdata, FSL_MC_DATA_ERR_INJECT_HI));
> }
>
> static ssize_t fsl_mc_inject_data_lo_show(struct device *dev,
> @@ -70,7 +74,7 @@ static ssize_t fsl_mc_inject_data_lo_show(struct device *dev,
> struct mem_ctl_info *mci = to_mci(dev);
> struct fsl_mc_pdata *pdata = mci->pvt_info;
> return sprintf(data, "0x%08x",
> - ddr_in32(pdata->mc_vbase + FSL_MC_DATA_ERR_INJECT_LO));
> + ddr_in32(pdata, FSL_MC_DATA_ERR_INJECT_LO));
> }
>
> static ssize_t fsl_mc_inject_ctrl_show(struct device *dev,
> @@ -80,7 +84,7 @@ static ssize_t fsl_mc_inject_ctrl_show(struct device *dev,
> struct mem_ctl_info *mci = to_mci(dev);
> struct fsl_mc_pdata *pdata = mci->pvt_info;
> return sprintf(data, "0x%08x",
> - ddr_in32(pdata->mc_vbase + FSL_MC_ECC_ERR_INJECT));
> + ddr_in32(pdata, FSL_MC_ECC_ERR_INJECT));
> }
>
> static ssize_t fsl_mc_inject_data_hi_store(struct device *dev,
> @@ -97,7 +101,7 @@ static ssize_t fsl_mc_inject_data_hi_store(struct device *dev,
> if (rc)
> return rc;
>
> - ddr_out32(pdata->mc_vbase + FSL_MC_DATA_ERR_INJECT_HI, val);
> + ddr_out32(pdata, FSL_MC_DATA_ERR_INJECT_HI, val);
> return count;
> }
> return 0;
> @@ -117,7 +121,7 @@ static ssize_t fsl_mc_inject_data_lo_store(struct device *dev,
> if (rc)
> return rc;
>
> - ddr_out32(pdata->mc_vbase + FSL_MC_DATA_ERR_INJECT_LO, val);
> + ddr_out32(pdata, FSL_MC_DATA_ERR_INJECT_LO, val);
> return count;
> }
> return 0;
> @@ -137,7 +141,7 @@ static ssize_t fsl_mc_inject_ctrl_store(struct device *dev,
> if (rc)
> return rc;
>
> - ddr_out32(pdata->mc_vbase + FSL_MC_ECC_ERR_INJECT, val);
> + ddr_out32(pdata, FSL_MC_ECC_ERR_INJECT, val);
> return count;
> }
> return 0;
> @@ -286,7 +290,7 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
> int bad_data_bit;
> int bad_ecc_bit;
>
> - err_detect = ddr_in32(pdata->mc_vbase + FSL_MC_ERR_DETECT);
> + err_detect = ddr_in32(pdata, FSL_MC_ERR_DETECT);
> if (!err_detect)
> return;
>
> @@ -295,14 +299,14 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
>
> /* no more processing if not ECC bit errors */
> if (!(err_detect & (DDR_EDE_SBE | DDR_EDE_MBE))) {
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_DETECT, err_detect);
> + ddr_out32(pdata, FSL_MC_ERR_DETECT, err_detect);
> return;
> }
>
> - syndrome = ddr_in32(pdata->mc_vbase + FSL_MC_CAPTURE_ECC);
> + syndrome = ddr_in32(pdata, FSL_MC_CAPTURE_ECC);
>
> /* Mask off appropriate bits of syndrome based on bus width */
> - bus_width = (ddr_in32(pdata->mc_vbase + FSL_MC_DDR_SDRAM_CFG) &
> + bus_width = (ddr_in32(pdata, FSL_MC_DDR_SDRAM_CFG) &
> DSC_DBW_MASK) ? 32 : 64;
> if (bus_width == 64)
> syndrome &= 0xff;
> @@ -310,8 +314,8 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
> syndrome &= 0xffff;
>
> err_addr = make64(
> - ddr_in32(pdata->mc_vbase + FSL_MC_CAPTURE_EXT_ADDRESS),
> - ddr_in32(pdata->mc_vbase + FSL_MC_CAPTURE_ADDRESS));
> + ddr_in32(pdata, FSL_MC_CAPTURE_EXT_ADDRESS),
> + ddr_in32(pdata, FSL_MC_CAPTURE_ADDRESS));
> pfn = err_addr >> PAGE_SHIFT;
>
> for (row_index = 0; row_index < mci->nr_csrows; row_index++) {
> @@ -320,8 +324,8 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
> break;
> }
>
> - cap_high = ddr_in32(pdata->mc_vbase + FSL_MC_CAPTURE_DATA_HI);
> - cap_low = ddr_in32(pdata->mc_vbase + FSL_MC_CAPTURE_DATA_LO);
> + cap_high = ddr_in32(pdata, FSL_MC_CAPTURE_DATA_HI);
> + cap_low = ddr_in32(pdata, FSL_MC_CAPTURE_DATA_LO);
>
> /*
> * Analyze single-bit errors on 64-bit wide buses
> @@ -367,7 +371,7 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
> row_index, 0, -1,
> mci->ctl_name, "");
>
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_DETECT, err_detect);
> + ddr_out32(pdata, FSL_MC_ERR_DETECT, err_detect);
> }
>
> static irqreturn_t fsl_mc_isr(int irq, void *dev_id)
> @@ -376,7 +380,7 @@ static irqreturn_t fsl_mc_isr(int irq, void *dev_id)
> struct fsl_mc_pdata *pdata = mci->pvt_info;
> u32 err_detect;
>
> - err_detect = ddr_in32(pdata->mc_vbase + FSL_MC_ERR_DETECT);
> + err_detect = ddr_in32(pdata, FSL_MC_ERR_DETECT);
> if (!err_detect)
> return IRQ_NONE;
>
> @@ -396,7 +400,7 @@ static void fsl_ddr_init_csrows(struct mem_ctl_info *mci)
> u32 cs_bnds;
> int index;
>
> - sdram_ctl = ddr_in32(pdata->mc_vbase + FSL_MC_DDR_SDRAM_CFG);
> + sdram_ctl = ddr_in32(pdata, FSL_MC_DDR_SDRAM_CFG);
>
> sdtype = sdram_ctl & DSC_SDTYPE_MASK;
> if (sdram_ctl & DSC_RD_EN) {
> @@ -444,7 +448,7 @@ static void fsl_ddr_init_csrows(struct mem_ctl_info *mci)
> csrow = mci->csrows[index];
> dimm = csrow->channels[0]->dimm;
>
> - cs_bnds = ddr_in32(pdata->mc_vbase + FSL_MC_CS_BNDS_0 +
> + cs_bnds = ddr_in32(pdata, FSL_MC_CS_BNDS_0 +
> (index * FSL_MC_CS_BNDS_OFS));
>
> start = (cs_bnds & 0xffff0000) >> 16;
> @@ -558,11 +562,11 @@ int fsl_mc_err_probe(struct platform_device *op)
> fsl_ddr_init_csrows(mci);
>
> /* store the original error disable bits */
> - orig_ddr_err_disable = ddr_in32(pdata->mc_vbase + FSL_MC_ERR_DISABLE);
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_DISABLE, 0);
> + orig_ddr_err_disable = ddr_in32(pdata, FSL_MC_ERR_DISABLE);
> + ddr_out32(pdata, FSL_MC_ERR_DISABLE, 0);
>
> /* clear all error bits */
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_DETECT, ~0);
> + ddr_out32(pdata, FSL_MC_ERR_DETECT, ~0);
>
> res = edac_mc_add_mc_with_groups(mci, fsl_ddr_dev_groups);
> if (res) {
> @@ -571,15 +575,15 @@ int fsl_mc_err_probe(struct platform_device *op)
> }
>
> if (edac_op_state == EDAC_OPSTATE_INT) {
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_INT_EN,
> + ddr_out32(pdata, FSL_MC_ERR_INT_EN,
> DDR_EIE_MBEE | DDR_EIE_SBEE);
>
> /* store the original error management threshold */
> - orig_ddr_err_sbe = ddr_in32(pdata->mc_vbase +
> + orig_ddr_err_sbe = ddr_in32(pdata,
> FSL_MC_ERR_SBE) & 0xff0000;
>
> /* set threshold to 1 error per interrupt */
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_SBE, 0x10000);
> + ddr_out32(pdata, FSL_MC_ERR_SBE, 0x10000);
>
> /* register interrupts */
> pdata->irq = platform_get_irq(op, 0);
> @@ -620,12 +624,12 @@ void fsl_mc_err_remove(struct platform_device *op)
> edac_dbg(0, "\n");
>
> if (edac_op_state == EDAC_OPSTATE_INT) {
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_INT_EN, 0);
> + ddr_out32(pdata, FSL_MC_ERR_INT_EN, 0);
> }
>
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_DISABLE,
> + ddr_out32(pdata, FSL_MC_ERR_DISABLE,
> orig_ddr_err_disable);
> - ddr_out32(pdata->mc_vbase + FSL_MC_ERR_SBE, orig_ddr_err_sbe);
> + ddr_out32(pdata, FSL_MC_ERR_SBE, orig_ddr_err_sbe);
>
> edac_mc_del_mc(&op->dev);
> edac_mc_free(mci);
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2024-08-29 22:04 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-09 20:23 [PATCH 0/6] EDAC: fsl-ddr, add imx9 support Frank Li
2024-07-09 20:23 ` [PATCH 1/6] EDAC: fsl_ddr: Pass down fsl_mc_pdata in ddr_in32() and ddr_out32() Frank Li
2024-08-29 22:03 ` Frank Li [this message]
2024-10-10 15:33 ` Borislav Petkov
2024-10-10 16:07 ` Frank Li
2024-07-09 20:23 ` [PATCH 2/6] EDAC, fsl_ddr: Move global variable into struct fsl_mc_pdata Frank Li
2024-07-09 20:23 ` [PATCH 3/6] EDAC: fsl: Fix bad bit shift operations Frank Li
2024-07-09 20:23 ` [PATCH 4/6] dt-bindings: memory: fsl: Add compatible string nxp,imx9-memory-controller Frank Li
2024-07-10 6:49 ` Krzysztof Kozlowski
2024-07-10 7:18 ` [PATCH 4/6] dt-bindings: memory: fsl: Add compatible string nxp, imx9-memory-controller Alexander Stein
2024-07-12 3:27 ` Frank Li
2024-07-12 6:08 ` Alexander Stein
2024-07-09 20:23 ` [PATCH 5/6] EDAC: fsl_ddr: Add support for i.MX9 DDR controller Frank Li
2024-07-09 20:23 ` [PATCH 6/6] arm64: dts: imx93: add ddr edac support Frank Li
2024-07-10 2:25 ` Peng Fan
2024-07-10 14:38 ` Frank Li
2024-09-30 20:42 ` [PATCH 0/6] EDAC: fsl-ddr, add imx9 support Frank Li
2024-10-02 9:08 ` Borislav Petkov
2024-10-02 10:48 ` Krzysztof Kozlowski
2024-10-02 10:52 ` Krzysztof Kozlowski
2024-10-09 15:48 ` Frank Li
2024-10-09 16:20 ` Borislav Petkov
2024-10-09 18:31 ` Frank Li
2024-10-09 19:22 ` Borislav Petkov
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=ZtDwG2xFGaUssJVN@lizhi-Precision-Tower-5810 \
--to=frank.li@nxp.com \
--cc=bp@alien8.de \
--cc=bp@suse.de \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=imx@lists.linux.dev \
--cc=james.morse@arm.com \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-edac@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=robh@kernel.org \
--cc=rric@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
--cc=tony.luck@intel.com \
--cc=york.sun@nxp.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox