Skip to content
Snippets Groups Projects
Commit ce4e9ff4 authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

ARM: uniphier: move NAND reset assertion to U-Boot proper from SPL


The comment /* deassert reset */ is wrong. It asserts the reset.

It no longer needs to stay in SPL. The NAND controller reset is
handled  in the driver. So, this assert can be moved to the
board_init() of U-Boot proper.

Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
parent ef5c7d6d
No related branches found
No related tags found
No related merge requests found
...@@ -22,6 +22,7 @@ endif ...@@ -22,6 +22,7 @@ endif
obj-$(CONFIG_MICRO_SUPPORT_CARD) += micro-support-card.o obj-$(CONFIG_MICRO_SUPPORT_CARD) += micro-support-card.o
obj-y += pinctrl-glue.o obj-y += pinctrl-glue.o
obj-$(CONFIG_MMC) += mmc-first-dev.o obj-$(CONFIG_MMC) += mmc-first-dev.o
obj-$(CONFIG_NAND_DENALI) += nand-reset.o
obj-y += fdt-fixup.o obj-y += fdt-fixup.o
endif endif
......
...@@ -141,6 +141,10 @@ int board_init(void) ...@@ -141,6 +141,10 @@ int board_init(void)
support_card_late_init(); support_card_late_init();
led_puts("U4");
uniphier_nand_reset_assert();
led_puts("Uboo"); led_puts("Uboo");
return 0; return 0;
......
...@@ -15,13 +15,6 @@ void uniphier_ld4_early_clk_init(void) ...@@ -15,13 +15,6 @@ void uniphier_ld4_early_clk_init(void)
{ {
u32 tmp; u32 tmp;
/* deassert reset */
if (spl_boot_device() != BOOT_DEVICE_NAND) {
tmp = readl(sc_base + SC_RSTCTRL);
tmp &= ~SC_RSTCTRL_NRST_NAND;
writel(tmp, sc_base + SC_RSTCTRL);
};
/* provide clocks */ /* provide clocks */
tmp = readl(sc_base + SC_CLKCTRL); tmp = readl(sc_base + SC_CLKCTRL);
tmp |= SC_CLKCTRL_CEN_SBC | SC_CLKCTRL_CEN_PERI; tmp |= SC_CLKCTRL_CEN_SBC | SC_CLKCTRL_CEN_PERI;
......
...@@ -101,6 +101,14 @@ unsigned int uniphier_boot_device_raw(void); ...@@ -101,6 +101,14 @@ unsigned int uniphier_boot_device_raw(void);
int uniphier_have_internal_stm(void); int uniphier_have_internal_stm(void);
int uniphier_boot_from_backend(void); int uniphier_boot_from_backend(void);
int uniphier_pin_init(const char *pinconfig_name); int uniphier_pin_init(const char *pinconfig_name);
#ifdef CONFIG_NAND_DENALI
void uniphier_nand_reset_assert(void);
#else
static inline void uniphier_nand_reset_assert(void)
{
}
#endif
#ifdef CONFIG_ARM64 #ifdef CONFIG_ARM64
void uniphier_mem_map_init(unsigned long dram_base, unsigned long dram_size); void uniphier_mem_map_init(unsigned long dram_base, unsigned long dram_size);
#else #else
......
// SPDX-License-Identifier: GPL-2.0 or later
/*
* Copyright (C) 2020 Socionext Inc.
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
*/
#include <linux/errno.h>
#include <dm.h>
#include <dm/uclass-internal.h>
#include <reset.h>
#include "init.h"
/*
* Assert the Denali NAND controller reset if found.
*
* On LD4, the bootstrap process starts running after power-on reset regardless
* of the boot mode, here the pin-mux is not necessarily set up for NAND, then
* the controller is stuck. Assert the controller reset here, and should be
* deasserted in the driver after the pin-mux is correctly handled. For other
* SoCs, the bootstrap runs only when the boot mode selects ONFi, but it is yet
* effective when the boot swap is on. So, the reset should be asserted anyway.
*/
void uniphier_nand_reset_assert(void)
{
struct udevice *dev;
struct reset_ctl_bulk resets;
int ret;
ret = uclass_find_first_device(UCLASS_MTD, &dev);
if (ret || !dev)
return;
/* make sure this is the Denali NAND controller */
if (strcmp(dev->driver->name, "denali-nand-dt"))
return;
ret = reset_get_bulk(dev, &resets);
if (ret)
return;
reset_assert_bulk(&resets);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment