mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 04:23:35 +02:00
i.MX clocks changes for 6.12
- Use clk_hw pointer instead of fw_name for acm_aud_clk[0-1]_sel clocks on i.MX8Q as parents in ACM provider - Add i.MX95 NETCMIX support to the block control provider - Fix parents for ENETx_REF_SEL clocks on i.MX6UL -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEETvPuEU56jyrKp9G4G19EyQCVFVYFAmbYLhgACgkQG19EyQCV FVbk9Q/9FmTp6T4kwfzSytEYe/KGgw8lBt2K0MT82HZIsHGboiNcvO2A5a8G1GHZ BXpz9hiIhlumRzCAIh4N60n0DY5Ck3ZbzL4WyhcCGii5fTxdfcWRIk3hSM27/NCe 2lmHK4wIAOvh3c31oF3jNAupdnawb2IxnHs93dTZ+Bs/8aY/bsA9YxIFUVvWBVdY GkRILwQMAyk0hiGD3TJ8inxtAYy6e78b1koCsD2lsFCNGgvw8e2a36WxbA7FObnX ILD4dgoZRYuQGcRKJu7Ir2pXDrpe4TbtSwlGT06tKXdetQjNIqyv4X2Fscfuy8qt pG4uPpG0uSk1Icbc2h+w1ZtQGzsPBGsxy6We5gcQLEMhxSEpaZEqApdI/O3WxYS8 NN3Apd6StA70HlPiJF7AR2+VRQind51w9F7vBBotCCYXRUT8PEx74/COBZV/eZXC TzVQO7k+WIue+OEOHk5d7EHllM2mNJDY9smRSdMAKvoxseHO2acaw4WyI4T6ayJF wfFAbGTXezixYqZ6tJI7O1+9DN/34WoQIO28wUweXMMDAwjzI6iQDB6B9X7LuK8g RuJTJkSBYSqQVloXerSXDiRRA218/d52rnl5QL7IqapymKjM2fwvtAzIElJZmT9G N2Sg4+BlvM/OxRGjOkznz0RHJf4FeRpy/EWT9RlMSACgSPzIZyQ= =byyI -----END PGP SIGNATURE----- Merge tag 'clk-imx-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/abelvesa/linux into clk-imx2 Pull i.MX clk driver updates from Abel Vesa: - Use clk_hw pointer instead of fw_name for acm_aud_clk[0-1]_sel clocks on i.MX8Q as parents in ACM provider - Add i.MX95 NETCMIX support to the block control provider - Fix parents for ENETx_REF_SEL clocks on i.MX6UL * tag 'clk-imx-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/abelvesa/linux: clk: imx6ul: fix clock parent for IMX6UL_CLK_ENETx_REF_SEL clk: imx95: enable the clock of NETCMIX block control dt-bindings: clock: add RMII clock selection dt-bindings: clock: add i.MX95 NETCMIX block control clk: imx: imx8: Use clk_hw pointer for self registered clock in clk_parent_data
This commit is contained in:
commit
9395f3d21d
|
|
@ -16,6 +16,7 @@ properties:
|
|||
- nxp,imx95-lvds-csr
|
||||
- nxp,imx95-display-csr
|
||||
- nxp,imx95-camera-csr
|
||||
- nxp,imx95-netcmix-blk-ctrl
|
||||
- nxp,imx95-vpu-csr
|
||||
- const: syscon
|
||||
|
||||
|
|
|
|||
|
|
@ -542,8 +542,8 @@ static void __init imx6ul_clocks_init(struct device_node *ccm_node)
|
|||
|
||||
clk_set_parent(hws[IMX6UL_CLK_ENFC_SEL]->clk, hws[IMX6UL_CLK_PLL2_PFD2]->clk);
|
||||
|
||||
clk_set_parent(hws[IMX6UL_CLK_ENET1_REF_SEL]->clk, hws[IMX6UL_CLK_ENET_REF]->clk);
|
||||
clk_set_parent(hws[IMX6UL_CLK_ENET2_REF_SEL]->clk, hws[IMX6UL_CLK_ENET2_REF]->clk);
|
||||
clk_set_parent(hws[IMX6UL_CLK_ENET1_REF_SEL]->clk, hws[IMX6UL_CLK_ENET1_REF_125M]->clk);
|
||||
clk_set_parent(hws[IMX6UL_CLK_ENET2_REF_SEL]->clk, hws[IMX6UL_CLK_ENET2_REF_125M]->clk);
|
||||
|
||||
imx_register_uart_clocks();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,10 +54,12 @@ struct clk_imx8_acm_sel {
|
|||
* struct imx8_acm_soc_data - soc specific data
|
||||
* @sels: pointer to struct clk_imx8_acm_sel
|
||||
* @num_sels: numbers of items
|
||||
* @mclk_sels: pointer to imx8qm/qxp/dxl_mclk_sels
|
||||
*/
|
||||
struct imx8_acm_soc_data {
|
||||
struct clk_imx8_acm_sel *sels;
|
||||
unsigned int num_sels;
|
||||
struct clk_parent_data *mclk_sels;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -111,11 +113,14 @@ static const struct clk_parent_data imx8qm_mclk_out_sels[] = {
|
|||
{ .fw_name = "sai6_rx_bclk" },
|
||||
};
|
||||
|
||||
static const struct clk_parent_data imx8qm_mclk_sels[] = {
|
||||
#define ACM_AUD_CLK0_SEL_INDEX 2
|
||||
#define ACM_AUD_CLK1_SEL_INDEX 3
|
||||
|
||||
static struct clk_parent_data imx8qm_mclk_sels[] = {
|
||||
{ .fw_name = "aud_pll_div_clk0_lpcg_clk" },
|
||||
{ .fw_name = "aud_pll_div_clk1_lpcg_clk" },
|
||||
{ .fw_name = "acm_aud_clk0_sel" },
|
||||
{ .fw_name = "acm_aud_clk1_sel" },
|
||||
{ }, /* clk_hw pointer of "acm_aud_clk0_sel" */
|
||||
{ }, /* clk_hw pointer of "acm_aud_clk1_sel" */
|
||||
};
|
||||
|
||||
static const struct clk_parent_data imx8qm_asrc_mux_clk_sels[] = {
|
||||
|
|
@ -176,11 +181,11 @@ static const struct clk_parent_data imx8qxp_mclk_out_sels[] = {
|
|||
{ .fw_name = "sai4_rx_bclk" },
|
||||
};
|
||||
|
||||
static const struct clk_parent_data imx8qxp_mclk_sels[] = {
|
||||
static struct clk_parent_data imx8qxp_mclk_sels[] = {
|
||||
{ .fw_name = "aud_pll_div_clk0_lpcg_clk" },
|
||||
{ .fw_name = "aud_pll_div_clk1_lpcg_clk" },
|
||||
{ .fw_name = "acm_aud_clk0_sel" },
|
||||
{ .fw_name = "acm_aud_clk1_sel" },
|
||||
{ }, /* clk_hw pointer of "acm_aud_clk0_sel" */
|
||||
{ }, /* clk_hw pointer of "acm_aud_clk1_sel" */
|
||||
};
|
||||
|
||||
static struct clk_imx8_acm_sel imx8qxp_sels[] = {
|
||||
|
|
@ -228,11 +233,11 @@ static const struct clk_parent_data imx8dxl_mclk_out_sels[] = {
|
|||
{ .index = -1 },
|
||||
};
|
||||
|
||||
static const struct clk_parent_data imx8dxl_mclk_sels[] = {
|
||||
static struct clk_parent_data imx8dxl_mclk_sels[] = {
|
||||
{ .fw_name = "aud_pll_div_clk0_lpcg_clk" },
|
||||
{ .fw_name = "aud_pll_div_clk1_lpcg_clk" },
|
||||
{ .fw_name = "acm_aud_clk0_sel" },
|
||||
{ .fw_name = "acm_aud_clk1_sel" },
|
||||
{ }, /* clk_hw pointer of "acm_aud_clk0_sel" */
|
||||
{ }, /* clk_hw pointer of "acm_aud_clk1_sel" */
|
||||
};
|
||||
|
||||
static struct clk_imx8_acm_sel imx8dxl_sels[] = {
|
||||
|
|
@ -375,6 +380,18 @@ static int imx8_acm_clk_probe(struct platform_device *pdev)
|
|||
imx_check_clk_hws(hws, IMX_ADMA_ACM_CLK_END);
|
||||
goto err_clk_register;
|
||||
}
|
||||
|
||||
/*
|
||||
* The IMX_ADMA_ACM_AUD_CLK0_SEL and IMX_ADMA_ACM_AUD_CLK1_SEL are
|
||||
* registered first. After registration, update the clk_hw pointer
|
||||
* to imx8qm/qxp/dxl_mclk_sels structures.
|
||||
*/
|
||||
if (sels[i].clkid == IMX_ADMA_ACM_AUD_CLK0_SEL)
|
||||
priv->soc_data->mclk_sels[ACM_AUD_CLK0_SEL_INDEX].hw =
|
||||
hws[IMX_ADMA_ACM_AUD_CLK0_SEL];
|
||||
if (sels[i].clkid == IMX_ADMA_ACM_AUD_CLK1_SEL)
|
||||
priv->soc_data->mclk_sels[ACM_AUD_CLK1_SEL_INDEX].hw =
|
||||
hws[IMX_ADMA_ACM_AUD_CLK1_SEL];
|
||||
}
|
||||
|
||||
ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_hw_data);
|
||||
|
|
@ -406,16 +423,19 @@ static void imx8_acm_clk_remove(struct platform_device *pdev)
|
|||
static const struct imx8_acm_soc_data imx8qm_acm_data = {
|
||||
.sels = imx8qm_sels,
|
||||
.num_sels = ARRAY_SIZE(imx8qm_sels),
|
||||
.mclk_sels = imx8qm_mclk_sels,
|
||||
};
|
||||
|
||||
static const struct imx8_acm_soc_data imx8qxp_acm_data = {
|
||||
.sels = imx8qxp_sels,
|
||||
.num_sels = ARRAY_SIZE(imx8qxp_sels),
|
||||
.mclk_sels = imx8qxp_mclk_sels,
|
||||
};
|
||||
|
||||
static const struct imx8_acm_soc_data imx8dxl_acm_data = {
|
||||
.sels = imx8dxl_sels,
|
||||
.num_sels = ARRAY_SIZE(imx8dxl_sels),
|
||||
.mclk_sels = imx8dxl_mclk_sels,
|
||||
};
|
||||
|
||||
static const struct of_device_id imx8_acm_match[] = {
|
||||
|
|
|
|||
|
|
@ -248,6 +248,35 @@ static const struct imx95_blk_ctl_dev_data dispmix_csr_dev_data = {
|
|||
.clk_reg_offset = 0,
|
||||
};
|
||||
|
||||
static const struct imx95_blk_ctl_clk_dev_data netxmix_clk_dev_data[] = {
|
||||
[IMX95_CLK_NETCMIX_ENETC0_RMII] = {
|
||||
.name = "enetc0_rmii_sel",
|
||||
.parent_names = (const char *[]){"ext_enetref", "enetref"},
|
||||
.num_parents = 2,
|
||||
.reg = 4,
|
||||
.bit_idx = 5,
|
||||
.bit_width = 1,
|
||||
.type = CLK_MUX,
|
||||
.flags = CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT,
|
||||
},
|
||||
[IMX95_CLK_NETCMIX_ENETC1_RMII] = {
|
||||
.name = "enetc1_rmii_sel",
|
||||
.parent_names = (const char *[]){"ext_enetref", "enetref"},
|
||||
.num_parents = 2,
|
||||
.reg = 4,
|
||||
.bit_idx = 10,
|
||||
.bit_width = 1,
|
||||
.type = CLK_MUX,
|
||||
.flags = CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct imx95_blk_ctl_dev_data netcmix_dev_data = {
|
||||
.num_clks = ARRAY_SIZE(netxmix_clk_dev_data),
|
||||
.clk_dev_data = netxmix_clk_dev_data,
|
||||
.clk_reg_offset = 0,
|
||||
};
|
||||
|
||||
static int imx95_bc_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -419,6 +448,7 @@ static const struct of_device_id imx95_bc_of_match[] = {
|
|||
{ .compatible = "nxp,imx95-lvds-csr", .data = &lvds_csr_dev_data },
|
||||
{ .compatible = "nxp,imx95-display-csr", .data = &dispmix_csr_dev_data },
|
||||
{ .compatible = "nxp,imx95-vpu-csr", .data = &vpublk_dev_data },
|
||||
{ .compatible = "nxp,imx95-netcmix-blk-ctrl", .data = &netcmix_dev_data},
|
||||
{ /* Sentinel */ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, imx95_bc_of_match);
|
||||
|
|
|
|||
|
|
@ -25,4 +25,7 @@
|
|||
#define IMX95_CLK_DISPMIX_ENG0_SEL 0
|
||||
#define IMX95_CLK_DISPMIX_ENG1_SEL 1
|
||||
|
||||
#define IMX95_CLK_NETCMIX_ENETC0_RMII 0
|
||||
#define IMX95_CLK_NETCMIX_ENETC1_RMII 1
|
||||
|
||||
#endif /* __DT_BINDINGS_CLOCK_IMX95_H */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user