[U-Boot] [PATCH v2 04/12] ARM: kirkwood: switch to using mvebu mbus
Stefan Roese
sr at denx.de
Thu Mar 7 11:34:11 UTC 2019
On 07.03.19 09:27, Chris Packham wrote:
> The mvebu mbus code already had most of the support required for
> kirkwood. The only difference is that unlike the other mvebu targets
> kirkwood doesn't have a bridge control block so the code related to
> managing that needs to be compiled out.
>
> Signed-off-by: Chris Packham <judge.packham at gmail.com>
> ---
>
> arch/arm/mach-kirkwood/cpu.c | 33 ++++++++++++++++++++---
> arch/arm/mach-kirkwood/include/mach/cpu.h | 11 ++++++++
> arch/arm/mach-mvebu/Makefile | 1 +
> arch/arm/mach-mvebu/mbus.c | 6 +++++
> 4 files changed, 48 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-kirkwood/cpu.c b/arch/arm/mach-kirkwood/cpu.c
> index 85c7f5903d94..311c5d50e2f9 100644
> --- a/arch/arm/mach-kirkwood/cpu.c
> +++ b/arch/arm/mach-kirkwood/cpu.c
> @@ -110,6 +110,32 @@ int kw_config_adr_windows(void)
> return 0;
> }
>
> +static struct mbus_win windows[] = {
> + /* Window 0: PCIE MEM address space */
> + { KW_DEFADR_PCI_MEM, 1024 * 1024 * 256,
> + KWCPU_TARGET_PCIE, KWCPU_ATTR_PCIE_MEM },
> +
> + /* Window 1: PCIE IO address space */
> + { KW_DEFADR_PCI_IO, 1024 * 64,
> + KWCPU_TARGET_PCIE, KWCPU_ATTR_PCIE_IO },
> +
> + /* Window 2: NAND Flash address space */
> + { KW_DEFADR_NANDF, 1024 * 1024 * 128,
> + KWCPU_TARGET_MEMORY, KWCPU_ATTR_NANDFLASH },
> +
> + /* Window 3: SPI Flash address space */
> + { KW_DEFADR_SPIF, 1024 * 1024 * 128,
> + KWCPU_TARGET_MEMORY, KWCPU_ATTR_SPIFLASH },
> +
> + /* Window 4: BOOT Memory address space */
> + { KW_DEFADR_BOOTROM, 1024 * 1024 * 128,
> + KWCPU_TARGET_MEMORY, KWCPU_ATTR_BOOTROM },
> +
> + /* Window 5: Security SRAM address space */
> + { KW_DEFADR_SASRAM, 1024 * 64,
> + KWCPU_TARGET_SASRAM, KWCPU_ATTR_SASRAM },
> +};
> +
> /*
> * SYSRSTn Duration Counter Support
> *
> @@ -221,15 +247,13 @@ int arch_cpu_init(void)
> struct kwcpu_registers *cpureg =
> (struct kwcpu_registers *)KW_CPU_REG_BASE;
>
> - /* Linux expects` the internal registers to be at 0xf1000000 */
> + /* Linux expects the internal registers to be at 0xf1000000 */
> writel(KW_REGS_PHY_BASE, KW_OFFSET_REG);
>
> /* Enable and invalidate L2 cache in write through mode */
> writel(readl(&cpureg->l2_cfg) | 0x18, &cpureg->l2_cfg);
> invalidate_l2_cache();
>
> - kw_config_adr_windows();
> -
> #ifdef CONFIG_KIRKWOOD_RGMII_PAD_1V8
> /*
> * Configures the I/O voltage of the pads connected to Egigabit
> @@ -295,6 +319,9 @@ int arch_misc_init(void)
> temp = get_cr();
> set_cr(temp & ~CR_V);
>
> + /* Configure mbus windows */
> + mvebu_mbus_probe(windows, ARRAY_SIZE(windows));
> +
> /* checks and execute resset to factory event */
> kw_sysrst_check();
>
> diff --git a/arch/arm/mach-kirkwood/include/mach/cpu.h b/arch/arm/mach-kirkwood/include/mach/cpu.h
> index c35cace844ae..3d6b15568a8a 100644
> --- a/arch/arm/mach-kirkwood/include/mach/cpu.h
> +++ b/arch/arm/mach-kirkwood/include/mach/cpu.h
> @@ -68,6 +68,13 @@ enum kwcpu_attrib {
> #define KW_DEFADR_SPIF 0xE8000000
> #define KW_DEFADR_BOOTROM 0xF8000000
>
> +struct mbus_win {
> + u32 base;
> + u32 size;
> + u8 target;
> + u8 attr;
> +};
> +
> /*
> * read feroceon/sheeva core extra feature register
> * using co-proc instruction
> @@ -134,6 +141,9 @@ struct kwgpio_registers {
> u32 irq_level;
> };
>
> +/* Needed for dynamic (board-specific) mbus configuration */
> +extern struct mvebu_mbus_state mbus_state;
> +
> /*
> * functions
> */
> @@ -141,6 +151,7 @@ unsigned int mvebu_sdram_bar(enum memory_bank bank);
> unsigned int mvebu_sdram_bs(enum memory_bank bank);
> void mvebu_sdram_size_adjust(enum memory_bank bank);
> int kw_config_adr_windows(void);
> +int mvebu_mbus_probe(struct mbus_win windows[], int count);
> void mvebu_config_gpio(unsigned int gpp0_oe_val, unsigned int gpp1_oe_val,
> unsigned int gpp0_oe, unsigned int gpp1_oe);
> int kw_config_mpp(unsigned int mpp0_7, unsigned int mpp8_15,
> diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile
> index ee2eca913484..c0274a6f09aa 100644
> --- a/arch/arm/mach-mvebu/Makefile
> +++ b/arch/arm/mach-mvebu/Makefile
> @@ -14,6 +14,7 @@ ifdef CONFIG_KIRKWOOD
>
> obj-y = dram.o
> obj-y += gpio.o
> +obj-y += mbus.o
> obj-y += timer.o
>
> else # CONFIG_KIRKWOOD
> diff --git a/arch/arm/mach-mvebu/mbus.c b/arch/arm/mach-mvebu/mbus.c
> index df4c5cb2d718..9b2c57348266 100644
> --- a/arch/arm/mach-mvebu/mbus.c
> +++ b/arch/arm/mach-mvebu/mbus.c
> @@ -405,6 +405,7 @@ int mvebu_mbus_del_window(phys_addr_t base, size_t size)
> return 0;
> }
>
> +#ifndef CONFIG_KIRKWOOD
> static void mvebu_mbus_get_lowest_base(struct mvebu_mbus_state *mbus,
> phys_addr_t *base)
> {
> @@ -428,7 +429,9 @@ static void mvebu_mbus_get_lowest_base(struct mvebu_mbus_state *mbus,
> *base = wbase;
> }
> }
> +#endif
>
> +#ifndef CONFIG_KIRKWOOD
> static void mvebu_config_mbus_bridge(struct mvebu_mbus_state *mbus)
> {
> phys_addr_t base;
> @@ -451,6 +454,7 @@ static void mvebu_config_mbus_bridge(struct mvebu_mbus_state *mbus)
> val = (size / (64 << 10)) - 1;
> writel((val << 16) | 0x1, MBUS_BRIDGE_WIN_CTRL_REG);
> }
> +#endif
Can't you combine those two #ifndef's above into one?
Other than that looks good:
Reviewed-by: Stefan Roese <sr at denx.de>
Thanks,
Stefan
More information about the U-Boot
mailing list