board: ti: j721s2: Enable OSPI NAND SPL fixup

On J721S2, SW3.1 (WKUP_GPIO0_6) is used for selecting between
OSPI NOR and OSPI NAND flash. Read the GPIO state, to perform
correct enable/disable operation on the fdt, for a valid flash
discovery.

Signed-off-by: Apurva Nandan <a-nandan@ti.com>
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
This commit is contained in:
Apurva Nandan 2023-06-08 16:55:15 +05:30 committed by Vignesh Raghavendra
parent ac4935ce58
commit 2a3ea639e5
1 changed files with 46 additions and 0 deletions

View File

@ -73,6 +73,49 @@ int dram_init_banksize(void)
return 0;
}
#if CONFIG_IS_ENABLED(DM_GPIO) && CONFIG_IS_ENABLED(OF_LIBFDT)
/* Enables the spi-nand dts node, if onboard mux is set to spinand */
static void __maybe_unused detect_enable_spinand(void *blob)
{
struct gpio_desc desc = {0};
char *ospi_mux_sel_gpio = "6";
int offset;
if (dm_gpio_lookup_name(ospi_mux_sel_gpio, &desc))
return;
if (dm_gpio_request(&desc, ospi_mux_sel_gpio))
return;
if (dm_gpio_set_dir_flags(&desc, GPIOD_IS_IN))
return;
if (dm_gpio_get_value(&desc)) {
offset = fdt_node_offset_by_compatible(blob, -1, "spi-nand");
fdt_status_okay(blob, offset);
offset = fdt_first_subnode(blob,
fdt_parent_offset(blob, offset));
while (offset > 0) {
if (!fdt_node_check_compatible(blob, offset,
"jedec,spi-nor"))
fdt_status_disabled(blob, offset);
offset = fdt_next_subnode(blob, offset);
}
}
}
#endif
#if defined(CONFIG_SPL_BUILD) && (defined(CONFIG_TARGET_J721S2_A72_EVM) || \
defined(CONFIG_TARGET_J721S2_R5_EVM))
void spl_perform_fixups(struct spl_image_info *spl_image)
{
if (IS_ENABLED(CONFIG_DM_GPIO) && IS_ENABLED(CONFIG_OF_LIBFDT))
detect_enable_spinand(spl_image->fdt_addr);
}
#endif
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
int ft_board_setup(void *blob, struct bd_info *bd)
{
@ -85,6 +128,9 @@ int ft_board_setup(void *blob, struct bd_info *bd)
if (ret)
printf("%s: fixing up msmc ram failed %d\n", __func__, ret);
if (IS_ENABLED(CONFIG_DM_GPIO) && IS_ENABLED(CONFIG_OF_LIBFDT))
detect_enable_spinand(blob);
return ret;
}
#endif