spi: cadence-qspi: allow parsing both "new" and "legacy" partitions
In the "legacy" way, partitions are listed directly under the flash node. In the "new" way, there is a partitions node under the flash node, and the partitions are listed under that node. Allow parsing both styles of partitions for finding the PHY pattern location. Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
This commit is contained in:
parent
842c6777d0
commit
2743c767ff
|
|
@ -911,12 +911,41 @@ static void cadence_spi_mem_do_calibration(struct spi_slave *spi,
|
||||||
ret);
|
ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cadence_spi_ofdata_phy_pattern(struct cadence_spi_platdata *plat,
|
||||||
|
ofnode flash_node)
|
||||||
|
{
|
||||||
|
ofnode subnode;
|
||||||
|
const char *label;
|
||||||
|
u32 start;
|
||||||
|
|
||||||
|
subnode = ofnode_find_subnode(flash_node, "partitions");
|
||||||
|
if (!ofnode_valid(subnode))
|
||||||
|
/*
|
||||||
|
* Maybe the node has legacy style partitions, listed directly
|
||||||
|
* under flash node.
|
||||||
|
*/
|
||||||
|
subnode = ofnode_first_subnode(flash_node);
|
||||||
|
else
|
||||||
|
subnode = ofnode_first_subnode(subnode);
|
||||||
|
|
||||||
|
while (ofnode_valid(subnode)) {
|
||||||
|
label = ofnode_read_string(subnode, "label");
|
||||||
|
if (label && strcmp(label, "ospi.phypattern") == 0) {
|
||||||
|
if (!ofnode_read_u32_array(subnode, "reg", &start, 1))
|
||||||
|
return start;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
subnode = ofnode_next_subnode(subnode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
static int cadence_spi_ofdata_to_platdata(struct udevice *bus)
|
static int cadence_spi_ofdata_to_platdata(struct udevice *bus)
|
||||||
{
|
{
|
||||||
struct cadence_spi_platdata *plat = bus->platdata;
|
struct cadence_spi_platdata *plat = bus->platdata;
|
||||||
ofnode subnode;
|
ofnode subnode;
|
||||||
const char *label;
|
int ret;
|
||||||
u32 start;
|
|
||||||
|
|
||||||
plat->regbase = (void *)devfdt_get_addr_index(bus, 0);
|
plat->regbase = (void *)devfdt_get_addr_index(bus, 0);
|
||||||
plat->ahbbase = (void *)devfdt_get_addr_size_index(bus, 1,
|
plat->ahbbase = (void *)devfdt_get_addr_size_index(bus, 1,
|
||||||
|
|
@ -969,16 +998,11 @@ static int cadence_spi_ofdata_to_platdata(struct udevice *bus)
|
||||||
48);
|
48);
|
||||||
|
|
||||||
/* Find the PHY tuning pattern partition. */
|
/* Find the PHY tuning pattern partition. */
|
||||||
subnode = ofnode_first_subnode(subnode);
|
ret = cadence_spi_ofdata_phy_pattern(plat, subnode);
|
||||||
while (ofnode_valid(subnode)) {
|
if (ret < 0)
|
||||||
label = ofnode_read_string(subnode, "label");
|
dev_dbg(plat->dev, "Unable to find PHY pattern partition\n");
|
||||||
if (label && strcmp(label, "ospi.phypattern") == 0) {
|
else
|
||||||
if (!ofnode_read_u32_array(subnode, "reg", &start, 1))
|
plat->phy_pattern_start = ret;
|
||||||
plat->phy_pattern_start = start;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
subnode = ofnode_next_subnode(subnode);
|
|
||||||
}
|
|
||||||
|
|
||||||
debug("%s: regbase=%p ahbbase=%p max-frequency=%d page-size=%d\n",
|
debug("%s: regbase=%p ahbbase=%p max-frequency=%d page-size=%d\n",
|
||||||
__func__, plat->regbase, plat->ahbbase, plat->max_hz,
|
__func__, plat->regbase, plat->ahbbase, plat->max_hz,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue