From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: Xiaowei Song <songxiaowei@hisilicon.com>,
Dejin Zheng <zhengdejin5@gmail.com>,
Manivannan Sadhasivam <mani@kernel.org>,
Binghui Wang <wangbinghui@hisilicon.com>,
linuxarm@huawei.com
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Rob Herring <robh@kernel.org>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
mauro.chehab@huawei.com
Subject: Possible issue at the kirin-pcie driver
Date: Tue, 6 Jul 2021 11:35:03 +0200 [thread overview]
Message-ID: <20210706113503.66091e94@coco.lan> (raw)
Hi,
I was asked by Rob Herring to convert the kiring-pcie driver on two parts,
splitting the PHY logic from it, in order to be able to add PHY support
for Hikey 970 at drivers/pci/controller/dwc/pcie-kirin.c.
While doing so, I noticed something weird issue at the driver, with regards
to a certain register (PCIE_APB_PHY_STATUS0), as shown below:
...
#define PCIE_APB_PHY_STATUS0 0x400
...
static inline u32 kirin_apb_ctrl_readl(struct kirin_pcie *kirin_pcie, u32 reg)
{
return readl(kirin_pcie->apb_base + reg);
}
...
static inline u32 kirin_apb_phy_readl(struct kirin_pcie *kirin_pcie, u32 reg)
{
return readl(kirin_pcie->phy_base + reg);
}
...
static int kirin_pcie_phy_init(struct kirin_pcie *kirin_pcie)
{
...
reg_val = kirin_apb_phy_readl(kirin_pcie, PCIE_APB_PHY_STATUS0);
if (reg_val & PIPE_CLK_STABLE) {
dev_err(dev, "PIPE clk is not stable\n");
return -EINVAL;
}
}
...
static int kirin_pcie_link_up(struct dw_pcie *pci)
{
struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
u32 val = kirin_apb_ctrl_readl(kirin_pcie, PCIE_APB_PHY_STATUS0);
if ((val & PCIE_LINKUP_ENABLE) == PCIE_LINKUP_ENABLE)
return 1;
return 0;
u32 val = kirin_apb_ctrl_readl(kirin_pcie, PCIE_APB_PHY_STATUS0);
if ((val & PCIE_LINKUP_ENABLE) == PCIE_LINKUP_ENABLE)
return 1;
Basically, the code at kirin_pcie_phy_init() use this register as if it is
part of the PHY memory region (0xf3f20000 + 0x400), while the code at
kirin_pcie_link_up() considers is as belonging to the APB memory
region (0xff3fe000 + 0x400).
It sounds to me that there's a mistake somewhere. I mean, either:
1. there is a cut-and-paste error, caused it to access the wrong memory
region, e.g. at kirin_pcie_link_up() the logic should be:
u32 val = kirin_apb_phy_readl(kirin_pcie, PCIE_APB_PHY_STATUS0);
instead of:
u32 val = kirin_apb_ctrl_readl(kirin_pcie, PCIE_APB_PHY_STATUS0);
(or the reverse)
2. Both memory regions have a register at address 0x400 with similar
names that ended being merged into the same macro;
3. the register for APB PHY status0 is duplicated on both regions and,
on both, they are at region_base + 0x400.
I suspect that it is (1), but, as I don't have any datasheets or
register map, I can't tell for sure.
Could someone with access to the datahseets shed the light?
Thanks,
Mauro
next reply other threads:[~2021-07-06 9:35 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-06 9:35 Mauro Carvalho Chehab [this message]
2021-07-07 10:54 ` Possible issue at the kirin-pcie driver Manivannan Sadhasivam
2021-07-07 11:18 ` Mauro Carvalho Chehab
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=20210706113503.66091e94@coco.lan \
--to=mchehab+huawei@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=lorenzo.pieralisi@arm.com \
--cc=mani@kernel.org \
--cc=mauro.chehab@huawei.com \
--cc=robh@kernel.org \
--cc=songxiaowei@hisilicon.com \
--cc=wangbinghui@hisilicon.com \
--cc=zhengdejin5@gmail.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.