dmaengine: imx-sdma: Only check ratio on parts that support 1:1
On imx8mq B0 chip, AHB/SDMA clock ratio 2:1 can't be supported, since SDMA clock ratio has to be increased to 250Mhz, AHB can't reach to 500Mhz, so use 1:1 instead. To limit this change to the imx8mq for now this patch also adds an im8mq-sdma compatible string. Signed-off-by: Angus Ainslie (Purism) <angus@akkea.ca> Acked-by: Robin Gong <yibin.gong@nxp.com> Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
9e1630b809
commit
941acd566b
|
@ -419,6 +419,7 @@ struct sdma_driver_data {
|
||||||
int chnenbl0;
|
int chnenbl0;
|
||||||
int num_events;
|
int num_events;
|
||||||
struct sdma_script_start_addrs *script_addrs;
|
struct sdma_script_start_addrs *script_addrs;
|
||||||
|
bool check_ratio;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sdma_engine {
|
struct sdma_engine {
|
||||||
|
@ -557,6 +558,13 @@ static struct sdma_driver_data sdma_imx7d = {
|
||||||
.script_addrs = &sdma_script_imx7d,
|
.script_addrs = &sdma_script_imx7d,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct sdma_driver_data sdma_imx8mq = {
|
||||||
|
.chnenbl0 = SDMA_CHNENBL0_IMX35,
|
||||||
|
.num_events = 48,
|
||||||
|
.script_addrs = &sdma_script_imx7d,
|
||||||
|
.check_ratio = 1,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct platform_device_id sdma_devtypes[] = {
|
static const struct platform_device_id sdma_devtypes[] = {
|
||||||
{
|
{
|
||||||
.name = "imx25-sdma",
|
.name = "imx25-sdma",
|
||||||
|
@ -579,6 +587,9 @@ static const struct platform_device_id sdma_devtypes[] = {
|
||||||
}, {
|
}, {
|
||||||
.name = "imx7d-sdma",
|
.name = "imx7d-sdma",
|
||||||
.driver_data = (unsigned long)&sdma_imx7d,
|
.driver_data = (unsigned long)&sdma_imx7d,
|
||||||
|
}, {
|
||||||
|
.name = "imx8mq-sdma",
|
||||||
|
.driver_data = (unsigned long)&sdma_imx8mq,
|
||||||
}, {
|
}, {
|
||||||
/* sentinel */
|
/* sentinel */
|
||||||
}
|
}
|
||||||
|
@ -593,6 +604,7 @@ static const struct of_device_id sdma_dt_ids[] = {
|
||||||
{ .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, },
|
{ .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, },
|
||||||
{ .compatible = "fsl,imx25-sdma", .data = &sdma_imx25, },
|
{ .compatible = "fsl,imx25-sdma", .data = &sdma_imx25, },
|
||||||
{ .compatible = "fsl,imx7d-sdma", .data = &sdma_imx7d, },
|
{ .compatible = "fsl,imx7d-sdma", .data = &sdma_imx7d, },
|
||||||
|
{ .compatible = "fsl,imx8mq-sdma", .data = &sdma_imx8mq, },
|
||||||
{ /* sentinel */ }
|
{ /* sentinel */ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, sdma_dt_ids);
|
MODULE_DEVICE_TABLE(of, sdma_dt_ids);
|
||||||
|
@ -1852,7 +1864,8 @@ static int sdma_init(struct sdma_engine *sdma)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto disable_clk_ipg;
|
goto disable_clk_ipg;
|
||||||
|
|
||||||
if (clk_get_rate(sdma->clk_ahb) == clk_get_rate(sdma->clk_ipg))
|
if (sdma->drvdata->check_ratio &&
|
||||||
|
(clk_get_rate(sdma->clk_ahb) == clk_get_rate(sdma->clk_ipg)))
|
||||||
sdma->clk_ratio = 1;
|
sdma->clk_ratio = 1;
|
||||||
|
|
||||||
/* Be sure SDMA has not started yet */
|
/* Be sure SDMA has not started yet */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user