PCI: keystone: Use phandle argument from "ti,syscon-pcie-id"/"ti,syscon-pcie-mode"
Get "syscon" pcie_mode and pcie_id offset from the argument of "ti,syscon-pcie-id" and "ti,syscon-pcie-mode" phandle respectively. Previously a subnode to "syscon" node was added which has the exact memory mapped address of pcie_mode and pcie_id but now the offset of pcie_mode and pcie_id within "syscon" is now being passed as argument to "ti,syscon-pcie-id" and "ti,syscon-pcie-mode" phandle. If the offset is not provided in "ti,syscon-pcie-id"/"ti,syscon-pcie-mode", the full memory mapped address of pcie_ctrl is used in order to maintain old DT compatibility. Similar change for J721E is as discussed in [1] [1] -> http://lore.kernel.org/r/CAL_JsqKiUcO76bo1GoepWM1TusJWoty_BRy2hFSgtEVMqtrvvQ@mail.gmail.com Link: https://lore.kernel.org/r/20211126083119.16570-3-kishon@ti.com Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
This commit is contained in:
parent
d91e775e66
commit
7dcf07ac88
@ -775,12 +775,19 @@ static int __init ks_pcie_init_id(struct keystone_pcie *ks_pcie)
|
||||
struct dw_pcie *pci = ks_pcie->pci;
|
||||
struct device *dev = pci->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
struct of_phandle_args args;
|
||||
unsigned int offset = 0;
|
||||
|
||||
devctrl_regs = syscon_regmap_lookup_by_phandle(np, "ti,syscon-pcie-id");
|
||||
if (IS_ERR(devctrl_regs))
|
||||
return PTR_ERR(devctrl_regs);
|
||||
|
||||
ret = regmap_read(devctrl_regs, 0, &id);
|
||||
/* Do not error out to maintain old DT compatibility */
|
||||
ret = of_parse_phandle_with_fixed_args(np, "ti,syscon-pcie-id", 1, 0, &args);
|
||||
if (!ret)
|
||||
offset = args.args[0];
|
||||
|
||||
ret = regmap_read(devctrl_regs, offset, &id);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -989,6 +996,8 @@ err_phy:
|
||||
static int ks_pcie_set_mode(struct device *dev)
|
||||
{
|
||||
struct device_node *np = dev->of_node;
|
||||
struct of_phandle_args args;
|
||||
unsigned int offset = 0;
|
||||
struct regmap *syscon;
|
||||
u32 val;
|
||||
u32 mask;
|
||||
@ -998,10 +1007,15 @@ static int ks_pcie_set_mode(struct device *dev)
|
||||
if (IS_ERR(syscon))
|
||||
return 0;
|
||||
|
||||
/* Do not error out to maintain old DT compatibility */
|
||||
ret = of_parse_phandle_with_fixed_args(np, "ti,syscon-pcie-mode", 1, 0, &args);
|
||||
if (!ret)
|
||||
offset = args.args[0];
|
||||
|
||||
mask = KS_PCIE_DEV_TYPE_MASK | KS_PCIE_SYSCLOCKOUTEN;
|
||||
val = KS_PCIE_DEV_TYPE(RC) | KS_PCIE_SYSCLOCKOUTEN;
|
||||
|
||||
ret = regmap_update_bits(syscon, 0, mask, val);
|
||||
ret = regmap_update_bits(syscon, offset, mask, val);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to set pcie mode\n");
|
||||
return ret;
|
||||
@ -1014,6 +1028,8 @@ static int ks_pcie_am654_set_mode(struct device *dev,
|
||||
enum dw_pcie_device_mode mode)
|
||||
{
|
||||
struct device_node *np = dev->of_node;
|
||||
struct of_phandle_args args;
|
||||
unsigned int offset = 0;
|
||||
struct regmap *syscon;
|
||||
u32 val;
|
||||
u32 mask;
|
||||
@ -1023,6 +1039,11 @@ static int ks_pcie_am654_set_mode(struct device *dev,
|
||||
if (IS_ERR(syscon))
|
||||
return 0;
|
||||
|
||||
/* Do not error out to maintain old DT compatibility */
|
||||
ret = of_parse_phandle_with_fixed_args(np, "ti,syscon-pcie-mode", 1, 0, &args);
|
||||
if (!ret)
|
||||
offset = args.args[0];
|
||||
|
||||
mask = AM654_PCIE_DEV_TYPE_MASK;
|
||||
|
||||
switch (mode) {
|
||||
@ -1037,7 +1058,7 @@ static int ks_pcie_am654_set_mode(struct device *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = regmap_update_bits(syscon, 0, mask, val);
|
||||
ret = regmap_update_bits(syscon, offset, mask, val);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to set pcie mode\n");
|
||||
return ret;
|
||||
|
Loading…
x
Reference in New Issue
Block a user