mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-20 11:55:03 +00:00
imx: imx8mp: disable fused IP for UltraLite
Beside the fused modules on iMX8MP Lite, this part has also fused GPU3D/2D, LVDS and MIPI DSI. So we have to disable them for kernel and also disable MIPI DSI in u-boot DTS for splash screen at runtime. Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
parent
36bfd71c92
commit
35bb60787b
1 changed files with 142 additions and 5 deletions
|
@ -911,6 +911,90 @@ static int low_drive_gpu_freq(void *blob)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static bool check_remote_endpoint(void *blob, const char *ep1, const char *ep2)
|
||||||
|
{
|
||||||
|
int lookup_node;
|
||||||
|
int nodeoff;
|
||||||
|
|
||||||
|
nodeoff = fdt_path_offset(blob, ep1);
|
||||||
|
if (nodeoff) {
|
||||||
|
lookup_node = fdtdec_lookup_phandle(blob, nodeoff, "remote-endpoint");
|
||||||
|
nodeoff = fdt_path_offset(blob, ep2);
|
||||||
|
|
||||||
|
if (nodeoff > 0 && nodeoff == lookup_node)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int disable_dsi_lcdif_nodes(void *blob)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
static const char * const dsi_path_8mp[] = {
|
||||||
|
"/soc@0/bus@32c00000/mipi_dsi@32e60000"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * const lcdif_path_8mp[] = {
|
||||||
|
"/soc@0/bus@32c00000/lcd-controller@32e80000"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * const lcdif_ep_path_8mp[] = {
|
||||||
|
"/soc@0/bus@32c00000/lcd-controller@32e80000/port@0/endpoint"
|
||||||
|
};
|
||||||
|
static const char * const dsi_ep_path_8mp[] = {
|
||||||
|
"/soc@0/bus@32c00000/mipi_dsi@32e60000/port@0/endpoint"
|
||||||
|
};
|
||||||
|
|
||||||
|
ret = disable_fdt_nodes(blob, dsi_path_8mp, ARRAY_SIZE(dsi_path_8mp));
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (check_remote_endpoint(blob, dsi_ep_path_8mp[0], lcdif_ep_path_8mp[0])) {
|
||||||
|
/* Disable lcdif node */
|
||||||
|
return disable_fdt_nodes(blob, lcdif_path_8mp, ARRAY_SIZE(lcdif_path_8mp));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int disable_lvds_lcdif_nodes(void *blob)
|
||||||
|
{
|
||||||
|
int ret, i;
|
||||||
|
|
||||||
|
static const char * const ldb_path_8mp[] = {
|
||||||
|
"/soc@0/bus@32c00000/ldb@32ec005c",
|
||||||
|
"/soc@0/bus@32c00000/phy@32ec0128"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * const lcdif_path_8mp[] = {
|
||||||
|
"/soc@0/bus@32c00000/lcd-controller@32e90000"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * const lcdif_ep_path_8mp[] = {
|
||||||
|
"/soc@0/bus@32c00000/lcd-controller@32e90000/port@0/endpoint@0",
|
||||||
|
"/soc@0/bus@32c00000/lcd-controller@32e90000/port@0/endpoint@1"
|
||||||
|
};
|
||||||
|
static const char * const ldb_ep_path_8mp[] = {
|
||||||
|
"/soc@0/bus@32c00000/ldb@32ec005c/lvds-channel@0/port@0/endpoint",
|
||||||
|
"/soc@0/bus@32c00000/ldb@32ec005c/lvds-channel@1/port@0/endpoint"
|
||||||
|
};
|
||||||
|
|
||||||
|
ret = disable_fdt_nodes(blob, ldb_path_8mp, ARRAY_SIZE(ldb_path_8mp));
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(ldb_ep_path_8mp); i++) {
|
||||||
|
if (check_remote_endpoint(blob, ldb_ep_path_8mp[i], lcdif_ep_path_8mp[i])) {
|
||||||
|
/* Disable lcdif node */
|
||||||
|
return disable_fdt_nodes(blob, lcdif_path_8mp, ARRAY_SIZE(lcdif_path_8mp));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int disable_gpu_nodes(void *blob)
|
int disable_gpu_nodes(void *blob)
|
||||||
{
|
{
|
||||||
static const char * const nodes_path_8mn[] = {
|
static const char * const nodes_path_8mn[] = {
|
||||||
|
@ -918,7 +1002,15 @@ int disable_gpu_nodes(void *blob)
|
||||||
"/soc@/gpu@38000000"
|
"/soc@/gpu@38000000"
|
||||||
};
|
};
|
||||||
|
|
||||||
return disable_fdt_nodes(blob, nodes_path_8mn, ARRAY_SIZE(nodes_path_8mn));
|
static const char * const nodes_path_8mp[] = {
|
||||||
|
"/gpu3d@38000000",
|
||||||
|
"/gpu2d@38008000"
|
||||||
|
};
|
||||||
|
|
||||||
|
if (is_imx8mp())
|
||||||
|
return disable_fdt_nodes(blob, nodes_path_8mp, ARRAY_SIZE(nodes_path_8mp));
|
||||||
|
else
|
||||||
|
return disable_fdt_nodes(blob, nodes_path_8mn, ARRAY_SIZE(nodes_path_8mn));
|
||||||
}
|
}
|
||||||
|
|
||||||
int disable_npu_nodes(void *blob)
|
int disable_npu_nodes(void *blob)
|
||||||
|
@ -1174,16 +1266,27 @@ usb_modify_speed:
|
||||||
disable_cpu_nodes(blob, 3);
|
disable_cpu_nodes(blob, 3);
|
||||||
|
|
||||||
#elif defined(CONFIG_IMX8MP)
|
#elif defined(CONFIG_IMX8MP)
|
||||||
if (is_imx8mpl())
|
if (is_imx8mpul()) {
|
||||||
|
/* Disable GPU */
|
||||||
|
disable_gpu_nodes(blob);
|
||||||
|
|
||||||
|
/* Disable DSI */
|
||||||
|
disable_dsi_lcdif_nodes(blob);
|
||||||
|
|
||||||
|
/* Disable LVDS */
|
||||||
|
disable_lvds_lcdif_nodes(blob);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_imx8mpul() || is_imx8mpl())
|
||||||
disable_vpu_nodes(blob);
|
disable_vpu_nodes(blob);
|
||||||
|
|
||||||
if (is_imx8mpl() || is_imx8mp6())
|
if (is_imx8mpul() || is_imx8mpl() || is_imx8mp6())
|
||||||
disable_npu_nodes(blob);
|
disable_npu_nodes(blob);
|
||||||
|
|
||||||
if (is_imx8mpl())
|
if (is_imx8mpul() || is_imx8mpl())
|
||||||
disable_isp_nodes(blob);
|
disable_isp_nodes(blob);
|
||||||
|
|
||||||
if (is_imx8mpl() || is_imx8mp6())
|
if (is_imx8mpul() || is_imx8mpl() || is_imx8mp6())
|
||||||
disable_dsp_nodes(blob);
|
disable_dsp_nodes(blob);
|
||||||
|
|
||||||
if (is_imx8mpd())
|
if (is_imx8mpd())
|
||||||
|
@ -1194,6 +1297,40 @@ usb_modify_speed:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF_BOARD_FIXUP
|
||||||
|
#ifndef CONFIG_SPL_BUILD
|
||||||
|
int board_fix_fdt(void *fdt)
|
||||||
|
{
|
||||||
|
if (is_imx8mpul()) {
|
||||||
|
int i = 0;
|
||||||
|
int nodeoff, ret;
|
||||||
|
const char *status = "disabled";
|
||||||
|
static const char * const dsi_nodes[] = {
|
||||||
|
"/soc@0/bus@32c00000/mipi_dsi@32e60000",
|
||||||
|
"/soc@0/bus@32c00000/lcd-controller@32e80000",
|
||||||
|
"/dsi-host"
|
||||||
|
};
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(dsi_nodes); i++) {
|
||||||
|
nodeoff = fdt_path_offset(fdt, dsi_nodes[i]);
|
||||||
|
if (nodeoff > 0) {
|
||||||
|
set_status:
|
||||||
|
ret = fdt_setprop(fdt, nodeoff, "status", status,
|
||||||
|
strlen(status) + 1);
|
||||||
|
if (ret == -FDT_ERR_NOSPACE) {
|
||||||
|
ret = fdt_increase_size(fdt, 512);
|
||||||
|
if (!ret)
|
||||||
|
goto set_status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(SYSRESET)
|
#if !CONFIG_IS_ENABLED(SYSRESET)
|
||||||
void reset_cpu(void)
|
void reset_cpu(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue