| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | // SPDX-License-Identifier: GPL-2.0+/* * (C) Copyright 2010 * Marvell Semiconductor <www.marvell.com> * Written-by: Prafulla Wadaskar <prafulla@marvell.com>, */#include <common.h>#include <asm/io.h>#include <mvmfp.h>#include <asm/arch/mfp.h>/* * mfp_config * * On most of Marvell SoCs (ex. ARMADA100) there is Multi-Funtion-Pin * configuration registers to configure each GPIO/Function pin on the * SoC. * * This function reads the array of values for * MFPR_X registers and programms them into respective * Multi-Function Pin registers. * It supports - Alternate Function Selection programming. * * Whereas, * The Configureation value is constructed using MFP() * array consists of 32bit values as defined in MFP(xx,xx..) macro */void mfp_config(u32 *mfp_cfgs){	u32 *p_mfpr = NULL;	u32 cfg_val, val;	do {		cfg_val = *mfp_cfgs++;		/* exit if End of configuration table detected */		if (cfg_val == MFP_EOC)			break;		p_mfpr = (u32 *)(MV_MFPR_BASE				+ MFP_REG_GET_OFFSET(cfg_val));		/* Write a mfg register as per configuration */		val = 0;		if (cfg_val & MFP_VALUE_MASK)			val |= cfg_val & MFP_VALUE_MASK;		writel(val, p_mfpr);	} while (1);	/*	 * perform a read-back of any MFPR register to make sure the	 * previous writings are finished	 */	readl(p_mfpr);}
 |