
Currently shutdown command is yet to be implemented. So work around clearing the task manager of ICSSG.
Signed-off-by: Keerthy j-keerthy@ti.com --- drivers/net/ti/icssg-prueth.c | 8 ++++++++ drivers/soc/ti/pruss.c | 15 +++++++++++++++ include/ti-pruss.h | 1 + 3 files changed, 24 insertions(+)
diff --git a/drivers/net/ti/icssg-prueth.c b/drivers/net/ti/icssg-prueth.c index f8935ee087..980a1d9ee8 100644 --- a/drivers/net/ti/icssg-prueth.c +++ b/drivers/net/ti/icssg-prueth.c @@ -84,6 +84,7 @@ struct prueth { struct regmap *miig_rt; fdt_addr_t mdio_base; phys_addr_t pruss_shrdram2; + phys_addr_t tmaddr; struct mii_dev *bus; u32 port_id; u32 sram_pa; @@ -277,6 +278,9 @@ static void prueth_stop(struct udevice *dev)
dma_disable(&priv->dma_rx); dma_free(&priv->dma_rx); + + /* Workaround for shutdown command */ + writel(0x0, priv->tmaddr + priv->slice * 0x200); }
static const struct eth_ops prueth_ops = { @@ -391,6 +395,10 @@ static int prueth_probe(struct udevice *dev) if (ret) return ret;
+ ret = pruss_request_tm_region(*prussdev, &prueth->tmaddr); + if (ret) + return ret; + node = dev_ofnode(dev); eth0_node = ofnode_find_subnode(node, "ethernet-mii0"); eth1_node = ofnode_find_subnode(node, "ethernet-mii1"); diff --git a/drivers/soc/ti/pruss.c b/drivers/soc/ti/pruss.c index 03ddaaa539..0d53d0a26b 100644 --- a/drivers/soc/ti/pruss.c +++ b/drivers/soc/ti/pruss.c @@ -21,6 +21,8 @@ #define PRUSS_CFG_IEPCLK 0x30 #define ICSSG_CFG_CORE_SYNC 0x3c
+#define ICSSG_TASK_MGR_OFFSET 0x2a000 + /* PRUSS_IEPCLK register bits */ #define PRUSS_IEPCLK_IEP_OCP_CLK_EN BIT(0)
@@ -37,6 +39,19 @@ enum pruss_mem { PRUSS_MEM_MAX, };
+int pruss_request_tm_region(struct udevice *dev, phys_addr_t *loc) +{ + struct pruss *priv; + + priv = dev_get_priv(dev); + if (!priv || !priv->pruss_dram0) + return -EINVAL; + + *loc = priv->pruss_dram0 + ICSSG_TASK_MGR_OFFSET; + + return 0; +} + int pruss_request_shrmem_region(struct udevice *dev, phys_addr_t *loc) { struct pruss *priv; diff --git a/include/ti-pruss.h b/include/ti-pruss.h index 547ec5ee33..9eadeef172 100644 --- a/include/ti-pruss.h +++ b/include/ti-pruss.h @@ -10,3 +10,4 @@ struct pruss { };
int pruss_request_shrmem_region(struct udevice *dev, phys_addr_t *loc); +int pruss_request_tm_region(struct udevice *dev, phys_addr_t *loc);