diff options
Diffstat (limited to 'arch')
128 files changed, 1748 insertions, 1210 deletions
| diff --git a/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx23.cfg b/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx23.cfg new file mode 100644 index 000000000..811876736 --- /dev/null +++ b/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx23.cfg @@ -0,0 +1,6 @@ +SECTION 0x0 BOOTABLE + TAG LAST + LOAD     0x0        spl/u-boot-spl.bin + CALL     0x14       0x0 + LOAD     0x40000100 u-boot.bin + CALL     0x40000100 0x0 diff --git a/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx28.cfg b/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx28.cfg new file mode 100644 index 000000000..ea772f0c8 --- /dev/null +++ b/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx28.cfg @@ -0,0 +1,8 @@ +SECTION 0x0 BOOTABLE + TAG LAST + LOAD     0x0        spl/u-boot-spl.bin + LOAD IVT 0x8000     0x14 + CALL HAB 0x8000     0x0 + LOAD     0x40000100 u-boot.bin + LOAD IVT 0x8000     0x40000100 + CALL HAB 0x8000     0x0 diff --git a/arch/arm/cpu/arm926ejs/mxs/spl_power_init.c b/arch/arm/cpu/arm926ejs/mxs/spl_power_init.c index e3b6cd95f..f35795905 100644 --- a/arch/arm/cpu/arm926ejs/mxs/spl_power_init.c +++ b/arch/arm/cpu/arm926ejs/mxs/spl_power_init.c @@ -36,7 +36,7 @@ static void mxs_power_clock2pll(void)  			CLKCTRL_CLKSEQ_BYPASS_CPU);  } -static void mxs_power_clear_auto_restart(void) +static void mxs_power_set_auto_restart(void)  {  	struct mxs_rtc_regs *rtc_regs =  		(struct mxs_rtc_regs *)MXS_RTC_BASE; @@ -49,10 +49,7 @@ static void mxs_power_clear_auto_restart(void)  	while (readl(&rtc_regs->hw_rtc_ctrl) & RTC_CTRL_CLKGATE)  		; -	/* -	 * Due to the hardware design bug of mx28 EVK-A -	 * we need to set the AUTO_RESTART bit. -	 */ +	/* Do nothing if flag already set */  	if (readl(&rtc_regs->hw_rtc_persistent0) & RTC_PERSISTENT0_AUTO_RESTART)  		return; @@ -911,7 +908,7 @@ void mxs_power_init(void)  	mxs_ungate_power();  	mxs_power_clock2xtal(); -	mxs_power_clear_auto_restart(); +	mxs_power_set_auto_restart();  	mxs_power_set_linreg();  	mxs_power_setup_5v_detect(); diff --git a/arch/arm/cpu/armv7/at91/sama5d3_devices.c b/arch/arm/cpu/armv7/at91/sama5d3_devices.c index 4a3fca56a..e55e1c660 100644 --- a/arch/arm/cpu/armv7/at91/sama5d3_devices.c +++ b/arch/arm/cpu/armv7/at91/sama5d3_devices.c @@ -144,6 +144,30 @@ void at91_macb_hw_init(void)  	/* Enable clock */  	at91_periph_clk_enable(ATMEL_ID_EMAC);  } + +void at91_gmac_hw_init(void) +{ +	at91_set_a_periph(AT91_PIO_PORTB, 0, 0);	/* GTX0 */ +	at91_set_a_periph(AT91_PIO_PORTB, 1, 0);	/* GTX1 */ +	at91_set_a_periph(AT91_PIO_PORTB, 2, 0);	/* GTX2 */ +	at91_set_a_periph(AT91_PIO_PORTB, 3, 0);	/* GTX3 */ +	at91_set_a_periph(AT91_PIO_PORTB, 4, 0);	/* GRX0 */ +	at91_set_a_periph(AT91_PIO_PORTB, 5, 0);	/* GRX1 */ +	at91_set_a_periph(AT91_PIO_PORTB, 6, 0);	/* GRX2 */ +	at91_set_a_periph(AT91_PIO_PORTB, 7, 0);	/* GRX3 */ +	at91_set_a_periph(AT91_PIO_PORTB, 8, 0);	/* GTXCK */ +	at91_set_a_periph(AT91_PIO_PORTB, 9, 0);	/* GTXEN */ + +	at91_set_a_periph(AT91_PIO_PORTB, 11, 0);	/* GRXCK */ +	at91_set_a_periph(AT91_PIO_PORTB, 13, 0);	/* GRXER */ + +	at91_set_a_periph(AT91_PIO_PORTB, 16, 0);	/* GMDC */ +	at91_set_a_periph(AT91_PIO_PORTB, 17, 0);	/* GMDIO */ +	at91_set_a_periph(AT91_PIO_PORTB, 18, 0);	/* G125CK */ + +	/* Enable clock */ +	at91_periph_clk_enable(ATMEL_ID_GMAC); +}  #endif  #ifdef CONFIG_LCD diff --git a/arch/arm/cpu/armv7/mx5/clock.c b/arch/arm/cpu/armv7/mx5/clock.c index fbbb365cb..6bef25445 100644 --- a/arch/arm/cpu/armv7/mx5/clock.c +++ b/arch/arm/cpu/armv7/mx5/clock.c @@ -85,7 +85,7 @@ void set_usboh3_clk(void)  			MXC_CCM_CSCDR1_USBOH3_CLK_PODF(1));  } -void enable_usboh3_clk(unsigned char enable) +void enable_usboh3_clk(bool enable)  {  	unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF; @@ -122,7 +122,7 @@ void set_usb_phy_clk(void)  }  #if defined(CONFIG_MX51) -void enable_usb_phy1_clk(unsigned char enable) +void enable_usb_phy1_clk(bool enable)  {  	unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF; @@ -131,12 +131,12 @@ void enable_usb_phy1_clk(unsigned char enable)  			MXC_CCM_CCGR2_USB_PHY(cg));  } -void enable_usb_phy2_clk(unsigned char enable) +void enable_usb_phy2_clk(bool enable)  {  	/* i.MX51 has a single USB PHY clock, so do nothing here. */  }  #elif defined(CONFIG_MX53) -void enable_usb_phy1_clk(unsigned char enable) +void enable_usb_phy1_clk(bool enable)  {  	unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF; @@ -145,7 +145,7 @@ void enable_usb_phy1_clk(unsigned char enable)  			MXC_CCM_CCGR4_USB_PHY1(cg));  } -void enable_usb_phy2_clk(unsigned char enable) +void enable_usb_phy2_clk(bool enable)  {  	unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF; diff --git a/arch/arm/cpu/armv7/mx6/Makefile b/arch/arm/cpu/armv7/mx6/Makefile index c5e98582d..6d736174d 100644 --- a/arch/arm/cpu/armv7/mx6/Makefile +++ b/arch/arm/cpu/armv7/mx6/Makefile @@ -11,10 +11,11 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(SOC).o -COBJS	= soc.o clock.o +COBJS-y	= soc.o clock.o +COBJS-$(CONFIG_SECURE_BOOT)	+= hab.o -SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) -OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) +SRCS	:= $(SOBJS:.o=.S) $(COBJS-y:.o=.c) +OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS-y))  all:	$(obj).depend $(LIB) diff --git a/arch/arm/cpu/armv7/mx6/hab.c b/arch/arm/cpu/armv7/mx6/hab.c new file mode 100644 index 000000000..518777536 --- /dev/null +++ b/arch/arm/cpu/armv7/mx6/hab.c @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:    GPL-2.0+ + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/hab.h> + +/* -------- start of HAB API updates ------------*/ +#define hab_rvt_report_event ((hab_rvt_report_event_t *)HAB_RVT_REPORT_EVENT) +#define hab_rvt_report_status ((hab_rvt_report_status_t *)HAB_RVT_REPORT_STATUS) +#define hab_rvt_authenticate_image \ +	((hab_rvt_authenticate_image_t *)HAB_RVT_AUTHENTICATE_IMAGE) +#define hab_rvt_entry ((hab_rvt_entry_t *)HAB_RVT_ENTRY) +#define hab_rvt_exit ((hab_rvt_exit_t *)HAB_RVT_EXIT) +#define hab_rvt_clock_init HAB_RVT_CLOCK_INIT + +bool is_hab_enabled(void) +{ +	struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; +	struct fuse_bank *bank = &ocotp->bank[0]; +	struct fuse_bank0_regs *fuse = +		(struct fuse_bank0_regs *)bank->fuse_regs; +	uint32_t reg = readl(&fuse->cfg5); + +	return (reg & 0x2) == 0x2; +} + +void display_event(uint8_t *event_data, size_t bytes) +{ +	uint32_t i; + +	if (!(event_data && bytes > 0)) +		return; + +	for (i = 0; i < bytes; i++) { +		if (i == 0) +			printf("\t0x%02x", event_data[i]); +		else if ((i % 8) == 0) +			printf("\n\t0x%02x", event_data[i]); +		else +			printf(" 0x%02x", event_data[i]); +	} +} + +int get_hab_status(void) +{ +	uint32_t index = 0; /* Loop index */ +	uint8_t event_data[128]; /* Event data buffer */ +	size_t bytes = sizeof(event_data); /* Event size in bytes */ +	enum hab_config config = 0; +	enum hab_state state = 0; + +	if (is_hab_enabled()) +		puts("\nSecure boot enabled\n"); +	else +		puts("\nSecure boot disabled\n"); + +	/* Check HAB status */ +	if (hab_rvt_report_status(&config, &state) != HAB_SUCCESS) { +		printf("\nHAB Configuration: 0x%02x, HAB State: 0x%02x\n", +		       config, state); + +		/* Display HAB Error events */ +		while (hab_rvt_report_event(HAB_FAILURE, index, event_data, +					&bytes) == HAB_SUCCESS) { +			puts("\n"); +			printf("--------- HAB Event %d -----------------\n", +			       index + 1); +			puts("event data:\n"); +			display_event(event_data, bytes); +			puts("\n"); +			bytes = sizeof(event_data); +			index++; +		} +	} +	/* Display message if no HAB events are found */ +	else { +		printf("\nHAB Configuration: 0x%02x, HAB State: 0x%02x\n", +		       config, state); +		puts("No HAB Events Found!\n\n"); +	} +	return 0; +} + +int do_hab_status(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	if ((argc != 1)) { +		cmd_usage(cmdtp); +		return 1; +	} + +	get_hab_status(); + +	return 0; +} + +U_BOOT_CMD( +		hab_status, CONFIG_SYS_MAXARGS, 1, do_hab_status, +		"display HAB status", +		"" +	  ); diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c index 8150bffb8..a3902962b 100644 --- a/arch/arm/cpu/armv7/mx6/soc.c +++ b/arch/arm/cpu/armv7/mx6/soc.c @@ -213,6 +213,34 @@ const struct boot_mode soc_boot_modes[] = {  void s_init(void)  { +	struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR; +	int is_6q = is_cpu_type(MXC_CPU_MX6Q); +	u32 mask480; +	u32 mask528; + +	/* Due to hardware limitation, on MX6Q we need to gate/ungate all PFDs +	 * to make sure PFD is working right, otherwise, PFDs may +	 * not output clock after reset, MX6DL and MX6SL have added 396M pfd +	 * workaround in ROM code, as bus clock need it +	 */ + +	mask480 = ANATOP_PFD_CLKGATE_MASK(0) | +		ANATOP_PFD_CLKGATE_MASK(1) | +		ANATOP_PFD_CLKGATE_MASK(2) | +		ANATOP_PFD_CLKGATE_MASK(3); +	mask528 = ANATOP_PFD_CLKGATE_MASK(0) | +		ANATOP_PFD_CLKGATE_MASK(1) | +		ANATOP_PFD_CLKGATE_MASK(3); + +	/* +	 * Don't reset PFD2 on DL/S +	 */ +	if (is_6q) +		mask528 |= ANATOP_PFD_CLKGATE_MASK(2); +	writel(mask480, &anatop->pfd_480_set); +	writel(mask528, &anatop->pfd_528_set); +	writel(mask480, &anatop->pfd_480_clr); +	writel(mask528, &anatop->pfd_528_clr);  }  #ifdef CONFIG_IMX_HDMI diff --git a/arch/arm/cpu/armv7/omap3/clock.c b/arch/arm/cpu/armv7/omap3/clock.c index e903ed9ac..9f989ff86 100644 --- a/arch/arm/cpu/armv7/omap3/clock.c +++ b/arch/arm/cpu/armv7/omap3/clock.c @@ -183,8 +183,7 @@ static void dpll3_init_34xx(u32 sil_index, u32 clk_index)  		 * if running from flash, jump to small relocated code  		 * area in SRAM.  		 */ -		f_lock_pll = (void *) ((u32) &_end_vect - (u32) &_start + -				SRAM_VECT_CODE); +		f_lock_pll = (void *) (SRAM_CLK_CODE);  		p0 = readl(&prcm_base->clken_pll);  		sr32(&p0, 0, 3, PLL_FAST_RELOCK_BYPASS); @@ -401,8 +400,7 @@ static void dpll3_init_36xx(u32 sil_index, u32 clk_index)  		 * if running from flash, jump to small relocated code  		 * area in SRAM.  		 */ -		f_lock_pll = (void *) ((u32) &_end_vect - (u32) &_start + -				SRAM_VECT_CODE); +		f_lock_pll = (void *) (SRAM_CLK_CODE);  		p0 = readl(&prcm_base->clken_pll);  		sr32(&p0, 0, 3, PLL_FAST_RELOCK_BYPASS); diff --git a/arch/arm/cpu/armv7/omap3/lowlevel_init.S b/arch/arm/cpu/armv7/omap3/lowlevel_init.S index 98c3c03a0..6f7261b7b 100644 --- a/arch/arm/cpu/armv7/omap3/lowlevel_init.S +++ b/arch/arm/cpu/armv7/omap3/lowlevel_init.S @@ -69,15 +69,13 @@ ENDPROC(do_omap3_emu_romcode_call)   *************************************************************************/  ENTRY(cpy_clk_code)  	/* Copy DPLL code into SRAM */ -	adr	r0, go_to_speed		/* get addr of clock setting code */ -	mov	r2, #384		/* r2 size to copy (div by 32 bytes) */ -	mov	r1, r1			/* r1 <- dest address (passed in) */ -	add	r2, r2, r0		/* r2 <- source end address */ +	adr	r0, go_to_speed		/* copy from start of go_to_speed... */ +	adr	r2, lowlevel_init	/* ... up to start of low_level_init */  next2:  	ldmia	r0!, {r3 - r10}		/* copy from source address [r0] */  	stmia	r1!, {r3 - r10}		/* copy to   target address [r1] */  	cmp	r0, r2			/* until source end address [r2] */ -	bne	next2 +	blo	next2  	mov	pc, lr			/* back to caller */  ENDPROC(cpy_clk_code) diff --git a/arch/arm/cpu/armv7/omap4/hw_data.c b/arch/arm/cpu/armv7/omap4/hw_data.c index 310df5a6e..6a225c8cb 100644 --- a/arch/arm/cpu/armv7/omap4/hw_data.c +++ b/arch/arm/cpu/armv7/omap4/hw_data.c @@ -50,6 +50,7 @@ static const struct dpll_params mpu_dpll_params_1400mhz[NUM_SYS_CLKS] = {  /*   * dpll locked at 1600 MHz - MPU clk at 800 MHz(OPP Turbo 4430)   * OMAP4430 OPP_TURBO frequency + * OMAP4470 OPP_NOM frequency   */  static const struct dpll_params mpu_dpll_params_1600mhz[NUM_SYS_CLKS] = {  	{200, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},	/* 12 MHz   */ @@ -76,6 +77,7 @@ static const struct dpll_params mpu_dpll_params_1200mhz[NUM_SYS_CLKS] = {  };  /* OMAP4460 OPP_NOM frequency */ +/* OMAP4470 OPP_NOM (Low Power) frequency */  static const struct dpll_params core_dpll_params_1600mhz[NUM_SYS_CLKS] = {  	{200, 2, 1, 5, 8, 4, 6, 5, -1, -1, -1, -1},	/* 12 MHz   */  	{800, 12, 1, 5, 8, 4, 6, 5, -1, -1, -1, -1},	/* 13 MHz   */ @@ -198,6 +200,20 @@ struct dplls omap4460_dplls = {  	.ddr = NULL  }; +struct dplls omap4470_dplls = { +	.mpu = mpu_dpll_params_1600mhz, +	.core = core_dpll_params_1600mhz, +	.per = per_dpll_params_1536mhz, +	.iva = iva_dpll_params_1862mhz, +#ifdef CONFIG_SYS_OMAP_ABE_SYSCK +	.abe = abe_dpll_params_sysclk_196608khz, +#else +	.abe = &abe_dpll_params_32k_196608khz, +#endif +	.usb = usb_dpll_params_1920mhz, +	.ddr = NULL +}; +  struct pmic_data twl6030_4430es1 = {  	.base_offset = PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV,  	.step = 12660, /* 12.66 mV represented in uV */ @@ -208,6 +224,7 @@ struct pmic_data twl6030_4430es1 = {  	.pmic_write	= omap_vc_bypass_send_value,  }; +/* twl6030 struct is used for TWL6030 and TWL6032 PMIC */  struct pmic_data twl6030 = {  	.base_offset = PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV,  	.step = 12660, /* 12.66 mV represented in uV */ @@ -271,6 +288,20 @@ struct vcores_data omap4460_volts = {  	.mm.pmic = &twl6030,  }; +struct vcores_data omap4470_volts = { +	.mpu.value = 1200, +	.mpu.addr = SMPS_REG_ADDR_SMPS1, +	.mpu.pmic = &twl6030, + +	.core.value = 1126, +	.core.addr = SMPS_REG_ADDR_SMPS1, +	.core.pmic = &twl6030, + +	.mm.value = 1137, +	.mm.addr = SMPS_REG_ADDR_SMPS1, +	.mm.pmic = &twl6030, +}; +  /*   * Enable essential clock domains, modules and   * do some additional special settings needed @@ -476,6 +507,11 @@ void hw_data_init(void)  	*omap_vcores = &omap4460_volts;  	break; +	case OMAP4470_ES1_0: +	*dplls_data = &omap4470_dplls; +	*omap_vcores = &omap4470_volts; +	break; +  	default:  		printf("\n INVALID OMAP REVISION ");  	} diff --git a/arch/arm/cpu/armv7/omap4/hwinit.c b/arch/arm/cpu/armv7/omap4/hwinit.c index 4da0fc0ad..b0598a077 100644 --- a/arch/arm/cpu/armv7/omap4/hwinit.c +++ b/arch/arm/cpu/armv7/omap4/hwinit.c @@ -138,6 +138,9 @@ void init_omap_revision(void)  		break;  	case MIDR_CORTEX_A9_R2P10:  		switch (readl(CONTROL_ID_CODE)) { +		case OMAP4470_CONTROL_ID_CODE_ES1_0: +			*omap_si_rev = OMAP4470_ES1_0; +			break;  		case OMAP4460_CONTROL_ID_CODE_ES1_1:  			*omap_si_rev = OMAP4460_ES1_1;  			break; diff --git a/arch/arm/cpu/armv7/omap4/sdram_elpida.c b/arch/arm/cpu/armv7/omap4/sdram_elpida.c index d76dde719..67a79261f 100644 --- a/arch/arm/cpu/armv7/omap4/sdram_elpida.c +++ b/arch/arm/cpu/armv7/omap4/sdram_elpida.c @@ -60,6 +60,20 @@ static const struct emif_regs emif_regs_elpida_380_mhz_1cs = {  	.emif_ddr_phy_ctlr_1		= 0x049ff418  }; +const struct emif_regs emif_regs_elpida_400_mhz_1cs = { +	.sdram_config_init		= 0x80800eb2, +	.sdram_config			= 0x80801ab2, +	.ref_ctrl			= 0x00000618, +	.sdram_tim1			= 0x10eb0662, +	.sdram_tim2			= 0x20370dd2, +	.sdram_tim3			= 0x00b1c33f, +	.read_idle_ctrl			= 0x000501ff, +	.zq_config			= 0x500b3215, +	.temp_alert_config		= 0x58016893, +	.emif_ddr_phy_ctlr_1_init	= 0x049ffff5, +	.emif_ddr_phy_ctlr_1		= 0x049ff418 +}; +  const struct emif_regs emif_regs_elpida_400_mhz_2cs = {  	.sdram_config_init		= 0x80000eb9,  	.sdram_config			= 0x80001ab9, @@ -107,8 +121,10 @@ static void emif_get_reg_dump_sdp(u32 emif_nr, const struct emif_regs **regs)  		*regs = &emif_regs_elpida_380_mhz_1cs;  	else if (omap4_rev == OMAP4430_ES2_0)  		*regs = &emif_regs_elpida_200_mhz_2cs; -	else +	else if (omap4_rev < OMAP4470_ES1_0)  		*regs = &emif_regs_elpida_400_mhz_2cs; +	else +		*regs = &emif_regs_elpida_400_mhz_1cs;  }  void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)  	__attribute__((weak, alias("emif_get_reg_dump_sdp"))); @@ -138,20 +154,31 @@ static const struct lpddr2_device_details elpida_2G_S4_details = {  	.manufacturer	= LPDDR2_MANUFACTURER_ELPIDA  }; +static const struct lpddr2_device_details elpida_4G_S4_details = { +	.type		= LPDDR2_TYPE_S4, +	.density	= LPDDR2_DENSITY_4Gb, +	.io_width	= LPDDR2_IO_WIDTH_32, +	.manufacturer	= LPDDR2_MANUFACTURER_ELPIDA +}; +  struct lpddr2_device_details *emif_get_device_details_sdp(u32 emif_nr, u8 cs,  			struct lpddr2_device_details *lpddr2_dev_details)  {  	u32 omap_rev = omap_revision();  	/* EMIF1 & EMIF2 have identical configuration */ -	if ((omap_rev == OMAP4430_ES1_0) && (cs == CS1)) { -		/* Nothing connected on CS1 for ES1.0 */ +	if (((omap_rev == OMAP4430_ES1_0) || (omap_rev == OMAP4470_ES1_0)) +		&& (cs == CS1)) { +		/* Nothing connected on CS1 for 4430/4470 ES1.0 */  		return NULL; -	} else { -		/* In all other cases Elpida 2G device */ +	} else if (omap_rev < OMAP4470_ES1_0) { +		/* In all other 4430/4460 cases Elpida 2G device */  		*lpddr2_dev_details = elpida_2G_S4_details; -		return lpddr2_dev_details; +	} else { +		/* 4470: 4G device */ +		*lpddr2_dev_details = elpida_4G_S4_details;  	} +	return lpddr2_dev_details;  }  struct lpddr2_device_details *emif_get_device_details(u32 emif_nr, u8 cs, @@ -265,7 +292,7 @@ void emif_get_device_timings_sdp(u32 emif_nr,  	/* Identical devices on EMIF1 & EMIF2 */  	*cs0_device_timings = &elpida_2G_S4_timings; -	if (omap_rev == OMAP4430_ES1_0) +	if ((omap_rev == OMAP4430_ES1_0) || (omap_rev == OMAP4470_ES1_0))  		*cs1_device_timings = NULL;  	else  		*cs1_device_timings = &elpida_2G_S4_timings; diff --git a/arch/arm/cpu/armv7/socfpga/Makefile b/arch/arm/cpu/armv7/socfpga/Makefile index 3b48ac9b2..5024fc55e 100644 --- a/arch/arm/cpu/armv7/socfpga/Makefile +++ b/arch/arm/cpu/armv7/socfpga/Makefile @@ -13,7 +13,7 @@ include $(TOPDIR)/config.mk  LIB	=  $(obj)lib$(SOC).o  SOBJS	:= lowlevel_init.o -COBJS-y	:= misc.o timer.o +COBJS-y	:= misc.o timer.o reset_manager.o  COBJS-$(CONFIG_SPL_BUILD) += spl.o  COBJS	:= $(COBJS-y) diff --git a/arch/arm/cpu/armv7/socfpga/misc.c b/arch/arm/cpu/armv7/socfpga/misc.c index 66edb3c20..2f1c7160f 100644 --- a/arch/arm/cpu/armv7/socfpga/misc.c +++ b/arch/arm/cpu/armv7/socfpga/misc.c @@ -6,36 +6,9 @@  #include <common.h>  #include <asm/io.h> -#include <asm/arch/reset_manager.h>  DECLARE_GLOBAL_DATA_PTR; -static const struct socfpga_reset_manager *reset_manager_base = -		(void *)SOCFPGA_RSTMGR_ADDRESS; - -/* - * Write the reset manager register to cause reset - */ -void reset_cpu(ulong addr) -{ -	/* request a warm reset */ -	writel(RSTMGR_CTRL_SWWARMRSTREQ_LSB, &reset_manager_base->ctrl); -	/* -	 * infinite loop here as watchdog will trigger and reset -	 * the processor -	 */ -	while (1) -		; -} - -/* - * Release peripherals from reset based on handoff - */ -void reset_deassert_peripherals_handoff(void) -{ -	writel(0, &reset_manager_base->per_mod_reset); -} -  int dram_init(void)  {  	gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE); diff --git a/arch/arm/cpu/armv7/socfpga/reset_manager.c b/arch/arm/cpu/armv7/socfpga/reset_manager.c new file mode 100644 index 000000000..e320c011a --- /dev/null +++ b/arch/arm/cpu/armv7/socfpga/reset_manager.c @@ -0,0 +1,39 @@ +/* + *  Copyright (C) 2013 Altera Corporation <www.altera.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/reset_manager.h> + +DECLARE_GLOBAL_DATA_PTR; + +static const struct socfpga_reset_manager *reset_manager_base = +		(void *)SOCFPGA_RSTMGR_ADDRESS; + +/* + * Write the reset manager register to cause reset + */ +void reset_cpu(ulong addr) +{ +	/* request a warm reset */ +	writel((1 << RSTMGR_CTRL_SWWARMRSTREQ_LSB), +		&reset_manager_base->ctrl); +	/* +	 * infinite loop here as watchdog will trigger and reset +	 * the processor +	 */ +	while (1) +		; +} + +/* + * Release peripherals from reset based on handoff + */ +void reset_deassert_peripherals_handoff(void) +{ +	writel(0, &reset_manager_base->per_mod_reset); +} diff --git a/arch/arm/cpu/armv7/tegra114/config.mk b/arch/arm/cpu/armv7/tegra114/config.mk deleted file mode 100644 index cb1a19da8..000000000 --- a/arch/arm/cpu/armv7/tegra114/config.mk +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright (c) 2010-2013, NVIDIA CORPORATION.  All rights reserved. -# -# (C) Copyright 2002 -# Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for -# more details. -# -# You should have received a copy of the GNU General Public License -# along with this program.  If not, see <http://www.gnu.org/licenses/>. -# -CONFIG_ARCH_DEVICE_TREE := tegra114 diff --git a/arch/arm/cpu/armv7/tegra20/config.mk b/arch/arm/cpu/armv7/tegra20/config.mk deleted file mode 100644 index 3cac79bc1..000000000 --- a/arch/arm/cpu/armv7/tegra20/config.mk +++ /dev/null @@ -1,10 +0,0 @@ -# -# (C) Copyright 2010,2011 -# NVIDIA Corporation <www.nvidia.com> -# -# (C) Copyright 2002 -# Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> -# -# SPDX-License-Identifier:	GPL-2.0+ -# -CONFIG_ARCH_DEVICE_TREE := tegra20 diff --git a/arch/arm/cpu/armv7/tegra30/config.mk b/arch/arm/cpu/armv7/tegra30/config.mk deleted file mode 100644 index 719ca8192..000000000 --- a/arch/arm/cpu/armv7/tegra30/config.mk +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright (c) 2010-2012, NVIDIA CORPORATION.  All rights reserved. -# -# (C) Copyright 2002 -# Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> -# -# This program is free software; you can redistribute it and/or modify it -# under the terms and conditions of the GNU General Public License, -# version 2, as published by the Free Software Foundation. -# -# This program is distributed in the hope it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for -# more details. -# -# You should have received a copy of the GNU General Public License -# along with this program.  If not, see <http://www.gnu.org/licenses/>. -# -CONFIG_ARCH_DEVICE_TREE := tegra30 diff --git a/arch/arm/cpu/armv7/zynq/Makefile b/arch/arm/cpu/armv7/zynq/Makefile index e5494f748..de6b08157 100644 --- a/arch/arm/cpu/armv7/zynq/Makefile +++ b/arch/arm/cpu/armv7/zynq/Makefile @@ -14,6 +14,7 @@ LIB	= $(obj)lib$(SOC).o  COBJS-y	:= timer.o  COBJS-y	+= cpu.o +COBJS-y	+= ddrc.o  COBJS-y	+= slcr.o  COBJS	:= $(COBJS-y) diff --git a/arch/arm/cpu/armv7/zynq/ddrc.c b/arch/arm/cpu/armv7/zynq/ddrc.c new file mode 100644 index 000000000..ba6a6aee5 --- /dev/null +++ b/arch/arm/cpu/armv7/zynq/ddrc.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2012 - 2013 Michal Simek <monstr@monstr.eu> + * Copyright (C) 2012 - 2013 Xilinx, Inc. All rights reserved. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/sys_proto.h> +#include <asm/arch/hardware.h> + +DECLARE_GLOBAL_DATA_PTR; + +/* Control regsiter bitfield definitions */ +#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_MASK		0xC +#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_SHIFT	2 +#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_16BIT	1 + +/* ECC scrub regsiter definitions */ +#define ZYNQ_DDRC_ECC_SCRUBREG_ECC_MODE_MASK	0x7 +#define ZYNQ_DDRC_ECC_SCRUBREG_ECCMODE_SECDED	0x4 + +void zynq_ddrc_init(void) +{ +	u32 width, ecctype; + +	width = readl(&ddrc_base->ddrc_ctrl); +	width = (width & ZYNQ_DDRC_CTRLREG_BUSWIDTH_MASK) >> +					ZYNQ_DDRC_CTRLREG_BUSWIDTH_SHIFT; +	ecctype = (readl(&ddrc_base->ecc_scrub) & +		ZYNQ_DDRC_ECC_SCRUBREG_ECC_MODE_MASK); + +	/* ECC is enabled when memory is in 16bit mode and it is enabled */ +	if ((ecctype == ZYNQ_DDRC_ECC_SCRUBREG_ECCMODE_SECDED) && +	    (width == ZYNQ_DDRC_CTRLREG_BUSWIDTH_16BIT)) { +		puts("Memory: ECC enabled\n"); +		/* +		 * Clear the first 1MB because it is not initialized from +		 * first stage bootloader. To get ECC to work all memory has +		 * been initialized by writing any value. +		 */ +		memset(0, 0, 1 * 1024 * 1024); +	} else { +		puts("Memory: ECC disabled\n"); +	} + +	if (width == ZYNQ_DDRC_CTRLREG_BUSWIDTH_16BIT) +		gd->ram_size /= 2; +} diff --git a/arch/arm/cpu/armv7/zynq/slcr.c b/arch/arm/cpu/armv7/zynq/slcr.c index e5fe99298..717ec65ae 100644 --- a/arch/arm/cpu/armv7/zynq/slcr.c +++ b/arch/arm/cpu/armv7/zynq/slcr.c @@ -70,7 +70,7 @@ void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk)  		/* Configure GEM_RCLK_CTRL */  		writel(rclk, &slcr_base->gem0_rclk_ctrl);  	} - +	udelay(100000);  out:  	zynq_slcr_lock();  } diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds index 490aed2e0..23bf03065 100644 --- a/arch/arm/cpu/u-boot.lds +++ b/arch/arm/cpu/u-boot.lds @@ -97,4 +97,6 @@ SECTIONS  	/DISCARD/ : { *(.plt*) }  	/DISCARD/ : { *(.interp*) }  	/DISCARD/ : { *(.gnu*) } +	/DISCARD/ : { *(.ARM.exidx*) } +	/DISCARD/ : { *(.gnu.linkonce.armexidx.*) }  } diff --git a/arch/arm/include/asm/arch-am33xx/cpu.h b/arch/arm/include/asm/arch-am33xx/cpu.h index 10b56e0db..73e6db899 100644 --- a/arch/arm/include/asm/arch-am33xx/cpu.h +++ b/arch/arm/include/asm/arch-am33xx/cpu.h @@ -46,6 +46,26 @@  #define PRM_RSTCTRL_RESET		0x01  #define PRM_RSTST_WARM_RESET_MASK	0x232 +/* + * Watchdog: + * Using the prescaler, the OMAP watchdog could go for many + * months before firing.  These limits work without scaling, + * with the 60 second default assumed by most tools and docs. + */ +#define TIMER_MARGIN_MAX	(24 * 60 * 60)	/* 1 day */ +#define TIMER_MARGIN_DEFAULT	60	/* 60 secs */ +#define TIMER_MARGIN_MIN	1 + +#define PTV			0	/* prescale */ +#define GET_WLDR_VAL(secs)	(0xffffffff - ((secs) * (32768/(1<<PTV))) + 1) +#define WDT_WWPS_PEND_WCLR	BIT(0) +#define WDT_WWPS_PEND_WLDR	BIT(2) +#define WDT_WWPS_PEND_WTGR	BIT(3) +#define WDT_WWPS_PEND_WSPR	BIT(4) + +#define WDT_WCLR_PRE		BIT(5) +#define WDT_WCLR_PTV_OFF	2 +  #ifndef __KERNEL_STRICT_NAMES  #ifndef __ASSEMBLY__  struct gpmc_cs { @@ -193,7 +213,8 @@ struct cm_perpll {  	unsigned int dcan1clkctrl;	/* offset 0xC4 */  	unsigned int resv6[2];  	unsigned int emiffwclkctrl;	/* offset 0xD0 */ -	unsigned int resv7[2]; +	unsigned int epwmss0clkctrl;	/* offset 0xD4 */ +	unsigned int epwmss2clkctrl;	/* offset 0xD8 */  	unsigned int l3instrclkctrl;	/* offset 0xDC */  	unsigned int l3clkctrl;		/* Offset 0xE0 */  	unsigned int resv8[4]; @@ -204,6 +225,7 @@ struct cm_perpll {  	unsigned int l4hsclkctrl;	/* offset 0x120 */  	unsigned int resv10[8];  	unsigned int cpswclkstctrl;	/* offset 0x144 */ +	unsigned int lcdcclkstctrl;	/* offset 0x148 */  };  #else  /* Encapsulating core pll registers */ @@ -366,6 +388,8 @@ struct cm_perpll {  struct cm_dpll {  	unsigned int resv1[2];  	unsigned int clktimer2clk;	/* offset 0x08 */ +	unsigned int resv2[10]; +	unsigned int clklcdcpixelclk;	/* offset 0x34 */  };  /* Control Module RTC registers */ @@ -486,6 +510,54 @@ struct ctrl_dev {  	unsigned int resv4[4];  	unsigned int miisel;		/* offset 0x50 */  }; + +/* gmii_sel register defines */ +#define GMII1_SEL_MII		0x0 +#define GMII1_SEL_RMII		0x1 +#define GMII1_SEL_RGMII		0x2 +#define GMII2_SEL_MII		0x0 +#define GMII2_SEL_RMII		0x4 +#define GMII2_SEL_RGMII		0x8 +#define RGMII1_IDMODE		BIT(4) +#define RGMII2_IDMODE		BIT(5) +#define RMII1_IO_CLK_EN		BIT(6) +#define RMII2_IO_CLK_EN		BIT(7) + +#define MII_MODE_ENABLE		(GMII1_SEL_MII | GMII2_SEL_MII) +#define RMII_MODE_ENABLE        (GMII1_SEL_RMII | GMII2_SEL_RMII) +#define RGMII_MODE_ENABLE	(GMII1_SEL_RGMII | GMII2_SEL_RGMII) +#define RGMII_INT_DELAY		(RGMII1_IDMODE | RGMII2_IDMODE) +#define RMII_CHIPCKL_ENABLE     (RMII1_IO_CLK_EN | RMII2_IO_CLK_EN) + +/* PWMSS */ +struct pwmss_regs { +	unsigned int idver; +	unsigned int sysconfig; +	unsigned int clkconfig; +	unsigned int clkstatus; +}; +#define ECAP_CLK_EN		BIT(0) +#define ECAP_CLK_STOP_REQ	BIT(1) + +struct pwmss_ecap_regs { +	unsigned int tsctr; +	unsigned int ctrphs; +	unsigned int cap1; +	unsigned int cap2; +	unsigned int cap3; +	unsigned int cap4; +	unsigned int resv1[4]; +	unsigned short ecctl1; +	unsigned short ecctl2; +}; + +/* Capture Control register 2 */ +#define ECTRL2_SYNCOSEL_MASK	(0x03 << 6) +#define ECTRL2_MDSL_ECAP	BIT(9) +#define ECTRL2_CTRSTP_FREERUN	BIT(4) +#define ECTRL2_PLSL_LOW		BIT(10) +#define ECTRL2_SYNC_EN		BIT(5) +  #endif /* __ASSEMBLY__ */  #endif /* __KERNEL_STRICT_NAMES */ diff --git a/arch/arm/include/asm/arch-am33xx/hardware.h b/arch/arm/include/asm/arch-am33xx/hardware.h index 2055b2549..ee5fce0da 100644 --- a/arch/arm/include/asm/arch-am33xx/hardware.h +++ b/arch/arm/include/asm/arch-am33xx/hardware.h @@ -68,4 +68,5 @@  /* CPSW Config space */  #define CPSW_BASE			0x4A100000 +int clk_get(int clk);  #endif /* __AM33XX_HARDWARE_H */ diff --git a/arch/arm/include/asm/arch-am33xx/hardware_am33xx.h b/arch/arm/include/asm/arch-am33xx/hardware_am33xx.h index 8973fd884..e4231c81a 100644 --- a/arch/arm/include/asm/arch-am33xx/hardware_am33xx.h +++ b/arch/arm/include/asm/arch-am33xx/hardware_am33xx.h @@ -58,4 +58,11 @@  #define USB0_OTG_BASE			0x47401000  #define USB1_OTG_BASE			0x47401800 +/* LCD Controller */ +#define LCD_CNTL_BASE			0x4830E000 + +/* PWMSS */ +#define PWMSS0_BASE			0x48300000 +#define AM33XX_ECAP0_BASE		0x48300100 +  #endif /* __AM33XX_HARDWARE_AM33XX_H */ diff --git a/arch/arm/include/asm/arch-am33xx/omap.h b/arch/arm/include/asm/arch-am33xx/omap.h index 1f8431196..225072186 100644 --- a/arch/arm/include/asm/arch-am33xx/omap.h +++ b/arch/arm/include/asm/arch-am33xx/omap.h @@ -18,7 +18,7 @@  #ifdef CONFIG_AM33XX  #define NON_SECURE_SRAM_START	0x402F0400  #define NON_SECURE_SRAM_END	0x40310000 -#define SRAM_SCRATCH_SPACE_ADDR	0x4030C000 +#define SRAM_SCRATCH_SPACE_ADDR	0x4030B800  #elif defined(CONFIG_TI81XX)  #define NON_SECURE_SRAM_START	0x40300000  #define NON_SECURE_SRAM_END	0x40320000 diff --git a/arch/arm/include/asm/arch-at91/at91_common.h b/arch/arm/include/asm/arch-at91/at91_common.h index d6597023c..9f54fddce 100644 --- a/arch/arm/include/asm/arch-at91/at91_common.h +++ b/arch/arm/include/asm/arch-at91/at91_common.h @@ -10,6 +10,7 @@  #define AT91_COMMON_H  void at91_can_hw_init(void); +void at91_gmac_hw_init(void);  void at91_macb_hw_init(void);  void at91_mci_hw_init(void);  void at91_serial0_hw_init(void); diff --git a/arch/arm/include/asm/arch-at91/at91sam9x5.h b/arch/arm/include/asm/arch-at91/at91sam9x5.h index fcc6fdc21..a47103851 100644 --- a/arch/arm/include/asm/arch-at91/at91sam9x5.h +++ b/arch/arm/include/asm/arch-at91/at91sam9x5.h @@ -162,6 +162,12 @@  #define ATMEL_ID_UHP		ATMEL_ID_UHPHS  /* + * PMECC table in ROM + */ +#define ATMEL_PMECC_INDEX_OFFSET_512	0x8000 +#define ATMEL_PMECC_INDEX_OFFSET_1024	0x10000 + +/*   * at91sam9x5 specific prototypes   */  #ifndef __ASSEMBLY__ diff --git a/arch/arm/include/asm/arch-at91/sama5d3.h b/arch/arm/include/asm/arch-at91/sama5d3.h index 49bd33510..fefee5ed2 100644 --- a/arch/arm/include/asm/arch-at91/sama5d3.h +++ b/arch/arm/include/asm/arch-at91/sama5d3.h @@ -191,8 +191,6 @@   */  #define ATMEL_PMECC_INDEX_OFFSET_512	0x10000  #define ATMEL_PMECC_INDEX_OFFSET_1024	0x18000 -#define ATMEL_PMECC_ALPHA_OFFSET_512	0x10000 -#define ATMEL_PMECC_ALPHA_OFFSET_1024	0x18000  /*   * SAMA5D3 specific prototypes diff --git a/arch/arm/include/asm/arch-at91/sama5d3_smc.h b/arch/arm/include/asm/arch-at91/sama5d3_smc.h index c060894f1..6caa9b6ed 100644 --- a/arch/arm/include/asm/arch-at91/sama5d3_smc.h +++ b/arch/arm/include/asm/arch-at91/sama5d3_smc.h @@ -17,7 +17,6 @@  #define AT91_ASM_SMC_MODE0	(ATMEL_BASE_SMC + 0x60C)  #else  struct at91_cs { -	u32	reserved[96];  	u32	setup;		/* 0x600 SMC Setup Register */  	u32	pulse;		/* 0x604 SMC Pulse Register */  	u32	cycle;		/* 0x608 SMC Cycle Register */ @@ -26,6 +25,7 @@ struct at91_cs {  };  struct at91_smc { +	u32 reserved[384];  	struct at91_cs cs[4];  };  #endif /*  __ASSEMBLY__ */ diff --git a/arch/arm/include/asm/arch-davinci/da8xx-fb.h b/arch/arm/include/asm/arch-davinci/da8xx-fb.h deleted file mode 100644 index c115034f0..000000000 --- a/arch/arm/include/asm/arch-davinci/da8xx-fb.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Porting to u-boot: - * - * (C) Copyright 2011 - * Stefano Babic, DENX Software Engineering, sbabic@denx.de. - * - * Copyright (C) 2008-2009 MontaVista Software Inc. - * Copyright (C) 2008-2009 Texas Instruments Inc - * - * Based on the LCD driver for TI Avalanche processors written by - * Ajay Singh and Shalom Hai. - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#ifndef DA8XX_FB_H -#define DA8XX_FB_H - -enum panel_type { -	QVGA = 0 -}; - -enum panel_shade { -	MONOCHROME = 0, -	COLOR_ACTIVE, -	COLOR_PASSIVE, -}; - -enum raster_load_mode { -	LOAD_DATA = 1, -	LOAD_PALETTE, -}; - -struct display_panel { -	enum panel_type panel_type; /* QVGA */ -	int max_bpp; -	int min_bpp; -	enum panel_shade panel_shade; -}; - -struct da8xx_panel { -	const char	name[25];	/* Full name <vendor>_<model> */ -	unsigned short	width; -	unsigned short	height; -	int		hfp;		/* Horizontal front porch */ -	int		hbp;		/* Horizontal back porch */ -	int		hsw;		/* Horizontal Sync Pulse Width */ -	int		vfp;		/* Vertical front porch */ -	int		vbp;		/* Vertical back porch */ -	int		vsw;		/* Vertical Sync Pulse Width */ -	unsigned int	pxl_clk;	/* Pixel clock */ -	unsigned char	invert_pxl_clk;	/* Invert Pixel clock */ -}; - -struct da8xx_lcdc_platform_data { -	const char manu_name[10]; -	void *controller_data; -	const char type[25]; -	void (*panel_power_ctrl)(int); -}; - -struct lcd_ctrl_config { -	const struct display_panel *p_disp_panel; - -	/* AC Bias Pin Frequency */ -	int ac_bias; - -	/* AC Bias Pin Transitions per Interrupt */ -	int ac_bias_intrpt; - -	/* DMA burst size */ -	int dma_burst_sz; - -	/* Bits per pixel */ -	int bpp; - -	/* FIFO DMA Request Delay */ -	int fdd; - -	/* TFT Alternative Signal Mapping (Only for active) */ -	unsigned char tft_alt_mode; - -	/* 12 Bit Per Pixel (5-6-5) Mode (Only for passive) */ -	unsigned char stn_565_mode; - -	/* Mono 8-bit Mode: 1=D0-D7 or 0=D0-D3 */ -	unsigned char mono_8bit_mode; - -	/* Invert line clock */ -	unsigned char invert_line_clock; - -	/* Invert frame clock  */ -	unsigned char invert_frm_clock; - -	/* Horizontal and Vertical Sync Edge: 0=rising 1=falling */ -	unsigned char sync_edge; - -	/* Horizontal and Vertical Sync: Control: 0=ignore */ -	unsigned char sync_ctrl; - -	/* Raster Data Order Select: 1=Most-to-least 0=Least-to-most */ -	unsigned char raster_order; -}; - -struct lcd_sync_arg { -	int back_porch; -	int front_porch; -	int pulse_width; -}; - -void da8xx_video_init(const struct da8xx_panel *panel, int bits_pixel); - -#endif  /* ifndef DA8XX_FB_H */ diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h index 8916d9d16..498a9ffc0 100644 --- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h +++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h @@ -291,7 +291,7 @@ struct exynos_platform_mipi_dsim {   */  struct mipi_dsim_master_ops {  	int (*cmd_write)(struct mipi_dsim_device *dsim, unsigned int data_id, -		unsigned int data0, unsigned int data1); +		const unsigned char *data0, unsigned int data1);  	int (*cmd_read)(struct mipi_dsim_device *dsim, unsigned int data_id,  		unsigned int data0, unsigned int data1);  	int (*get_dsim_frame_done)(struct mipi_dsim_device *dsim); diff --git a/arch/arm/include/asm/arch-mx5/clock.h b/arch/arm/include/asm/arch-mx5/clock.h index 406d150ae..9ee79aede 100644 --- a/arch/arm/include/asm/arch-mx5/clock.h +++ b/arch/arm/include/asm/arch-mx5/clock.h @@ -46,10 +46,10 @@ u32 imx_get_fecclk(void);  unsigned int mxc_get_clock(enum mxc_clock clk);  int mxc_set_clock(u32 ref, u32 freq, u32 clk_type);  void set_usb_phy_clk(void); -void enable_usb_phy1_clk(unsigned char enable); -void enable_usb_phy2_clk(unsigned char enable); +void enable_usb_phy1_clk(bool enable); +void enable_usb_phy2_clk(bool enable);  void set_usboh3_clk(void); -void enable_usboh3_clk(unsigned char enable); +void enable_usboh3_clk(bool enable);  void mxc_set_sata_internal_clock(void);  int enable_i2c_clk(unsigned char enable, unsigned i2c_num);  void enable_nfc_clk(unsigned char enable); diff --git a/arch/arm/include/asm/arch-mx6/hab.h b/arch/arm/include/asm/arch-mx6/hab.h new file mode 100644 index 000000000..d724f206f --- /dev/null +++ b/arch/arm/include/asm/arch-mx6/hab.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved. + * + * SPDX-License-Identifier:    GPL-2.0+ + * +*/ + +#ifndef __SECURE_MX6Q_H__ +#define __SECURE_MX6Q_H__ + +#include <linux/types.h> + +/* -------- start of HAB API updates ------------*/ +/* The following are taken from HAB4 SIS */ + +/* Status definitions */ +enum hab_status { +	HAB_STS_ANY = 0x00, +	HAB_FAILURE = 0x33, +	HAB_WARNING = 0x69, +	HAB_SUCCESS = 0xf0 +}; + +/* Security Configuration definitions */ +enum hab_config { +	HAB_CFG_RETURN = 0x33, /**< Field Return IC */ +	HAB_CFG_OPEN = 0xf0, /**< Non-secure IC */ +	HAB_CFG_CLOSED = 0xcc /**< Secure IC */ +}; + +/* State definitions */ +enum hab_state { +	HAB_STATE_INITIAL = 0x33, /**< Initialising state (transitory) */ +	HAB_STATE_CHECK = 0x55, /**< Check state (non-secure) */ +	HAB_STATE_NONSECURE = 0x66, /**< Non-secure state */ +	HAB_STATE_TRUSTED = 0x99, /**< Trusted state */ +	HAB_STATE_SECURE = 0xaa, /**< Secure state */ +	HAB_STATE_FAIL_SOFT = 0xcc, /**< Soft fail state */ +	HAB_STATE_FAIL_HARD = 0xff, /**< Hard fail state (terminal) */ +	HAB_STATE_NONE = 0xf0, /**< No security state machine */ +	HAB_STATE_MAX +}; + +/*Function prototype description*/ +typedef enum hab_status hab_rvt_report_event_t(enum hab_status, uint32_t, +		uint8_t* , size_t*); +typedef enum hab_status hab_rvt_report_status_t(enum hab_config *, +		enum hab_state *); +typedef enum hab_status hab_loader_callback_f_t(void**, size_t*, const void*); +typedef enum hab_status hab_rvt_entry_t(void); +typedef enum hab_status hab_rvt_exit_t(void); +typedef void *hab_rvt_authenticate_image_t(uint8_t, ptrdiff_t, +		void **, size_t *, hab_loader_callback_f_t); +typedef void hapi_clock_init_t(void); + +#define HAB_RVT_REPORT_EVENT (*(uint32_t *)0x000000B4) +#define HAB_RVT_REPORT_STATUS (*(uint32_t *)0x000000B8) +#define HAB_RVT_AUTHENTICATE_IMAGE (*(uint32_t *)0x000000A4) +#define HAB_RVT_ENTRY (*(uint32_t *)0x00000098) +#define HAB_RVT_EXIT (*(uint32_t *)0x0000009C) +#define HAB_RVT_CLOCK_INIT ((hapi_clock_init_t *)0x0000024D) + +#define HAB_CID_ROM 0 /**< ROM Caller ID */ +#define HAB_CID_UBOOT 1 /**< UBOOT Caller ID*/ +/* ----------- end of HAB API updates ------------*/ + +#endif diff --git a/arch/arm/include/asm/arch-mx6/imx-regs.h b/arch/arm/include/asm/arch-mx6/imx-regs.h index 5d6bccbc0..7ef715267 100644 --- a/arch/arm/include/asm/arch-mx6/imx-regs.h +++ b/arch/arm/include/asm/arch-mx6/imx-regs.h @@ -456,7 +456,13 @@ struct fuse_bank0_regs {  	u32	uid_low;  	u32	rsvd1[3];  	u32	uid_high; -	u32	rsvd2[0x17]; +	u32	rsvd2[3]; +	u32	rsvd3[4]; +	u32	rsvd4[4]; +	u32	rsvd5[4]; +	u32	cfg5; +	u32	rsvd6[3]; +	u32	rsvd7[4];  };  struct fuse_bank4_regs { @@ -629,29 +635,12 @@ struct anatop_regs {  	u32	digprog_sololite;	/* 0x280 */  }; -#define ANATOP_PFD_480_PFD0_FRAC_SHIFT		0 -#define ANATOP_PFD_480_PFD0_FRAC_MASK		(0x3f<<ANATOP_PFD_480_PFD0_FRAC_SHIFT) -#define ANATOP_PFD_480_PFD0_STABLE_SHIFT	6 -#define ANATOP_PFD_480_PFD0_STABLE_MASK		(1<<ANATOP_PFD_480_PFD0_STABLE_SHIFT) -#define ANATOP_PFD_480_PFD0_CLKGATE_SHIFT	7 -#define ANATOP_PFD_480_PFD0_CLKGATE_MASK	(1<<ANATOP_PFD_480_PFD0_CLKGATE_SHIFT) -#define ANATOP_PFD_480_PFD1_FRAC_SHIFT		8 -#define ANATOP_PFD_480_PFD1_FRAC_MASK		(0x3f<<ANATOP_PFD_480_PFD1_FRAC_SHIFT) -#define ANATOP_PFD_480_PFD1_STABLE_SHIFT	14 -#define ANATOP_PFD_480_PFD1_STABLE_MASK		(1<<ANATOP_PFD_480_PFD1_STABLE_SHIFT) -#define ANATOP_PFD_480_PFD1_CLKGATE_SHIFT	15 -#define ANATOP_PFD_480_PFD1_CLKGATE_MASK	(0x3f<<ANATOP_PFD_480_PFD1_CLKGATE_SHIFT) -#define ANATOP_PFD_480_PFD2_FRAC_SHIFT		16 -#define ANATOP_PFD_480_PFD2_FRAC_MASK		(1<<ANATOP_PFD_480_PFD2_FRAC_SHIFT) -#define ANATOP_PFD_480_PFD2_STABLE_SHIFT	22 -#define ANATOP_PFD_480_PFD2_STABLE_MASK	(1<<ANATOP_PFD_480_PFD2_STABLE_SHIFT) -#define ANATOP_PFD_480_PFD2_CLKGATE_SHIFT	23 -#define ANATOP_PFD_480_PFD2_CLKGATE_MASK	(0x3f<<ANATOP_PFD_480_PFD2_CLKGATE_SHIFT) -#define ANATOP_PFD_480_PFD3_FRAC_SHIFT		24 -#define ANATOP_PFD_480_PFD3_FRAC_MASK		(1<<ANATOP_PFD_480_PFD3_FRAC_SHIFT) -#define ANATOP_PFD_480_PFD3_STABLE_SHIFT	30 -#define ANATOP_PFD_480_PFD3_STABLE_MASK		(1<<ANATOP_PFD_480_PFD3_STABLE_SHIFT) -#define ANATOP_PFD_480_PFD3_CLKGATE_SHIFT	31 +#define ANATOP_PFD_FRAC_SHIFT(n)	((n)*8) +#define ANATOP_PFD_FRAC_MASK(n)	(0x3f<<ANATOP_PFD_FRAC_SHIFT(n)) +#define ANATOP_PFD_STABLE_SHIFT(n)	(6+((n)*8)) +#define ANATOP_PFD_STABLE_MASK(n)	(1<<ANATOP_PFD_STABLE_SHIFT(n)) +#define ANATOP_PFD_CLKGATE_SHIFT(n)	(7+((n)*8)) +#define ANATOP_PFD_CLKGATE_MASK(n)	(1<<ANATOP_PFD_CLKGATE_SHIFT(n))  struct iomuxc_base_regs {  	u32     gpr[14];        /* 0x000 */ diff --git a/arch/arm/include/asm/arch-mx6/sys_proto.h b/arch/arm/include/asm/arch-mx6/sys_proto.h index bfdfd2911..8c21364e7 100644 --- a/arch/arm/include/asm/arch-mx6/sys_proto.h +++ b/arch/arm/include/asm/arch-mx6/sys_proto.h @@ -19,6 +19,13 @@  #define is_soc_rev(rev)	((get_cpu_rev() & 0xFF) - rev)  u32 get_cpu_rev(void); + +/* returns MXC_CPU_ value */ +#define cpu_type(rev) (((rev) >> 12)&0xff) + +/* use with MXC_CPU_ constants */ +#define is_cpu_type(cpu) (cpu_type(get_cpu_rev()) == cpu) +  const char *get_imx_type(u32 imxtype);  unsigned imx_ddr_size(void); diff --git a/arch/arm/include/asm/arch-mxs/regs-uartapp.h b/arch/arm/include/asm/arch-mxs/regs-uartapp.h new file mode 100644 index 000000000..7ceb810dc --- /dev/null +++ b/arch/arm/include/asm/arch-mxs/regs-uartapp.h @@ -0,0 +1,220 @@ +/* + * Freescale MXS UARTAPP Register Definitions + * + * Copyright (C) 2013 Andreas Wass <andreas.wass@dalelven.com> + * + * Based on code from LTIB: + * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ARCH_ARM___MXS_UARTAPP_H +#define __ARCH_ARM___MXS_UARTAPP_H + +#include <asm/imx-common/regs-common.h> + +#ifndef __ASSEMBLY__ +struct mxs_uartapp_regs { +	mxs_reg_32(hw_uartapp_ctrl0) +	mxs_reg_32(hw_uartapp_ctrl1) +	mxs_reg_32(hw_uartapp_ctrl2) +	mxs_reg_32(hw_uartapp_linectrl) +	mxs_reg_32(hw_uartapp_linectrl2) +	mxs_reg_32(hw_uartapp_intr) +	mxs_reg_32(hw_uartapp_data) +	mxs_reg_32(hw_uartapp_stat) +	mxs_reg_32(hw_uartapp_debug) +	mxs_reg_32(hw_uartapp_version) +	mxs_reg_32(hw_uartapp_autobaud) +}; +#endif + +#define UARTAPP_CTRL0_SFTRST_MASK				(1 << 31) +#define UARTAPP_CTRL0_CLKGATE_MASK			(1 << 30) +#define UARTAPP_CTRL0_RUN_MASK				(1 << 29) +#define UARTAPP_CTRL0_RX_SOURCE_MASK			(1 << 28) +#define UARTAPP_CTRL0_RXTO_ENABLE_MASK			(1 << 27) +#define UARTAPP_CTRL0_RXTIMEOUT_OFFSET			16 +#define UARTAPP_CTRL0_RXTIMEOUT_MASK			(0x7FF << 16) +#define UARTAPP_CTRL0_XFER_COUNT_OFFSET			0 +#define UARTAPP_CTRL0_XFER_COUNT_MASK			0xFFFF + +#define UARTAPP_CTRL1_RUN_MASK				(1 << 28) + +#define UARTAPP_CTRL1_XFER_COUNT_OFFSET			0 +#define UARTAPP_CTRL1_XFER_COUNT_MASK			0xFFFF + +#define UARTAPP_CTRL2_INVERT_RTS_MASK			(1 << 31) +#define UARTAPP_CTRL2_INVERT_CTS_MASK			(1 << 30) +#define UARTAPP_CTRL2_INVERT_TX_MASK			(1 << 29) +#define UARTAPP_CTRL2_INVERT_RX_MASK			(1 << 28) +#define UARTAPP_CTRL2_RTS_SEMAPHORE_MASK			(1 << 27) +#define UARTAPP_CTRL2_DMAONERR_MASK			(1 << 26) +#define UARTAPP_CTRL2_TXDMAE_MASK				(1 << 25) +#define UARTAPP_CTRL2_RXDMAE_MASK				(1 << 24) +#define UARTAPP_CTRL2_RXIFLSEL_OFFSET			20 +#define UARTAPP_CTRL2_RXIFLSEL_MASK			(0x7 << 20) + +#define UARTAPP_CTRL2_RXIFLSEL_NOT_EMPTY		(0x0 << 20) +#define UARTAPP_CTRL2_RXIFLSEL_ONE_QUARTER		(0x1 << 20) +#define UARTAPP_CTRL2_RXIFLSEL_ONE_HALF		(0x2 << 20) +#define UARTAPP_CTRL2_RXIFLSEL_THREE_QUARTERS		(0x3 << 20) +#define UARTAPP_CTRL2_RXIFLSEL_SEVEN_EIGHTHS		(0x4 << 20) +#define UARTAPP_CTRL2_RXIFLSEL_INVALID5		(0x5 << 20) +#define UARTAPP_CTRL2_RXIFLSEL_INVALID6		(0x6 << 20) +#define UARTAPP_CTRL2_RXIFLSEL_INVALID7		(0x7 << 20) +#define UARTAPP_CTRL2_TXIFLSEL_OFFSET			16 +#define UARTAPP_CTRL2_TXIFLSEL_MASK			(0x7 << 16) +#define UARTAPP_CTRL2_TXIFLSEL_EMPTY			(0x0 << 16) +#define UARTAPP_CTRL2_TXIFLSEL_ONE_QUARTER		(0x1 << 16) +#define UARTAPP_CTRL2_TXIFLSEL_ONE_HALF		(0x2 << 16) +#define UARTAPP_CTRL2_TXIFLSEL_THREE_QUARTERS		(0x3 << 16) +#define UARTAPP_CTRL2_TXIFLSEL_SEVEN_EIGHTHS		(0x4 << 16) +#define UARTAPP_CTRL2_TXIFLSEL_INVALID5		(0x5 << 16) +#define UARTAPP_CTRL2_TXIFLSEL_INVALID6		(0x6 << 16) +#define UARTAPP_CTRL2_TXIFLSEL_INVALID7		(0x7 << 16) +#define UARTAPP_CTRL2_CTSEN_MASK				(1 << 15) +#define UARTAPP_CTRL2_RTSEN_MASK				(1 << 14) +#define UARTAPP_CTRL2_OUT2_MASK				(1 << 13) +#define UARTAPP_CTRL2_OUT1_MASK				(1 << 12) +#define UARTAPP_CTRL2_RTS_MASK				(1 << 11) +#define UARTAPP_CTRL2_DTR_MASK				(1 << 10) +#define UARTAPP_CTRL2_RXE_MASK				(1 << 9) +#define UARTAPP_CTRL2_TXE_MASK				(1 << 8) +#define UARTAPP_CTRL2_LBE_MASK				(1 << 7) +#define UARTAPP_CTRL2_USE_LCR2_MASK			(1 << 6) + +#define UARTAPP_CTRL2_SIRLP_MASK				(1 << 2) +#define UARTAPP_CTRL2_SIREN_MASK				(1 << 1) +#define UARTAPP_CTRL2_UARTEN_MASK				0x01 + +#define UARTAPP_LINECTRL_BAUD_DIVINT_OFFSET			16 +#define UARTAPP_LINECTRL_BAUD_DIVINT_MASK			(0xFFFF << 16) +#define UARTAPP_LINECTRL_EXTRACT_BAUD_DIVINT_OFFSET		6 + +#define UARTAPP_LINECTRL_BAUD_DIVFRAC_OFFSET		8 +#define UARTAPP_LINECTRL_BAUD_DIVFRAC_MASK		(0x3F << 8) +#define UARTAPP_LINECTRL_EXTRACT_BAUD_DIVFRAC_MASK	0x3F + +#define UARTAPP_LINECTRL_SPS_MASK				(1 << 7) +#define UARTAPP_LINECTRL_WLEN_OFFSET			5 +#define UARTAPP_LINECTRL_WLEN_MASK			(0x03 << 5) +#define UARTAPP_LINECTRL_WLEN_5BITS			(0x00 << 5) +#define UARTAPP_LINECTRL_WLEN_6BITS			(0x01 << 5) +#define UARTAPP_LINECTRL_WLEN_7BITS			(0x02 << 5) +#define UARTAPP_LINECTRL_WLEN_8BITS			(0x03 << 5) + +#define UARTAPP_LINECTRL_FEN_MASK				(1 << 4) +#define UARTAPP_LINECTRL_STP2_MASK			(1 << 3) +#define UARTAPP_LINECTRL_EPS_MASK				(1 << 2) +#define UARTAPP_LINECTRL_PEN_MASK				(1 << 1) +#define UARTAPP_LINECTRL_BRK_MASK				1 + +#define UARTAPP_LINECTRL2_BAUD_DIVINT_OFFSET		16 +#define UARTAPP_LINECTRL2_BAUD_DIVINT_MASK		(0xFFFF << 16) +#define UARTAPP_LINECTRL2_EXTRACT_BAUD_DIVINT_OFFSET	6 + +#define UARTAPP_LINECTRL2_BAUD_DIVFRAC_OFFSET		8 +#define UARTAPP_LINECTRL2_BAUD_DIVFRAC_MASK		(0x3F << 8) +#define UARTAPP_LINECTRL2_EXTRACT_BAUD_DIVFRAC_MASK	0x3F + +#define UARTAPP_LINECTRL2_SPS_MASK			(1 << 7) +#define UARTAPP_LINECTRL2_WLEN_OFFSET			5 +#define UARTAPP_LINECTRL2_WLEN_MASK			(0x03 << 5) +#define UARTAPP_LINECTRL2_WLEN_5BITS			(0x00 << 5) +#define UARTAPP_LINECTRL2_WLEN_6BITS			(0x01 << 5) +#define UARTAPP_LINECTRL2_WLEN_7BITS			(0x02 << 5) +#define UARTAPP_LINECTRL2_WLEN_8BITS			(0x03 << 5) + +#define UARTAPP_LINECTRL2_FEN_MASK			(1 << 4) +#define UARTAPP_LINECTRL2_STP2_MASK			(1 << 3) +#define UARTAPP_LINECTRL2_EPS_MASK			(1 << 2) +#define UARTAPP_LINECTRL2_PEN_MASK			(1 << 1) + +#define UARTAPP_INTR_ABDIEN_MASK				(1 << 27) +#define UARTAPP_INTR_OEIEN_MASK				(1 << 26) +#define UARTAPP_INTR_BEIEN_MASK				(1 << 25) +#define UARTAPP_INTR_PEIEN_MASK				(1 << 24) +#define UARTAPP_INTR_FEIEN_MASK				(1 << 23) +#define UARTAPP_INTR_RTIEN_MASK				(1 << 22) +#define UARTAPP_INTR_TXIEN_MASK				(1 << 21) +#define UARTAPP_INTR_RXIEN_MASK				(1 << 20) +#define UARTAPP_INTR_DSRMIEN_MASK				(1 << 19) +#define UARTAPP_INTR_DCDMIEN_MASK				(1 << 18) +#define UARTAPP_INTR_CTSMIEN_MASK				(1 << 17) +#define UARTAPP_INTR_RIMIEN_MASK				(1 << 16) + +#define UARTAPP_INTR_ABDIS_MASK				(1 << 11) +#define UARTAPP_INTR_OEIS_MASK				(1 << 10) +#define UARTAPP_INTR_BEIS_MASK				(1 << 9) +#define UARTAPP_INTR_PEIS_MASK				(1 << 8) +#define UARTAPP_INTR_FEIS_MASK				(1 << 7) +#define UARTAPP_INTR_RTIS_MASK				(1 << 6) +#define UARTAPP_INTR_TXIS_MASK				(1 << 5) +#define UARTAPP_INTR_RXIS_MASK				(1 << 4) +#define UARTAPP_INTR_DSRMIS_MASK				(1 << 3) +#define UARTAPP_INTR_DCDMIS_MASK				(1 << 2) +#define UARTAPP_INTR_CTSMIS_MASK				(1 << 1) +#define UARTAPP_INTR_RIMIS_MASK				0x1 + +#define UARTAPP_DATA_DATA_OFFSET				0 +#define UARTAPP_DATA_DATA_MASK				0xFFFFFFFF +#define UARTAPP_STAT_PRESENT_MASK				(1 << 31) +#define UARTAPP_STAT_PRESENT_UNAVAILABLE		(0x0 << 31) +#define UARTAPP_STAT_PRESENT_AVAILABLE			(0x1 << 31) + +#define UARTAPP_STAT_HISPEED_MASK				(1 << 30) +#define UARTAPP_STAT_HISPEED_UNAVAILABLE		(0x0 << 30) +#define UARTAPP_STAT_HISPEED_AVAILABLE			(0x1 << 30) + +#define UARTAPP_STAT_BUSY_MASK				(1 << 29) +#define UARTAPP_STAT_CTS_MASK				(1 << 28) +#define UARTAPP_STAT_TXFE_MASK				(1 << 27) +#define UARTAPP_STAT_RXFF_MASK				(1 << 26) +#define UARTAPP_STAT_TXFF_MASK				(1 << 25) +#define UARTAPP_STAT_RXFE_MASK				(1 << 24) +#define UARTAPP_STAT_RXBYTE_INVALID_OFFSET			20 +#define UARTAPP_STAT_RXBYTE_INVALID_MASK		(0xF << 20) + +#define UARTAPP_STAT_OERR_MASK				(1 << 19) +#define UARTAPP_STAT_BERR_MASK				(1 << 18) +#define UARTAPP_STAT_PERR_MASK				(1 << 17) +#define UARTAPP_STAT_FERR_MASK				(1 << 16) +#define UARTAPP_STAT_RXCOUNT_OFFSET				0 +#define UARTAPP_STAT_RXCOUNT_MASK				0xFFFF + +#define UARTAPP_DEBUG_RXIBAUD_DIV_OFFSET			16 +#define UARTAPP_DEBUG_RXIBAUD_DIV_MASK				(0xFFFF << 16) + +#define UARTAPP_DEBUG_RXFBAUD_DIV_OFFSET			10 +#define UARTAPP_DEBUG_RXFBAUD_DIV_MASK				(0x3F << 10) + +#define UARTAPP_DEBUG_TXDMARUN_MASK			(1 << 5) +#define UARTAPP_DEBUG_RXDMARUN_MASK			(1 << 4) +#define UARTAPP_DEBUG_TXCMDEND_MASK			(1 << 3) +#define UARTAPP_DEBUG_RXCMDEND_MASK			(1 << 2) +#define UARTAPP_DEBUG_TXDMARQ_MASK			(1 << 1) +#define UARTAPP_DEBUG_RXDMARQ_MASK			0x01 + +#define UARTAPP_VERSION_MAJOR_OFFSET			24 +#define UARTAPP_VERSION_MAJOR_MASK			(0xFF << 24) + +#define UARTAPP_VERSION_MINOR_OFFSET			16 +#define UARTAPP_VERSION_MINOR_MASK			(0xFF << 16) + +#define UARTAPP_VERSION_STEP_OFFSET				0 +#define UARTAPP_VERSION_STEP_MASK				0xFFFF + +#define UARTAPP_AUTOBAUD_REFCHAR1_OFFSET			24 +#define UARTAPP_AUTOBAUD_REFCHAR1_MASK				(0xFF << 24) + +#define UARTAPP_AUTOBAUD_REFCHAR0_OFFSET			16 +#define UARTAPP_AUTOBAUD_REFCHAR0_MASK				(0xFF << 16) + +#define UARTAPP_AUTOBAUD_UPDATE_TX_MASK			(1 << 4) +#define UARTAPP_AUTOBAUD_TWO_REF_CHARS_MASK		(1 << 3) +#define UARTAPP_AUTOBAUD_START_WITH_RUNBIT_MASK		(1 << 2) +#define UARTAPP_AUTOBAUD_START_BAUD_DETECT_MASK		(1 << 1) +#define UARTAPP_AUTOBAUD_BAUD_DETECT_ENABLE_MASK		0x01 +#endif /* __ARCH_ARM___UARTAPP_H */ diff --git a/arch/arm/include/asm/arch-omap3/clock.h b/arch/arm/include/asm/arch-omap3/clock.h index 514839c77..be669c156 100644 --- a/arch/arm/include/asm/arch-omap3/clock.h +++ b/arch/arm/include/asm/arch-omap3/clock.h @@ -63,6 +63,4 @@ extern dpll_param *get_36x_core_dpll_param(void);  extern dpll_param *get_36x_per_dpll_param(void);  extern dpll_param *get_36x_per2_dpll_param(void); -extern void *_end_vect, *_start; -  #endif diff --git a/arch/arm/include/asm/arch-omap3/gpio.h b/arch/arm/include/asm/arch-omap3/gpio.h index d72f5e50a..f664c1199 100644 --- a/arch/arm/include/asm/arch-omap3/gpio.h +++ b/arch/arm/include/asm/arch-omap3/gpio.h @@ -2,20 +2,7 @@   * Copyright (c) 2009 Wind River Systems, Inc.   * Tom Rix <Tom.Rix@windriver.com>   * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA + * SPDX-License-Identifier:	GPL-2.0   *   * This work is derived from the linux 2.6.27 kernel source   * To fetch, use the kernel repository @@ -30,10 +17,6 @@   *   * Copyright (C) 2003-2005 Nokia Corporation   * Written by Juha Yrjölä <juha.yrjola@nokia.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation.   */  #ifndef _GPIO_OMAP3_H  #define _GPIO_OMAP3_H diff --git a/arch/arm/include/asm/arch-omap4/clock.h b/arch/arm/include/asm/arch-omap4/clock.h index b2e03d6e1..f3a682a19 100644 --- a/arch/arm/include/asm/arch-omap4/clock.h +++ b/arch/arm/include/asm/arch-omap4/clock.h @@ -149,11 +149,16 @@  /* PRM_VC_VAL_BYPASS */  #define PRM_VC_I2C_CHANNEL_FREQ_KHZ	400 -/* SMPS */ +/* PMIC */  #define SMPS_I2C_SLAVE_ADDR	0x12 +/* TWL6030 SMPS */  #define SMPS_REG_ADDR_VCORE1	0x55  #define SMPS_REG_ADDR_VCORE2	0x5B  #define SMPS_REG_ADDR_VCORE3	0x61 +/* TWL6032 SMPS */ +#define SMPS_REG_ADDR_SMPS1	0x55 +#define SMPS_REG_ADDR_SMPS2	0x5B +#define SMPS_REG_ADDR_SMPS5	0x49  #define PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV		607700  #define PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV	709000 diff --git a/arch/arm/include/asm/arch-omap4/gpio.h b/arch/arm/include/asm/arch-omap4/gpio.h index fdf65edab..72ba1d71a 100644 --- a/arch/arm/include/asm/arch-omap4/gpio.h +++ b/arch/arm/include/asm/arch-omap4/gpio.h @@ -2,20 +2,7 @@   * Copyright (c) 2009 Wind River Systems, Inc.   * Tom Rix <Tom.Rix@windriver.com>   * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA + * SPDX-License-Identifier:	GPL-2.0   *   * This work is derived from the linux 2.6.27 kernel source   * To fetch, use the kernel repository @@ -30,10 +17,6 @@   *   * Copyright (C) 2003-2005 Nokia Corporation   * Written by Juha Yrjölä <juha.yrjola@nokia.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation.   */  #ifndef _GPIO_OMAP4_H  #define _GPIO_OMAP4_H diff --git a/arch/arm/include/asm/arch-omap4/omap.h b/arch/arm/include/asm/arch-omap4/omap.h index 3823a37f2..9129c0dd7 100644 --- a/arch/arm/include/asm/arch-omap4/omap.h +++ b/arch/arm/include/asm/arch-omap4/omap.h @@ -41,6 +41,7 @@  #define OMAP4_CONTROL_ID_CODE_ES2_3	0x6B95C02F  #define OMAP4460_CONTROL_ID_CODE_ES1_0	0x0B94E02F  #define OMAP4460_CONTROL_ID_CODE_ES1_1	0x2B94E02F +#define OMAP4470_CONTROL_ID_CODE_ES1_0	0x0B97502F  /* UART */  #define UART1_BASE		(OMAP44XX_L4_PER_BASE + 0x6a000) diff --git a/arch/arm/include/asm/arch-omap5/clock.h b/arch/arm/include/asm/arch-omap5/clock.h index 3adfc090f..9a2166ce4 100644 --- a/arch/arm/include/asm/arch-omap5/clock.h +++ b/arch/arm/include/asm/arch-omap5/clock.h @@ -149,6 +149,23 @@  /* CM_L3INIT_USBPHY_CLKCTRL */  #define USBPHY_CLKCTRL_OPTFCLKEN_PHY_48M_MASK	8 +/* CM_L3INIT_USB_HOST_HS_CLKCTRL */ +#define OPTFCLKEN_FUNC48M_CLK			(1 << 15) +#define OPTFCLKEN_HSIC480M_P2_CLK		(1 << 14) +#define OPTFCLKEN_HSIC480M_P1_CLK		(1 << 13) +#define OPTFCLKEN_HSIC60M_P2_CLK		(1 << 12) +#define OPTFCLKEN_HSIC60M_P1_CLK		(1 << 11) +#define OPTFCLKEN_UTMI_P3_CLK			(1 << 10) +#define OPTFCLKEN_UTMI_P2_CLK			(1 << 9) +#define OPTFCLKEN_UTMI_P1_CLK			(1 << 8) +#define OPTFCLKEN_HSIC480M_P3_CLK		(1 << 7) +#define OPTFCLKEN_HSIC60M_P3_CLK		(1 << 6) + +/* CM_L3INIT_USB_TLL_HS_CLKCTRL */ +#define OPTFCLKEN_USB_CH0_CLK_ENABLE	(1 << 8) +#define OPTFCLKEN_USB_CH1_CLK_ENABLE	(1 << 9) +#define OPTFCLKEN_USB_CH2_CLK_ENABLE	(1 << 10) +  /* CM_MPU_MPU_CLKCTRL */  #define MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_SHIFT	24  #define MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK	(3 << 24) diff --git a/arch/arm/include/asm/arch-omap5/ehci.h b/arch/arm/include/asm/arch-omap5/ehci.h new file mode 100644 index 000000000..3921e4ab4 --- /dev/null +++ b/arch/arm/include/asm/arch-omap5/ehci.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com* + * Author: Govindraj R <govindraj.raja@ti.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef _EHCI_H +#define _EHCI_H + +#define OMAP_EHCI_BASE				(OMAP54XX_L4_CORE_BASE + 0x64C00) +#define OMAP_UHH_BASE				(OMAP54XX_L4_CORE_BASE + 0x64000) +#define OMAP_USBTLL_BASE			(OMAP54XX_L4_CORE_BASE + 0x62000) + +/* TLL Register Set */ +#define OMAP_USBTLL_SYSCONFIG_SIDLEMODE		(1 << 3) +#define OMAP_USBTLL_SYSCONFIG_ENAWAKEUP		(1 << 2) +#define OMAP_USBTLL_SYSCONFIG_SOFTRESET		(1 << 1) +#define OMAP_USBTLL_SYSCONFIG_CACTIVITY		(1 << 8) +#define OMAP_USBTLL_SYSSTATUS_RESETDONE		1 + +#define OMAP_UHH_SYSCONFIG_SOFTRESET		1 +#define OMAP_UHH_SYSSTATUS_EHCI_RESETDONE	(1 << 2) +#define OMAP_UHH_SYSCONFIG_NOIDLE		(1 << 2) +#define OMAP_UHH_SYSCONFIG_NOSTDBY		(1 << 4) + +#define OMAP_UHH_SYSCONFIG_VAL	(OMAP_UHH_SYSCONFIG_NOIDLE | \ +					OMAP_UHH_SYSCONFIG_NOSTDBY) + +#endif /* _EHCI_H */ diff --git a/arch/arm/include/asm/arch-omap5/gpio.h b/arch/arm/include/asm/arch-omap5/gpio.h index 7c82f9036..9dd03c9fa 100644 --- a/arch/arm/include/asm/arch-omap5/gpio.h +++ b/arch/arm/include/asm/arch-omap5/gpio.h @@ -2,20 +2,7 @@   * Copyright (c) 2009 Wind River Systems, Inc.   * Tom Rix <Tom.Rix@windriver.com>   * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA + * SPDX-License-Identifier:	GPL-2.0   *   * This work is derived from the linux 2.6.27 kernel source   * To fetch, use the kernel repository @@ -30,10 +17,6 @@   *   * Copyright (C) 2003-2005 Nokia Corporation   * Written by Juha Yrjölä <juha.yrjola@nokia.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation.   */  #ifndef _GPIO_OMAP5_H  #define _GPIO_OMAP5_H diff --git a/arch/arm/include/asm/arch-omap5/omap.h b/arch/arm/include/asm/arch-omap5/omap.h index 597c692b9..e9a51d340 100644 --- a/arch/arm/include/asm/arch-omap5/omap.h +++ b/arch/arm/include/asm/arch-omap5/omap.h @@ -153,6 +153,15 @@ struct s32ktimer {  #define EFUSE_4 0x45145100  #endif /* __ASSEMBLY__ */ +/* + * In all cases, the TRM defines the RAM Memory Map for the processor + * and indicates the area for the downloaded image.  We use all of that + * space for download and once up and running may use other parts of the + * map for our needs.  We set a scratch space that is at the end of the + * OMAP5 download area, but within the DRA7xx download area (as it is + * much larger) and do not, at this time, make use of the additional + * space. + */  #ifdef CONFIG_DRA7XX  #define NON_SECURE_SRAM_START	0x40300000  #define NON_SECURE_SRAM_END	0x40380000	/* Not inclusive */ @@ -160,7 +169,7 @@ struct s32ktimer {  #define NON_SECURE_SRAM_START	0x40300000  #define NON_SECURE_SRAM_END	0x40320000	/* Not inclusive */  #endif -#define SRAM_SCRATCH_SPACE_ADDR	NON_SECURE_SRAM_START +#define SRAM_SCRATCH_SPACE_ADDR	0x4031E000  /* base address for indirect vectors (internal boot mode) */  #define SRAM_ROM_VECT_BASE	0x4031F000 diff --git a/arch/arm/include/asm/arch-socfpga/reset_manager.h b/arch/arm/include/asm/arch-socfpga/reset_manager.h index 13d735770..3e9547682 100644 --- a/arch/arm/include/asm/arch-socfpga/reset_manager.h +++ b/arch/arm/include/asm/arch-socfpga/reset_manager.h @@ -11,16 +11,20 @@ void reset_cpu(ulong addr);  void reset_deassert_peripherals_handoff(void);  struct socfpga_reset_manager { -	u32	padding1; +	u32	status;  	u32	ctrl; -	u32	padding2; -	u32	padding3; +	u32	counts; +	u32	padding1;  	u32	mpu_mod_reset;  	u32	per_mod_reset;  	u32	per2_mod_reset;  	u32	brg_mod_reset;  }; +#if defined(CONFIG_SOCFPGA_VIRTUAL_TARGET) +#define RSTMGR_CTRL_SWWARMRSTREQ_LSB 2 +#else  #define RSTMGR_CTRL_SWWARMRSTREQ_LSB 1 +#endif  #endif /* _RESET_MANAGER_H_ */ diff --git a/arch/arm/include/asm/arch-zynq/hardware.h b/arch/arm/include/asm/arch-zynq/hardware.h index 25f0e3d9c..cd6967772 100644 --- a/arch/arm/include/asm/arch-zynq/hardware.h +++ b/arch/arm/include/asm/arch-zynq/hardware.h @@ -17,6 +17,9 @@  #define ZYNQ_SDHCI_BASEADDR1		0xE0101000  #define ZYNQ_I2C_BASEADDR0		0xE0004000  #define ZYNQ_I2C_BASEADDR1		0xE0005000 +#define ZYNQ_SPI_BASEADDR0		0xE0006000 +#define ZYNQ_SPI_BASEADDR1		0xE0007000 +#define ZYNQ_DDRC_BASEADDR		0xF8006000  /* Reflect slcr offsets */  struct slcr_regs { @@ -84,4 +87,11 @@ struct scu_regs {  #define scu_base ((struct scu_regs *)ZYNQ_SCU_BASEADDR) +struct ddrc_regs { +	u32 ddrc_ctrl; /* 0x0 */ +	u32 reserved[60]; +	u32 ecc_scrub; /* 0xF4 */ +}; +#define ddrc_base ((struct ddrc_regs *)ZYNQ_DDRC_BASEADDR) +  #endif /* _ASM_ARCH_HARDWARE_H */ diff --git a/arch/arm/include/asm/arch-zynq/sys_proto.h b/arch/arm/include/asm/arch-zynq/sys_proto.h index 19a4eec6a..110de9092 100644 --- a/arch/arm/include/asm/arch-zynq/sys_proto.h +++ b/arch/arm/include/asm/arch-zynq/sys_proto.h @@ -14,6 +14,7 @@ extern void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk);  extern void zynq_slcr_devcfg_disable(void);  extern void zynq_slcr_devcfg_enable(void);  extern u32 zynq_slcr_get_idcode(void); +extern void zynq_ddrc_init(void);  /* Driver extern functions */  extern int zynq_sdhci_init(u32 regbase); diff --git a/arch/arm/include/asm/ehci-omap.h b/arch/arm/include/asm/ehci-omap.h index 77e81701b..ac83a539a 100644 --- a/arch/arm/include/asm/ehci-omap.h +++ b/arch/arm/include/asm/ehci-omap.h @@ -42,6 +42,7 @@ enum usbhs_omap_port_mode {  /* Values of UHH_REVISION - Note: these are not given in the TRM */  #define OMAP_USBHS_REV1					0x00000010 /* OMAP3 */  #define OMAP_USBHS_REV2					0x50700100 /* OMAP4 */ +#define OMAP_USBHS_REV2_1				0x50700101 /* OMAP5 */  /* UHH Register Set */  #define OMAP_UHH_HOSTCONFIG_INCR4_BURST_EN		(1 << 2) @@ -60,6 +61,7 @@ enum usbhs_omap_port_mode {  #define OMAP_P2_MODE_CLEAR				(3 << 18)  #define OMAP_P2_MODE_TLL				(1 << 18)  #define OMAP_P2_MODE_HSIC				(3 << 18) +#define OMAP_P3_MODE_CLEAR				(3 << 20)  #define OMAP_P3_MODE_HSIC				(3 << 20)  /* EHCI Register Set */ diff --git a/arch/arm/include/asm/imx-common/dma.h b/arch/arm/include/asm/imx-common/dma.h index 5f516ef6e..d5c1f7f25 100644 --- a/arch/arm/include/asm/imx-common/dma.h +++ b/arch/arm/include/asm/imx-common/dma.h @@ -161,4 +161,6 @@ void mxs_dma_init(void);  int mxs_dma_init_channel(int chan);  int mxs_dma_release(int chan); +void mxs_dma_circ_start(int chan, struct mxs_dma_desc *pdesc); +  #endif	/* __DMA_H__ */ diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h index 66f416f99..5e2f027ba 100644 --- a/arch/arm/include/asm/omap_common.h +++ b/arch/arm/include/asm/omap_common.h @@ -622,6 +622,7 @@ static inline u8 is_omap54xx(void)  #define OMAP4430_ES2_3	0x44300230  #define OMAP4460_ES1_0	0x44600100  #define OMAP4460_ES1_1	0x44600110 +#define OMAP4470_ES1_0	0x44700100  /* omap5 */  #define OMAP5430_SILICON_ID_INVALID	0 diff --git a/arch/arm/include/asm/omap_gpio.h b/arch/arm/include/asm/omap_gpio.h index 1ebfa8694..5d25d04c3 100644 --- a/arch/arm/include/asm/omap_gpio.h +++ b/arch/arm/include/asm/omap_gpio.h @@ -2,20 +2,7 @@   * Copyright (c) 2009 Wind River Systems, Inc.   * Tom Rix <Tom.Rix@windriver.com>   * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA + * SPDX-License-Identifier:	GPL-2.0   *   * This work is derived from the linux 2.6.27 kernel source   * To fetch, use the kernel repository @@ -30,10 +17,6 @@   *   * Copyright (C) 2003-2005 Nokia Corporation   * Written by Juha Yrjölä <juha.yrjola@nokia.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation.   */  #ifndef _GPIO_H  #define _GPIO_H diff --git a/arch/blackfin/cpu/gpio.c b/arch/blackfin/cpu/gpio.c index f74a0b7c0..f9aff4d89 100644 --- a/arch/blackfin/cpu/gpio.c +++ b/arch/blackfin/cpu/gpio.c @@ -247,7 +247,7 @@ static struct {  static void portmux_setup(unsigned short per)  { -	u16 y, offset, muxreg; +	u16 y, offset, muxreg, mask;  	u16 function = P_FUNCT2MUX(per);  	for (y = 0; y < ARRAY_SIZE(port_mux_lut); y++) { @@ -258,12 +258,13 @@ static void portmux_setup(unsigned short per)  			offset = port_mux_lut[y].offset;  			muxreg = bfin_read_PORT_MUX(); -			if (offset != 1) -				muxreg &= ~(1 << offset); +			if (offset == 1) +				mask = 3;  			else -				muxreg &= ~(3 << 1); +				mask = 1; -			muxreg |= (function << offset); +			muxreg &= ~(mask << offset); +			muxreg |= ((function & mask) << offset);  			bfin_write_PORT_MUX(muxreg);  		}  	} @@ -662,8 +663,8 @@ void special_gpio_free(unsigned gpio)  		return;  	} -	reserve(special_gpio, gpio); -	reserve(peri, gpio); +	unreserve(special_gpio, gpio); +	unreserve(peri, gpio);  	set_label(gpio, "free");  }  #endif diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c index 10223bdb7..17d1f468d 100644 --- a/arch/blackfin/lib/board.c +++ b/arch/blackfin/lib/board.c @@ -67,6 +67,7 @@ static int display_banner(void)  static int init_baudrate(void)  {  	gd->baudrate = getenv_ulong("baudrate", 10, CONFIG_BAUDRATE); +	gd->bd->bi_baudrate = gd->baudrate;  	return 0;  } @@ -235,8 +236,6 @@ static int global_board_data_init(void)  	bd->bi_sclk = get_sclk();  	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;  	bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE; -	bd->bi_baudrate = (gd->baudrate > 0) -		? simple_strtoul(gd->baudrate, NULL, 10) : CONFIG_BAUDRATE;  	return 0;  } diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk index 6692f24a0..fc545a9ee 100644 --- a/arch/microblaze/config.mk +++ b/arch/microblaze/config.mk @@ -15,5 +15,3 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000  PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__  LDSCRIPT ?= $(SRCTREE)/$(CPUDIR)/u-boot.lds - -CONFIG_ARCH_DEVICE_TREE := microblaze diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c index 8267191fd..f7182f27e 100644 --- a/arch/microblaze/lib/board.c +++ b/arch/microblaze/lib/board.c @@ -16,6 +16,7 @@  #include <stdio_dev.h>  #include <serial.h>  #include <net.h> +#include <spi.h>  #include <linux/compiler.h>  #include <asm/processor.h>  #include <asm/microblaze_intc.h> @@ -147,6 +148,10 @@ void board_init_f(ulong not_used)  	}  #endif +#ifdef CONFIG_SPI +	spi_init(); +#endif +  	/* relocate environment function pointers etc. */  	env_relocate(); diff --git a/arch/mips/include/asm/config.h b/arch/mips/include/asm/config.h index cd2973478..3a891ba62 100644 --- a/arch/mips/include/asm/config.h +++ b/arch/mips/include/asm/config.h @@ -7,4 +7,7 @@  #ifndef _ASM_CONFIG_H_  #define _ASM_CONFIG_H_ +#define CONFIG_LMB +#define CONFIG_SYS_BOOT_RAMDISK_HIGH +  #endif diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile index e9f82f711..f91406c06 100644 --- a/arch/mips/lib/Makefile +++ b/arch/mips/lib/Makefile @@ -19,11 +19,7 @@ LGOBJS	:= $(addprefix $(obj),$(GLSOBJS))  SOBJS-y	+=  COBJS-y	+= board.o -ifeq ($(CONFIG_QEMU_MIPS),y) -COBJS-$(CONFIG_CMD_BOOTM) += bootm_qemu_mips.o -else  COBJS-$(CONFIG_CMD_BOOTM) += bootm.o -endif  SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)  OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index ade9af47e..66340ea47 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -17,23 +17,148 @@ DECLARE_GLOBAL_DATA_PTR;  #define	LINUX_MAX_ENVS		256  #define	LINUX_MAX_ARGS		256 +#if defined(CONFIG_QEMU_MALTA) +#define mips_boot_qemu_malta	1 +#else +#define mips_boot_qemu_malta	0 +#endif +  static int linux_argc;  static char **linux_argv; +static char *linux_argp;  static char **linux_env;  static char *linux_env_p;  static int linux_env_idx; -static void linux_params_init(ulong start, char *commandline); -static void linux_env_set(char *env_name, char *env_val); +static ulong arch_get_sp(void) +{ +	ulong ret; + +	__asm__ __volatile__("move %0, $sp" : "=r"(ret) : ); + +	return ret; +} + +void arch_lmb_reserve(struct lmb *lmb) +{ +	ulong sp; + +	sp = arch_get_sp(); +	debug("## Current stack ends at 0x%08lx\n", sp); + +	/* adjust sp by 4K to be safe */ +	sp -= 4096; +	lmb_reserve(lmb, sp, CONFIG_SYS_SDRAM_BASE + gd->ram_size - sp); +} + +static void linux_cmdline_init(void) +{ +	linux_argc = 1; +	linux_argv = (char **)UNCACHED_SDRAM(gd->bd->bi_boot_params); +	linux_argv[0] = 0; +	linux_argp = (char *)(linux_argv + LINUX_MAX_ARGS); +} + +static void linux_cmdline_set(const char *value, size_t len) +{ +	linux_argv[linux_argc] = linux_argp; +	memcpy(linux_argp, value, len); +	linux_argp[len] = 0; + +	linux_argp += len + 1; +	linux_argc++; +} + +static void linux_cmdline_dump(void) +{ +	int i; + +	debug("## cmdline argv at 0x%p, argp at 0x%p\n", +	      linux_argv, linux_argp); + +	for (i = 1; i < linux_argc; i++) +		debug("   arg %03d: %s\n", i, linux_argv[i]); +} + +static void boot_cmdline_linux(bootm_headers_t *images) +{ +	const char *bootargs, *next, *quote; + +	linux_cmdline_init(); + +	bootargs = getenv("bootargs"); +	if (!bootargs) +		return; + +	next = bootargs; + +	while (bootargs && *bootargs && linux_argc < LINUX_MAX_ARGS) { +		quote = strchr(bootargs, '"'); +		next = strchr(bootargs, ' '); + +		while (next && quote && quote < next) { +			/* +			 * we found a left quote before the next blank +			 * now we have to find the matching right quote +			 */ +			next = strchr(quote + 1, '"'); +			if (next) { +				quote = strchr(next + 1, '"'); +				next = strchr(next + 1, ' '); +			} +		} + +		if (!next) +			next = bootargs + strlen(bootargs); + +		linux_cmdline_set(bootargs, next - bootargs); + +		if (*next) +			next++; + +		bootargs = next; +	} + +	linux_cmdline_dump(); +} + +static void linux_env_init(void) +{ +	linux_env = (char **)(((ulong) linux_argp + 15) & ~15); +	linux_env[0] = 0; +	linux_env_p = (char *)(linux_env + LINUX_MAX_ENVS); +	linux_env_idx = 0; +} + +static void linux_env_set(const char *env_name, const char *env_val) +{ +	if (linux_env_idx < LINUX_MAX_ENVS - 1) { +		linux_env[linux_env_idx] = linux_env_p; + +		strcpy(linux_env_p, env_name); +		linux_env_p += strlen(env_name); + +		if (mips_boot_qemu_malta) { +			linux_env_p++; +			linux_env[++linux_env_idx] = linux_env_p; +		} else { +			*linux_env_p++ = '='; +		} + +		strcpy(linux_env_p, env_val); +		linux_env_p += strlen(env_val); + +		linux_env_p++; +		linux_env[++linux_env_idx] = 0; +	} +}  static void boot_prep_linux(bootm_headers_t *images)  { -	char *commandline = getenv("bootargs");  	char env_buf[12]; -	char *cp; - -	linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline); +	const char *cp; +	ulong rd_start, rd_size;  #ifdef CONFIG_MEMSIZE_IN_BYTES  	sprintf(env_buf, "%lu", (ulong)gd->ram_size); @@ -41,15 +166,20 @@ static void boot_prep_linux(bootm_headers_t *images)  #else  	sprintf(env_buf, "%lu", (ulong)(gd->ram_size >> 20));  	debug("## Giving linux memsize in MB, %lu\n", -		(ulong)(gd->ram_size >> 20)); +	      (ulong)(gd->ram_size >> 20));  #endif /* CONFIG_MEMSIZE_IN_BYTES */ +	rd_start = UNCACHED_SDRAM(images->initrd_start); +	rd_size = images->initrd_end - images->initrd_start; + +	linux_env_init(); +  	linux_env_set("memsize", env_buf); -	sprintf(env_buf, "0x%08X", (uint) UNCACHED_SDRAM(images->rd_start)); +	sprintf(env_buf, "0x%08lX", rd_start);  	linux_env_set("initrd_start", env_buf); -	sprintf(env_buf, "0x%X", (uint) (images->rd_end - images->rd_start)); +	sprintf(env_buf, "0x%lX", rd_size);  	linux_env_set("initrd_size", env_buf);  	sprintf(env_buf, "0x%08X", (uint) (gd->bd->bi_flashstart)); @@ -65,33 +195,42 @@ static void boot_prep_linux(bootm_headers_t *images)  	cp = getenv("eth1addr");  	if (cp)  		linux_env_set("eth1addr", cp); + +	if (mips_boot_qemu_malta) +		linux_env_set("modetty0", "38400n8r");  }  static void boot_jump_linux(bootm_headers_t *images)  { -	void (*theKernel) (int, char **, char **, int *); - -	/* find kernel entry point */ -	theKernel = (void (*)(int, char **, char **, int *))images->ep; +	typedef void __noreturn (*kernel_entry_t)(int, ulong, ulong, ulong); +	kernel_entry_t kernel = (kernel_entry_t) images->ep; +	ulong linux_extra = 0; -	debug("## Transferring control to Linux (at address %08lx) ...\n", -		(ulong) theKernel); +	debug("## Transferring control to Linux (at address %p) ...\n", kernel);  	bootstage_mark(BOOTSTAGE_ID_RUN_OS); +	if (mips_boot_qemu_malta) +		linux_extra = gd->ram_size; +  	/* we assume that the kernel is in place */  	printf("\nStarting kernel ...\n\n"); -	theKernel(linux_argc, linux_argv, linux_env, 0); +	kernel(linux_argc, (ulong)linux_argv, (ulong)linux_env, linux_extra);  }  int do_bootm_linux(int flag, int argc, char * const argv[],  			bootm_headers_t *images)  {  	/* No need for those on MIPS */ -	if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE) +	if (flag & BOOTM_STATE_OS_BD_T)  		return -1; +	if (flag & BOOTM_STATE_OS_CMDLINE) { +		boot_cmdline_linux(images); +		return 0; +	} +  	if (flag & BOOTM_STATE_OS_PREP) {  		boot_prep_linux(images);  		return 0; @@ -102,76 +241,10 @@ int do_bootm_linux(int flag, int argc, char * const argv[],  		return 0;  	} +	boot_cmdline_linux(images);  	boot_prep_linux(images);  	boot_jump_linux(images);  	/* does not return */  	return 1;  } - -static void linux_params_init(ulong start, char *line) -{ -	char *next, *quote, *argp; - -	linux_argc = 1; -	linux_argv = (char **) start; -	linux_argv[0] = 0; -	argp = (char *) (linux_argv + LINUX_MAX_ARGS); - -	next = line; - -	while (line && *line && linux_argc < LINUX_MAX_ARGS) { -		quote = strchr(line, '"'); -		next = strchr(line, ' '); - -		while (next && quote && quote < next) { -			/* we found a left quote before the next blank -			 * now we have to find the matching right quote -			 */ -			next = strchr(quote + 1, '"'); -			if (next) { -				quote = strchr(next + 1, '"'); -				next = strchr(next + 1, ' '); -			} -		} - -		if (!next) -			next = line + strlen(line); - -		linux_argv[linux_argc] = argp; -		memcpy(argp, line, next - line); -		argp[next - line] = 0; - -		argp += next - line + 1; -		linux_argc++; - -		if (*next) -			next++; - -		line = next; -	} - -	linux_env = (char **) (((ulong) argp + 15) & ~15); -	linux_env[0] = 0; -	linux_env_p = (char *) (linux_env + LINUX_MAX_ENVS); -	linux_env_idx = 0; -} - -static void linux_env_set(char *env_name, char *env_val) -{ -	if (linux_env_idx < LINUX_MAX_ENVS - 1) { -		linux_env[linux_env_idx] = linux_env_p; - -		strcpy(linux_env_p, env_name); -		linux_env_p += strlen(env_name); - -		strcpy(linux_env_p, "="); -		linux_env_p += 1; - -		strcpy(linux_env_p, env_val); -		linux_env_p += strlen(env_val); - -		linux_env_p++; -		linux_env[++linux_env_idx] = 0; -	} -} diff --git a/arch/mips/lib/bootm_qemu_mips.c b/arch/mips/lib/bootm_qemu_mips.c deleted file mode 100644 index 910ab7363..000000000 --- a/arch/mips/lib/bootm_qemu_mips.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * (C) Copyright 2008 - * Jean-Christophe PLAGNIOL-VILLARD <jcplagniol@jcrosoft.com> - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#include <common.h> -#include <command.h> -#include <image.h> -#include <asm/byteorder.h> -#include <asm/addrspace.h> - -DECLARE_GLOBAL_DATA_PTR; - -int do_bootm_linux(int flag, int argc, char * const argv[], -			bootm_headers_t *images) -{ -	void (*theKernel) (int, char **, char **, int *); -	char *bootargs = getenv("bootargs"); -	char *start; -	uint len; - -	/* find kernel entry point */ -	theKernel = (void (*)(int, char **, char **, int *))images->ep; - -	bootstage_mark(BOOTSTAGE_ID_RUN_OS); - -	debug("## Transferring control to Linux (at address %08lx) ...\n", -		(ulong) theKernel); - -	gd->bd->bi_boot_params = gd->bd->bi_memstart + (16 << 20) - 256; -	debug("%-12s= 0x%08lX\n", "boot_params", (ulong)gd->bd->bi_boot_params); - -	/* set Magic */ -	*(int32_t *)(gd->bd->bi_boot_params - 4) = 0x12345678; -	/* set ram_size */ -	*(int32_t *)(gd->bd->bi_boot_params - 8) = gd->ram_size; - -	start = (char *)gd->bd->bi_boot_params; - -	len = strlen(bootargs); - -	strncpy(start, bootargs, len + 1); - -	start += len; - -	len = images->rd_end - images->rd_start; -	if (len > 0) { -		start += sprintf(start, " rd_start=0x%08X rd_size=0x%0X", -		(uint) UNCACHED_SDRAM(images->rd_start), -		(uint) len); -	} - -	/* we assume that the kernel is in place */ -	printf("\nStarting kernel ...\n\n"); - -	theKernel(0, NULL, NULL, 0); - -	/* does not return */ -	return 1; -} diff --git a/arch/nds32/include/asm/dma-mapping.h b/arch/nds32/include/asm/dma-mapping.h new file mode 100644 index 000000000..25e5a1b6e --- /dev/null +++ b/arch/nds32/include/asm/dma-mapping.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2013 Andes Technology Corporation + * Ken Kuo, Andes Technology Corporation <ken_kuo@andestech.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ +#ifndef __ASM_NDS_DMA_MAPPING_H +#define __ASM_NDS_DMA_MAPPING_H + +enum dma_data_direction { +	DMA_BIDIRECTIONAL	= 0, +	DMA_TO_DEVICE		= 1, +	DMA_FROM_DEVICE		= 2, +}; + +static void *dma_alloc_coherent(size_t len, unsigned long *handle) +{ +	*handle = (unsigned long)memalign(ARCH_DMA_MINALIGN, len); +	return (void *)*handle; +} + +static inline unsigned long dma_map_single(volatile void *vaddr, size_t len, +					   enum dma_data_direction dir) +{ +	return (unsigned long)vaddr; +} + +static inline void dma_unmap_single(volatile void *vaddr, size_t len, +				    unsigned long paddr) +{ +} + +#endif /* __ASM_NDS_DMA_MAPPING_H */ diff --git a/arch/powerpc/cpu/mpc824x/cpu.c b/arch/powerpc/cpu/mpc824x/cpu.c index ee69e495b..eaa4e8707 100644 --- a/arch/powerpc/cpu/mpc824x/cpu.c +++ b/arch/powerpc/cpu/mpc824x/cpu.c @@ -45,12 +45,10 @@ int checkcpu (void)  		return -1;		/* no valid CPU revision info */  	} -	printf (" at %s MHz:", strmhz (buf, clock)); +	printf(" at %s MHz: ", strmhz(buf, clock)); -	printf (" %u kB I-Cache", checkicache () >> 10); -	printf (" %u kB D-Cache", checkdcache () >> 10); - -	puts ("\n"); +	print_size(checkicache(), " I-Cache "); +	print_size(checkdcache(), " D-Cache\n");  	return 0;  } diff --git a/arch/powerpc/cpu/mpc83xx/pcie.c b/arch/powerpc/cpu/mpc83xx/pcie.c index 09970b058..28c25e5fe 100644 --- a/arch/powerpc/cpu/mpc83xx/pcie.c +++ b/arch/powerpc/cpu/mpc83xx/pcie.c @@ -299,6 +299,8 @@ static void mpc83xx_pcie_init_bus(int bus, struct pci_region *reg)  	printf("PCIE%d: ", bus); +#define PCI_LTSSM	0x404 /* PCIe Link Training, Status State Machine */ +#define PCI_LTSSM_L0	0x16 /* L0 state */  	reg16 = in_le16(hose_cfg_base + PCI_LTSSM);  	if (reg16 >= PCI_LTSSM_L0)  		printf("link\n"); diff --git a/arch/powerpc/cpu/mpc85xx/Makefile b/arch/powerpc/cpu/mpc85xx/Makefile index 0d1e8f1f0..f70f0d747 100644 --- a/arch/powerpc/cpu/mpc85xx/Makefile +++ b/arch/powerpc/cpu/mpc85xx/Makefile @@ -46,6 +46,7 @@ COBJS-$(CONFIG_MPC8568) += ddr-gen2.o  COBJS-$(CONFIG_MPC8544) += ddr-gen2.o  # supports ddr1/2/3 +COBJS-$(CONFIG_PPC_C29X)	+= ddr-gen3.o  COBJS-$(CONFIG_MPC8572) += ddr-gen3.o  COBJS-$(CONFIG_MPC8536) += ddr-gen3.o  COBJS-$(CONFIG_MPC8569)	+= ddr-gen3.o @@ -100,6 +101,7 @@ COBJS-$(CONFIG_SYS_FSL_QORIQ_CHASSIS1) += fsl_corenet_serdes.o  COBJS-$(CONFIG_SYS_FSL_QORIQ_CHASSIS2) += fsl_corenet2_serdes.o  # SoC specific SERDES support +COBJS-$(CONFIG_PPC_C29X)	+= c29x_serdes.o  COBJS-$(CONFIG_MPC8536) += mpc8536_serdes.o  COBJS-$(CONFIG_MPC8544) += mpc8544_serdes.o  COBJS-$(CONFIG_MPC8548) += mpc8548_serdes.o diff --git a/arch/powerpc/cpu/mpc85xx/b4860_ids.c b/arch/powerpc/cpu/mpc85xx/b4860_ids.c index 53c6a7faf..39b8e3ecc 100644 --- a/arch/powerpc/cpu/mpc85xx/b4860_ids.c +++ b/arch/powerpc/cpu/mpc85xx/b4860_ids.c @@ -41,8 +41,8 @@ struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = {  #ifdef CONFIG_SYS_SRIO  struct srio_liodn_id_table srio_liodn_tbl[] = { -	SET_SRIO_LIODN_1(1, 307), -	SET_SRIO_LIODN_1(2, 387), +	SET_SRIO_LIODN_BASE(1, 307), +	SET_SRIO_LIODN_BASE(2, 387),  };  int srio_liodn_tbl_sz = ARRAY_SIZE(srio_liodn_tbl);  #endif @@ -112,10 +112,10 @@ int sec_liodn_tbl_sz = ARRAY_SIZE(sec_liodn_tbl);  #ifdef CONFIG_SYS_DPAA_RMAN  struct liodn_id_table rman_liodn_tbl[] = {  	/* Set RMan block 0-3 liodn offset */ -	SET_RMAN_LIODN(0, 678), -	SET_RMAN_LIODN(1, 679), -	SET_RMAN_LIODN(2, 680), -	SET_RMAN_LIODN(3, 681), +	SET_RMAN_LIODN(0, 6), +	SET_RMAN_LIODN(1, 7), +	SET_RMAN_LIODN(2, 8), +	SET_RMAN_LIODN(3, 9),  };  int rman_liodn_tbl_sz = ARRAY_SIZE(rman_liodn_tbl);  #endif diff --git a/arch/powerpc/cpu/mpc85xx/c29x_serdes.c b/arch/powerpc/cpu/mpc85xx/c29x_serdes.c new file mode 100644 index 000000000..51972cb7c --- /dev/null +++ b/arch/powerpc/cpu/mpc85xx/c29x_serdes.c @@ -0,0 +1,62 @@ +/* + * Copyright 2013 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <config.h> +#include <common.h> +#include <asm/io.h> +#include <asm/immap_85xx.h> +#include <asm/fsl_serdes.h> + +#define SRDS1_MAX_LANES		4 + +static u32 serdes1_prtcl_map; + +struct serdes_config { +	u32 protocol; +	u8 lanes[SRDS1_MAX_LANES]; +}; + +static const struct serdes_config serdes1_cfg_tbl[] = { +	/* SerDes 1 */ +	{1, {PCIE1, PCIE1, PCIE1, PCIE1} }, +	{2, {PCIE1, PCIE1, PCIE1, PCIE1} }, +	{3, {PCIE1, PCIE1, NONE, NONE} }, +	{4, {PCIE1, PCIE1, NONE, NONE} }, +	{5, {PCIE1, NONE, NONE, NONE} }, +	{6, {PCIE1, NONE, NONE, NONE} }, +	{} +}; + +int is_serdes_configured(enum srds_prtcl device) +{ +	return (1 << device) & serdes1_prtcl_map; +} + +void fsl_serdes_init(void) +{ +	ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; +	u32 pordevsr = in_be32(&gur->pordevsr); +	u32 srds_cfg = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> +				MPC85xx_PORDEVSR_IO_SEL_SHIFT; +	const struct serdes_config *ptr; +	int lane; + +	debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg); + +	if (srds_cfg > ARRAY_SIZE(serdes1_cfg_tbl)) { +		printf("Invalid PORDEVSR[IO_SEL_SRDS] = %d\n", srds_cfg); +		return; +	} + +	ptr = &serdes1_cfg_tbl[srds_cfg]; +	if (!ptr->protocol) +		return; + +	for (lane = 0; lane < SRDS1_MAX_LANES; lane++) { +		enum srds_prtcl lane_prtcl = ptr->lanes[lane]; +		serdes1_prtcl_map |= (1 << lane_prtcl); +	} +} diff --git a/arch/powerpc/cpu/mpc85xx/cmd_errata.c b/arch/powerpc/cpu/mpc85xx/cmd_errata.c index 5cd02ccde..eea264b15 100644 --- a/arch/powerpc/cpu/mpc85xx/cmd_errata.c +++ b/arch/powerpc/cpu/mpc85xx/cmd_errata.c @@ -245,6 +245,18 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  #ifdef CONFIG_SYS_FSL_ERRATUM_A006593  	puts("Work-around for Erratum A006593 enabled\n");  #endif +#ifdef CONFIG_SYS_FSL_ERRATUM_SEC_A003571 +	if (IS_SVR_REV(svr, 1, 0)) +		puts("Work-around for Erratum A003571 enabled\n"); +#endif +#ifdef CONFIG_SYS_FSL_ERRATUM_A005812 +	puts("Work-around for Erratum A-005812 enabled\n"); +#endif +#ifdef CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +	if ((SVR_SOC_VER(svr) == SVR_8548 && IS_SVR_REV(svr, 3, 1)) || +	    (SVR_REV(svr) <= CONFIG_SYS_FSL_A004447_SVR_REV)) +		puts("Work-around for Erratum I2C-A004447 enabled\n"); +#endif  	return 0;  } diff --git a/arch/powerpc/cpu/mpc85xx/cpu.c b/arch/powerpc/cpu/mpc85xx/cpu.c index 91ac4ee61..1a0196c7c 100644 --- a/arch/powerpc/cpu/mpc85xx/cpu.c +++ b/arch/powerpc/cpu/mpc85xx/cpu.c @@ -44,10 +44,10 @@ int checkcpu (void)  	uint major, minor;  	struct cpu_type *cpu;  	char buf1[32], buf2[32]; -#if (defined(CONFIG_DDR_CLK_FREQ) || \ -	defined(CONFIG_FSL_CORENET)) && !defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2) -	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); -#endif /* CONFIG_FSL_CORENET */ +#if defined(CONFIG_DDR_CLK_FREQ) || defined(CONFIG_FSL_CORENET) +	ccsr_gur_t __iomem *gur = +		(void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); +#endif  	/*  	 * Cornet platforms use ddr sync bit in RCW to indicate sync vs async @@ -135,81 +135,97 @@ int checkcpu (void)  		if (!(i & 3))  			printf ("\n       ");  		printf("CPU%d:%-4s MHz, ", core, -			strmhz(buf1, sysinfo.freqProcessor[core])); +			strmhz(buf1, sysinfo.freq_processor[core]));  	} -	printf("\n       CCB:%-4s MHz,\n", strmhz(buf1, sysinfo.freqSystemBus)); +	printf("\n       CCB:%-4s MHz,", strmhz(buf1, sysinfo.freq_systembus)); +	printf("\n");  #ifdef CONFIG_FSL_CORENET  	if (ddr_sync == 1) {  		printf("       DDR:%-4s MHz (%s MT/s data rate) "  			"(Synchronous), ", -			strmhz(buf1, sysinfo.freqDDRBus/2), -			strmhz(buf2, sysinfo.freqDDRBus)); +			strmhz(buf1, sysinfo.freq_ddrbus/2), +			strmhz(buf2, sysinfo.freq_ddrbus));  	} else {  		printf("       DDR:%-4s MHz (%s MT/s data rate) "  			"(Asynchronous), ", -			strmhz(buf1, sysinfo.freqDDRBus/2), -			strmhz(buf2, sysinfo.freqDDRBus)); +			strmhz(buf1, sysinfo.freq_ddrbus/2), +			strmhz(buf2, sysinfo.freq_ddrbus));  	}  #else  	switch (ddr_ratio) {  	case 0x0:  		printf("       DDR:%-4s MHz (%s MT/s data rate), ", -			strmhz(buf1, sysinfo.freqDDRBus/2), -			strmhz(buf2, sysinfo.freqDDRBus)); +			strmhz(buf1, sysinfo.freq_ddrbus/2), +			strmhz(buf2, sysinfo.freq_ddrbus));  		break;  	case 0x7:  		printf("       DDR:%-4s MHz (%s MT/s data rate) "  			"(Synchronous), ", -			strmhz(buf1, sysinfo.freqDDRBus/2), -			strmhz(buf2, sysinfo.freqDDRBus)); +			strmhz(buf1, sysinfo.freq_ddrbus/2), +			strmhz(buf2, sysinfo.freq_ddrbus));  		break;  	default:  		printf("       DDR:%-4s MHz (%s MT/s data rate) "  			"(Asynchronous), ", -			strmhz(buf1, sysinfo.freqDDRBus/2), -			strmhz(buf2, sysinfo.freqDDRBus)); +			strmhz(buf1, sysinfo.freq_ddrbus/2), +			strmhz(buf2, sysinfo.freq_ddrbus));  		break;  	}  #endif  #if defined(CONFIG_FSL_LBC) -	if (sysinfo.freqLocalBus > LCRR_CLKDIV) { -		printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freqLocalBus)); +	if (sysinfo.freq_localbus > LCRR_CLKDIV) { +		printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freq_localbus));  	} else {  		printf("LBC: unknown (LCRR[CLKDIV] = 0x%02lx)\n", -		       sysinfo.freqLocalBus); +		       sysinfo.freq_localbus);  	}  #endif  #if defined(CONFIG_FSL_IFC) -	printf("IFC:%-4s MHz\n", strmhz(buf1, sysinfo.freqLocalBus)); +	printf("IFC:%-4s MHz\n", strmhz(buf1, sysinfo.freq_localbus));  #endif  #ifdef CONFIG_CPM2 -	printf("CPM:   %s MHz\n", strmhz(buf1, sysinfo.freqSystemBus)); +	printf("CPM:   %s MHz\n", strmhz(buf1, sysinfo.freq_systembus));  #endif  #ifdef CONFIG_QE -	printf("       QE:%-4s MHz\n", strmhz(buf1, sysinfo.freqQE)); +	printf("       QE:%-4s MHz\n", strmhz(buf1, sysinfo.freq_qe));  #endif  #ifdef CONFIG_SYS_DPAA_FMAN  	for (i = 0; i < CONFIG_SYS_NUM_FMAN; i++) {  		printf("       FMAN%d: %s MHz\n", i + 1, -			strmhz(buf1, sysinfo.freqFMan[i])); +			strmhz(buf1, sysinfo.freq_fman[i]));  	}  #endif  #ifdef CONFIG_SYS_DPAA_QBMAN -	printf("       QMAN:  %s MHz\n", strmhz(buf1, sysinfo.freqQMAN)); +	printf("       QMAN:  %s MHz\n", strmhz(buf1, sysinfo.freq_qman));  #endif  #ifdef CONFIG_SYS_DPAA_PME -	printf("       PME:   %s MHz\n", strmhz(buf1, sysinfo.freqPME)); +	printf("       PME:   %s MHz\n", strmhz(buf1, sysinfo.freq_pme));  #endif -	puts("L1:    D-cache 32 kB enabled\n       I-cache 32 kB enabled\n"); +	puts("L1:    D-cache 32 KiB enabled\n       I-cache 32 KiB enabled\n"); + +#ifdef CONFIG_FSL_CORENET +	/* Display the RCW, so that no one gets confused as to what RCW +	 * we're actually using for this boot. +	 */ +	puts("Reset Configuration Word (RCW):"); +	for (i = 0; i < ARRAY_SIZE(gur->rcwsr); i++) { +		u32 rcw = in_be32(&gur->rcwsr[i]); + +		if ((i % 4) == 0) +			printf("\n       %08x:", i * 4); +		printf(" %08x", rcw); +	} +	puts("\n"); +#endif  	return 0;  } diff --git a/arch/powerpc/cpu/mpc85xx/cpu_init.c b/arch/powerpc/cpu/mpc85xx/cpu_init.c index 25beda233..6036333ea 100644 --- a/arch/powerpc/cpu/mpc85xx/cpu_init.c +++ b/arch/powerpc/cpu/mpc85xx/cpu_init.c @@ -22,6 +22,7 @@  #include <asm/fsl_law.h>  #include <asm/fsl_serdes.h>  #include <asm/fsl_srio.h> +#include <fsl_usb.h>  #include <hwconfig.h>  #include <linux/compiler.h>  #include "mp.h" @@ -166,7 +167,8 @@ static void enable_cpc(void)  	} -	printf("Corenet Platform Cache: %d KB enabled\n", size); +	puts("Corenet Platform Cache: "); +	print_size(size * 1024, " enabled\n");  }  static void invalidate_cpc(void) @@ -355,7 +357,9 @@ int cpu_init_r(void)  	extern int spin_table_compat;  	const char *spin;  #endif - +#ifdef CONFIG_SYS_FSL_ERRATUM_SEC_A003571 +	ccsr_sec_t __iomem *sec = (void *)CONFIG_SYS_FSL_SEC_ADDR; +#endif  #if defined(CONFIG_SYS_P4080_ERRATUM_CPU22) || \  	defined(CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011)  	/* @@ -399,6 +403,14 @@ int cpu_init_r(void)  		sync();  	}  #endif +#ifdef CONFIG_SYS_FSL_ERRATUM_A005812 +	/* +	 * A-005812 workaround sets bit 32 of SPR 976 for SoCs running +	 * in write shadow mode. Checking DCWS before setting SPR 976. +	 */ +	if (mfspr(L1CSR2) & L1CSR2_DCWS) +		mtspr(SPRN_HDBCR0, (mfspr(SPRN_HDBCR0) | 0x80000000)); +#endif  #if defined(CONFIG_PPC_SPINTABLE_COMPATIBLE) && defined(CONFIG_MP)  	spin = getenv("spin_table_compat"); @@ -448,28 +460,28 @@ int cpu_init_r(void)  	case 0x1:  		if (ver == SVR_8540 || ver == SVR_8560   ||  		    ver == SVR_8541 || ver == SVR_8555) { -			puts("128 KB "); -			/* set L2E=1, L2I=1, & L2BLKSZ=1 (128 Kbyte) */ +			puts("128 KiB "); +			/* set L2E=1, L2I=1, & L2BLKSZ=1 (128 KiBibyte) */  			cache_ctl = 0xc4000000;  		} else { -			puts("256 KB "); +			puts("256 KiB ");  			cache_ctl = 0xc0000000; /* set L2E=1, L2I=1, & L2SRAM=0 */  		}  		break;  	case 0x2:  		if (ver == SVR_8540 || ver == SVR_8560   ||  		    ver == SVR_8541 || ver == SVR_8555) { -			puts("256 KB "); -			/* set L2E=1, L2I=1, & L2BLKSZ=2 (256 Kbyte) */ +			puts("256 KiB "); +			/* set L2E=1, L2I=1, & L2BLKSZ=2 (256 KiBibyte) */  			cache_ctl = 0xc8000000;  		} else { -			puts ("512 KB "); +			puts("512 KiB ");  			/* set L2E=1, L2I=1, & L2SRAM=0 */  			cache_ctl = 0xc0000000;  		}  		break;  	case 0x3: -		puts("1024 KB "); +		puts("1024 KiB ");  		/* set L2E=1, L2I=1, & L2SRAM=0 */  		cache_ctl = 0xc0000000;  		break; @@ -517,13 +529,14 @@ int cpu_init_r(void)  	if (CONFIG_SYS_INIT_L2CSR0 & L2CSR0_L2E) {  		while (!(mfspr(SPRN_L2CSR0) & L2CSR0_L2E))  			; -		printf("%d KB enabled\n", (l2cfg0 & 0x3fff) * 64); +		print_size((l2cfg0 & 0x3fff) * 64 * 1024, " enabled\n");  	}  skip_l2:  #elif defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2)  	if (l2cache->l2csr0 & L2CSR0_L2E) -		printf("%d KB enabled\n", (l2cache->l2cfg0 & 0x3fff) * 64); +		print_size((l2cache->l2cfg0 & 0x3fff) * 64 * 1024, +			   " enabled\n");  	enable_cluster_l2();  #else @@ -532,8 +545,16 @@ skip_l2:  	enable_cpc(); +#ifndef CONFIG_SYS_FSL_NO_SERDES  	/* needs to be in ram since code uses global static vars */  	fsl_serdes_init(); +#endif + +#ifdef CONFIG_SYS_FSL_ERRATUM_SEC_A003571 +#define MCFGR_AXIPIPE 0x000000f0 +	if (IS_SVR_REV(svr, 1, 0)) +		clrbits_be32(&sec->mcfgr, MCFGR_AXIPIPE); +#endif  #ifdef CONFIG_SYS_FSL_ERRATUM_A005871  	if (IS_SVR_REV(svr, 1, 0)) { @@ -595,7 +616,7 @@ skip_l2:  #ifdef CONFIG_SYS_FSL_USB1_PHY_ENABLE  	{ -		ccsr_usb_phy_t *usb_phy1 = +		struct ccsr_usb_phy __iomem *usb_phy1 =  			(void *)CONFIG_SYS_MPC85xx_USB1_PHY_ADDR;  		out_be32(&usb_phy1->usb_enable_override,  				CONFIG_SYS_FSL_USB_ENABLE_OVERRIDE); @@ -603,7 +624,7 @@ skip_l2:  #endif  #ifdef CONFIG_SYS_FSL_USB2_PHY_ENABLE  	{ -		ccsr_usb_phy_t *usb_phy2 = +		struct ccsr_usb_phy __iomem *usb_phy2 =  			(void *)CONFIG_SYS_MPC85xx_USB2_PHY_ADDR;  		out_be32(&usb_phy2->usb_enable_override,  				CONFIG_SYS_FSL_USB_ENABLE_OVERRIDE); @@ -625,7 +646,7 @@ skip_l2:  #endif  #if defined(CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE) -		ccsr_usb_phy_t *usb_phy = +		struct ccsr_usb_phy __iomem *usb_phy =  			(void *)CONFIG_SYS_MPC85xx_USB1_PHY_ADDR;  		setbits_be32(&usb_phy->pllprg[1],  			     CONFIG_SYS_FSL_USB_PLLPRG2_PHY2_CLK_EN | diff --git a/arch/powerpc/cpu/mpc85xx/ddr-gen1.c b/arch/powerpc/cpu/mpc85xx/ddr-gen1.c index 8a86819fb..4dd8c0b5b 100644 --- a/arch/powerpc/cpu/mpc85xx/ddr-gen1.c +++ b/arch/powerpc/cpu/mpc85xx/ddr-gen1.c @@ -15,7 +15,7 @@  #endif  void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, -			     unsigned int ctrl_num) +			     unsigned int ctrl_num, int step)  {  	unsigned int i;  	volatile ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR; diff --git a/arch/powerpc/cpu/mpc85xx/ddr-gen2.c b/arch/powerpc/cpu/mpc85xx/ddr-gen2.c index a70586252..542bc84ac 100644 --- a/arch/powerpc/cpu/mpc85xx/ddr-gen2.c +++ b/arch/powerpc/cpu/mpc85xx/ddr-gen2.c @@ -16,7 +16,7 @@  #endif  void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, -			     unsigned int ctrl_num) +			     unsigned int ctrl_num, int step)  {  	unsigned int i;  	ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR; diff --git a/arch/powerpc/cpu/mpc85xx/ddr-gen3.c b/arch/powerpc/cpu/mpc85xx/ddr-gen3.c index c5b47200e..1be51d330 100644 --- a/arch/powerpc/cpu/mpc85xx/ddr-gen3.c +++ b/arch/powerpc/cpu/mpc85xx/ddr-gen3.c @@ -15,8 +15,18 @@  #error Invalid setting for CONFIG_CHIP_SELECTS_PER_CTRL  #endif + +/* + * regs has the to-be-set values for DDR controller registers + * ctrl_num is the DDR controller number + * step: 0 goes through the initialization in one pass + *       1 sets registers and returns before enabling controller + *       2 resumes from step 1 and continues to initialize + * Dividing the initialization to two steps to deassert DDR reset signal + * to comply with JEDEC specs for RDIMMs. + */  void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, -			     unsigned int ctrl_num) +			     unsigned int ctrl_num, int step)  {  	unsigned int i, bus_width;  	volatile ccsr_ddr_t *ddr; @@ -54,6 +64,9 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,  		return;  	} +	if (step == 2) +		goto step2; +  	if (regs->ddr_eor)  		out_be32(&ddr->eor, regs->ddr_eor);  #ifdef CONFIG_SYS_FSL_ERRATUM_DDR111_DDR134 @@ -123,10 +136,17 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,  	out_be32(&ddr->timing_cfg_5, regs->timing_cfg_5);  	out_be32(&ddr->ddr_zq_cntl, regs->ddr_zq_cntl);  	out_be32(&ddr->ddr_wrlvl_cntl, regs->ddr_wrlvl_cntl); +#ifndef CONFIG_SYS_FSL_DDR_EMU +	/* +	 * Skip these two registers if running on emulator +	 * because emulator doesn't have skew between bytes. +	 */ +  	if (regs->ddr_wrlvl_cntl_2)  		out_be32(&ddr->ddr_wrlvl_cntl_2, regs->ddr_wrlvl_cntl_2);  	if (regs->ddr_wrlvl_cntl_3)  		out_be32(&ddr->ddr_wrlvl_cntl_3, regs->ddr_wrlvl_cntl_3); +#endif  	out_be32(&ddr->ddr_sr_cntr, regs->ddr_sr_cntr);  	out_be32(&ddr->ddr_sdram_rcw_1, regs->ddr_sdram_rcw_1); @@ -150,6 +170,20 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,  	out_be32(&ddr->debug[21], 0x24000000);  #endif /* CONFIG_SYS_FSL_ERRATUM_DDR_A003474 */ +	/* +	 * For RDIMMs, JEDEC spec requires clocks to be stable before reset is +	 * deasserted. Clocks start when any chip select is enabled and clock +	 * control register is set. Because all DDR components are connected to +	 * one reset signal, this needs to be done in two steps. Step 1 is to +	 * get the clocks started. Step 2 resumes after reset signal is +	 * deasserted. +	 */ +	if (step == 1) { +		udelay(200); +		return; +	} + +step2:  	/* Set, but do not enable the memory */  	temp_sdram_cfg = regs->ddr_sdram_cfg;  	temp_sdram_cfg &= ~(SDRAM_CFG_MEM_EN); diff --git a/arch/powerpc/cpu/mpc85xx/fdt.c b/arch/powerpc/cpu/mpc85xx/fdt.c index cfaa2edce..533d47ab4 100644 --- a/arch/powerpc/cpu/mpc85xx/fdt.c +++ b/arch/powerpc/cpu/mpc85xx/fdt.c @@ -403,22 +403,22 @@ static void ft_fixup_dpaa_clks(void *blob)  	get_sys_info(&sysinfo);  #ifdef CONFIG_SYS_DPAA_FMAN  	ft_fixup_clks(blob, "fsl,fman", CONFIG_SYS_FSL_FM1_OFFSET, -			sysinfo.freqFMan[0]); +			sysinfo.freq_fman[0]);  #if (CONFIG_SYS_NUM_FMAN == 2)  	ft_fixup_clks(blob, "fsl,fman", CONFIG_SYS_FSL_FM2_OFFSET, -			sysinfo.freqFMan[1]); +			sysinfo.freq_fman[1]);  #endif  #endif  #ifdef CONFIG_SYS_DPAA_QBMAN  	do_fixup_by_compat_u32(blob, "fsl,qman", -			"clock-frequency", sysinfo.freqQMAN, 1); +			"clock-frequency", sysinfo.freq_qman, 1);  #endif  #ifdef CONFIG_SYS_DPAA_PME  	do_fixup_by_compat_u32(blob, "fsl,pme", -		"clock-frequency", sysinfo.freqPME, 1); +		"clock-frequency", sysinfo.freq_pme, 1);  #endif  }  #else @@ -476,7 +476,7 @@ void fdt_fixup_fman_firmware(void *blob)  	if (!p)  		return; -	fmanfw = (struct qe_firmware *) simple_strtoul(p, NULL, 0); +	fmanfw = (struct qe_firmware *) simple_strtoul(p, NULL, 16);  	if (!fmanfw)  		return; @@ -604,15 +604,19 @@ void ft_cpu_setup(void *blob, bd_t *bd)  	fdt_add_enet_stashing(blob); +#ifndef CONFIG_FSL_TBCLK_EXTRA_DIV +#define CONFIG_FSL_TBCLK_EXTRA_DIV 1 +#endif  	do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, -		"timebase-frequency", get_tbclk(), 1); +		"timebase-frequency", get_tbclk() / CONFIG_FSL_TBCLK_EXTRA_DIV, +		1);  	do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,  		"bus-frequency", bd->bi_busfreq, 1);  	get_sys_info(&sysinfo);  	off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpu", 4);  	while (off != -FDT_ERR_NOTFOUND) {  		u32 *reg = (u32 *)fdt_getprop(blob, off, "reg", 0); -		val = cpu_to_fdt32(sysinfo.freqProcessor[*reg]); +		val = cpu_to_fdt32(sysinfo.freq_processor[*reg]);  		fdt_setprop(blob, off, "clock-frequency", &val, 4);  		off = fdt_node_offset_by_prop_value(blob, off, "device_type",  							"cpu", 4); diff --git a/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c b/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c index de6bd11a1..39d9409d6 100644 --- a/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c +++ b/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c @@ -13,8 +13,12 @@  #include <asm/errno.h>  #include "fsl_corenet2_serdes.h" +#ifdef CONFIG_SYS_FSL_SRDS_1  static u64 serdes1_prtcl_map; +#endif +#ifdef CONFIG_SYS_FSL_SRDS_2  static u64 serdes2_prtcl_map; +#endif  #ifdef CONFIG_SYS_FSL_SRDS_3  static u64 serdes3_prtcl_map;  #endif @@ -78,8 +82,12 @@ int is_serdes_configured(enum srds_prtcl device)  {  	u64 ret = 0; +#ifdef CONFIG_SYS_FSL_SRDS_1  	ret |= (1ULL << device) & serdes1_prtcl_map; +#endif +#ifdef CONFIG_SYS_FSL_SRDS_2  	ret |= (1ULL << device) & serdes2_prtcl_map; +#endif  #ifdef CONFIG_SYS_FSL_SRDS_3  	ret |= (1ULL << device) & serdes3_prtcl_map;  #endif @@ -97,14 +105,18 @@ int serdes_get_first_lane(u32 sd, enum srds_prtcl device)  	int i;  	switch (sd) { +#ifdef CONFIG_SYS_FSL_SRDS_1  	case FSL_SRDS_1:  		cfg &= FSL_CORENET2_RCWSR4_SRDS1_PRTCL;  		cfg >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT;  		break; +#endif +#ifdef CONFIG_SYS_FSL_SRDS_2  	case FSL_SRDS_2:  		cfg &= FSL_CORENET2_RCWSR4_SRDS2_PRTCL;  		cfg >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT;  		break; +#endif  #ifdef CONFIG_SYS_FSL_SRDS_3  	case FSL_SRDS_3:  		cfg &= FSL_CORENET2_RCWSR4_SRDS3_PRTCL; @@ -163,14 +175,18 @@ u64 serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift)  void fsl_serdes_init(void)  { +#ifdef CONFIG_SYS_FSL_SRDS_1  	serdes1_prtcl_map = serdes_init(FSL_SRDS_1,  		CONFIG_SYS_FSL_CORENET_SERDES_ADDR,  		FSL_CORENET2_RCWSR4_SRDS1_PRTCL,  		FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT); +#endif +#ifdef CONFIG_SYS_FSL_SRDS_2  	serdes2_prtcl_map = serdes_init(FSL_SRDS_2,  		CONFIG_SYS_FSL_CORENET_SERDES_ADDR + FSL_SRDS_2 * 0x1000,  		FSL_CORENET2_RCWSR4_SRDS2_PRTCL,  		FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT); +#endif  #ifdef CONFIG_SYS_FSL_SRDS_3  	serdes3_prtcl_map = serdes_init(FSL_SRDS_3,  		CONFIG_SYS_FSL_CORENET_SERDES_ADDR + FSL_SRDS_3 * 0x1000, diff --git a/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.h b/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.h index 6de572d59..d515b234a 100644 --- a/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.h +++ b/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.h @@ -9,5 +9,4 @@  int is_serdes_prtcl_valid(int serdes, u32 prtcl);  int serdes_lane_enabled(int lane); -enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane);  #endif /* __FSL_CORENET2_SERDES_H */ diff --git a/arch/powerpc/cpu/mpc85xx/release.S b/arch/powerpc/cpu/mpc85xx/release.S index 15bbbc15a..c15e83b52 100644 --- a/arch/powerpc/cpu/mpc85xx/release.S +++ b/arch/powerpc/cpu/mpc85xx/release.S @@ -226,6 +226,21 @@ __secondary_start_page:  2:  #endif +#ifdef CONFIG_SYS_FSL_ERRATUM_A005812 +	/* +	 * A-005812 workaround sets bit 32 of SPR 976 for SoCs running in +	 * write shadow mode. This code should run after other code setting +	 * DCWS. +	 */ +	mfspr	r3,L1CSR2 +	andis.	r3,r3,(L1CSR2_DCWS)@h +	beq	1f +	mfspr	r3, SPRN_HDBCR0 +	oris	r3, r3, 0x8000 +	mtspr	SPRN_HDBCR0, r3 +1: +#endif +  #ifdef CONFIG_BACKSIDE_L2_CACHE  	/* skip L2 setup on P2040/P2040E as they have no L2 */  	mfspr	r3,SPRN_SVR diff --git a/arch/powerpc/cpu/mpc85xx/speed.c b/arch/powerpc/cpu/mpc85xx/speed.c index f093960fe..07690f97b 100644 --- a/arch/powerpc/cpu/mpc85xx/speed.c +++ b/arch/powerpc/cpu/mpc85xx/speed.c @@ -20,7 +20,7 @@ DECLARE_GLOBAL_DATA_PTR;  /* --------------------------------------------------------------- */ -void get_sys_info (sys_info_t * sysInfo) +void get_sys_info(sys_info_t *sys_info)  {  	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);  #ifdef CONFIG_FSL_IFC @@ -46,7 +46,7 @@ void get_sys_info (sys_info_t * sysInfo)  		[14] = 3,	/* CC4 PPL / 4 */  	}; -	const u8 core_cplx_PLL_div[16] = { +	const u8 core_cplx_pll_div[16] = {  		[ 0] = 1,	/* CC1 PPL / 1 */  		[ 1] = 2,	/* CC1 PPL / 2 */  		[ 2] = 4,	/* CC1 PPL / 4 */ @@ -60,26 +60,26 @@ void get_sys_info (sys_info_t * sysInfo)  		[13] = 2,	/* CC4 PPL / 2 */  		[14] = 4,	/* CC4 PPL / 4 */  	}; -	uint i, freqCC_PLL[6], rcw_tmp; +	uint i, freq_cc_pll[6], rcw_tmp;  	uint ratio[6];  	unsigned long sysclk = CONFIG_SYS_CLK_FREQ;  	uint mem_pll_rat; -	sysInfo->freqSystemBus = sysclk; +	sys_info->freq_systembus = sysclk;  #ifdef CONFIG_DDR_CLK_FREQ -	sysInfo->freqDDRBus = CONFIG_DDR_CLK_FREQ; +	sys_info->freq_ddrbus = CONFIG_DDR_CLK_FREQ;  #else -	sysInfo->freqDDRBus = sysclk; +	sys_info->freq_ddrbus = sysclk;  #endif -	sysInfo->freqSystemBus *= (in_be32(&gur->rcwsr[0]) >> 25) & 0x1f; +	sys_info->freq_systembus *= (in_be32(&gur->rcwsr[0]) >> 25) & 0x1f;  	mem_pll_rat = (in_be32(&gur->rcwsr[0]) >>  			FSL_CORENET_RCWSR0_MEM_PLL_RAT_SHIFT)  			& FSL_CORENET_RCWSR0_MEM_PLL_RAT_MASK;  	if (mem_pll_rat > 2) -		sysInfo->freqDDRBus *= mem_pll_rat; +		sys_info->freq_ddrbus *= mem_pll_rat;  	else -		sysInfo->freqDDRBus = sysInfo->freqSystemBus * mem_pll_rat; +		sys_info->freq_ddrbus = sys_info->freq_systembus * mem_pll_rat;  	ratio[0] = (in_be32(&clk->pllc1gsr) >> 1) & 0x3f;  	ratio[1] = (in_be32(&clk->pllc2gsr) >> 1) & 0x3f; @@ -89,9 +89,9 @@ void get_sys_info (sys_info_t * sysInfo)  	ratio[5] = (in_be32(&clk->pllc6gsr) >> 1) & 0x3f;  	for (i = 0; i < 6; i++) {  		if (ratio[i] > 4) -			freqCC_PLL[i] = sysclk * ratio[i]; +			freq_cc_pll[i] = sysclk * ratio[i];  		else -			freqCC_PLL[i] = sysInfo->freqSystemBus * ratio[i]; +			freq_cc_pll[i] = sys_info->freq_systembus * ratio[i];  	}  #ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2  	/* @@ -110,8 +110,8 @@ void get_sys_info (sys_info_t * sysInfo)  			printf("Unsupported architecture configuration"  				" in function %s\n", __func__);  		cplx_pll += (cluster / 2) * 3; -		sysInfo->freqProcessor[cpu] = -			 freqCC_PLL[cplx_pll] / core_cplx_PLL_div[c_pll_sel]; +		sys_info->freq_processor[cpu] = +			 freq_cc_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel];  	}  #ifdef CONFIG_PPC_B4860  #define FM1_CLK_SEL	0xe0000000 @@ -127,63 +127,63 @@ void get_sys_info (sys_info_t * sysInfo)  #ifdef CONFIG_SYS_DPAA_PME  	switch ((rcw_tmp & PME_CLK_SEL) >> PME_CLK_SHIFT) {  	case 1: -		sysInfo->freqPME = freqCC_PLL[0]; +		sys_info->freq_pme = freq_cc_pll[0];  		break;  	case 2: -		sysInfo->freqPME = freqCC_PLL[0] / 2; +		sys_info->freq_pme = freq_cc_pll[0] / 2;  		break;  	case 3: -		sysInfo->freqPME = freqCC_PLL[0] / 3; +		sys_info->freq_pme = freq_cc_pll[0] / 3;  		break;  	case 4: -		sysInfo->freqPME = freqCC_PLL[0] / 4; +		sys_info->freq_pme = freq_cc_pll[0] / 4;  		break;  	case 6: -		sysInfo->freqPME = freqCC_PLL[1] / 2; +		sys_info->freq_pme = freq_cc_pll[1] / 2;  		break;  	case 7: -		sysInfo->freqPME = freqCC_PLL[1] / 3; +		sys_info->freq_pme = freq_cc_pll[1] / 3;  		break;  	default:  		printf("Error: Unknown PME clock select!\n");  	case 0: -		sysInfo->freqPME = sysInfo->freqSystemBus / 2; +		sys_info->freq_pme = sys_info->freq_systembus / 2;  		break;  	}  #endif  #ifdef CONFIG_SYS_DPAA_QBMAN -	sysInfo->freqQMAN = sysInfo->freqSystemBus / 2; +	sys_info->freq_qman = sys_info->freq_systembus / 2;  #endif  #ifdef CONFIG_SYS_DPAA_FMAN  	switch ((rcw_tmp & FM1_CLK_SEL) >> FM1_CLK_SHIFT) {  	case 1: -		sysInfo->freqFMan[0] = freqCC_PLL[3]; +		sys_info->freq_fman[0] = freq_cc_pll[3];  		break;  	case 2: -		sysInfo->freqFMan[0] = freqCC_PLL[3] / 2; +		sys_info->freq_fman[0] = freq_cc_pll[3] / 2;  		break;  	case 3: -		sysInfo->freqFMan[0] = freqCC_PLL[3] / 3; +		sys_info->freq_fman[0] = freq_cc_pll[3] / 3;  		break;  	case 4: -		sysInfo->freqFMan[0] = freqCC_PLL[3] / 4; +		sys_info->freq_fman[0] = freq_cc_pll[3] / 4;  		break;  	case 5: -		sysInfo->freqFMan[0] = sysInfo->freqSystemBus; +		sys_info->freq_fman[0] = sys_info->freq_systembus;  		break;  	case 6: -		sysInfo->freqFMan[0] = freqCC_PLL[4] / 2; +		sys_info->freq_fman[0] = freq_cc_pll[4] / 2;  		break;  	case 7: -		sysInfo->freqFMan[0] = freqCC_PLL[4] / 3; +		sys_info->freq_fman[0] = freq_cc_pll[4] / 3;  		break;  	default:  		printf("Error: Unknown FMan1 clock select!\n");  	case 0: -		sysInfo->freqFMan[0] = sysInfo->freqSystemBus / 2; +		sys_info->freq_fman[0] = sys_info->freq_systembus / 2;  		break;  	}  #if (CONFIG_SYS_NUM_FMAN) == 2 @@ -192,27 +192,27 @@ void get_sys_info (sys_info_t * sysInfo)  	rcw_tmp = in_be32(&gur->rcwsr[15]);  	switch ((rcw_tmp & FM2_CLK_SEL) >> FM2_CLK_SHIFT) {  	case 1: -		sysInfo->freqFMan[1] = freqCC_PLL[4]; +		sys_info->freq_fman[1] = freq_cc_pll[4];  		break;  	case 2: -		sysInfo->freqFMan[1] = freqCC_PLL[4] / 2; +		sys_info->freq_fman[1] = freq_cc_pll[4] / 2;  		break;  	case 3: -		sysInfo->freqFMan[1] = freqCC_PLL[4] / 3; +		sys_info->freq_fman[1] = freq_cc_pll[4] / 3;  		break;  	case 4: -		sysInfo->freqFMan[1] = freqCC_PLL[4] / 4; +		sys_info->freq_fman[1] = freq_cc_pll[4] / 4;  		break;  	case 6: -		sysInfo->freqFMan[1] = freqCC_PLL[3] / 2; +		sys_info->freq_fman[1] = freq_cc_pll[3] / 2;  		break;  	case 7: -		sysInfo->freqFMan[1] = freqCC_PLL[3] / 3; +		sys_info->freq_fman[1] = freq_cc_pll[3] / 3;  		break;  	default:  		printf("Error: Unknown FMan2 clock select!\n");  	case 0: -		sysInfo->freqFMan[1] = sysInfo->freqSystemBus / 2; +		sys_info->freq_fman[1] = sys_info->freq_systembus / 2;  		break;  	}  #endif	/* CONFIG_SYS_NUM_FMAN == 2 */ @@ -225,8 +225,8 @@ void get_sys_info (sys_info_t * sysInfo)  				& 0xf;  		u32 cplx_pll = core_cplx_PLL[c_pll_sel]; -		sysInfo->freqProcessor[cpu] = -			 freqCC_PLL[cplx_pll] / core_cplx_PLL_div[c_pll_sel]; +		sys_info->freq_processor[cpu] = +			 freq_cc_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel];  	}  #define PME_CLK_SEL	0x80000000  #define FM1_CLK_SEL	0x40000000 @@ -246,43 +246,43 @@ void get_sys_info (sys_info_t * sysInfo)  #ifdef CONFIG_SYS_DPAA_PME  	if (rcw_tmp & PME_CLK_SEL) {  		if (rcw_tmp & HWA_ASYNC_DIV) -			sysInfo->freqPME = freqCC_PLL[HWA_CC_PLL] / 4; +			sys_info->freq_pme = freq_cc_pll[HWA_CC_PLL] / 4;  		else -			sysInfo->freqPME = freqCC_PLL[HWA_CC_PLL] / 2; +			sys_info->freq_pme = freq_cc_pll[HWA_CC_PLL] / 2;  	} else { -		sysInfo->freqPME = sysInfo->freqSystemBus / 2; +		sys_info->freq_pme = sys_info->freq_systembus / 2;  	}  #endif  #ifdef CONFIG_SYS_DPAA_FMAN  	if (rcw_tmp & FM1_CLK_SEL) {  		if (rcw_tmp & HWA_ASYNC_DIV) -			sysInfo->freqFMan[0] = freqCC_PLL[HWA_CC_PLL] / 4; +			sys_info->freq_fman[0] = freq_cc_pll[HWA_CC_PLL] / 4;  		else -			sysInfo->freqFMan[0] = freqCC_PLL[HWA_CC_PLL] / 2; +			sys_info->freq_fman[0] = freq_cc_pll[HWA_CC_PLL] / 2;  	} else { -		sysInfo->freqFMan[0] = sysInfo->freqSystemBus / 2; +		sys_info->freq_fman[0] = sys_info->freq_systembus / 2;  	}  #if (CONFIG_SYS_NUM_FMAN) == 2  	if (rcw_tmp & FM2_CLK_SEL) {  		if (rcw_tmp & HWA_ASYNC_DIV) -			sysInfo->freqFMan[1] = freqCC_PLL[HWA_CC_PLL] / 4; +			sys_info->freq_fman[1] = freq_cc_pll[HWA_CC_PLL] / 4;  		else -			sysInfo->freqFMan[1] = freqCC_PLL[HWA_CC_PLL] / 2; +			sys_info->freq_fman[1] = freq_cc_pll[HWA_CC_PLL] / 2;  	} else { -		sysInfo->freqFMan[1] = sysInfo->freqSystemBus / 2; +		sys_info->freq_fman[1] = sys_info->freq_systembus / 2;  	}  #endif  #endif  #ifdef CONFIG_SYS_DPAA_QBMAN -	sysInfo->freqQMAN = sysInfo->freqSystemBus / 2; +	sys_info->freq_qman = sys_info->freq_systembus / 2;  #endif  #endif /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */  #else /* CONFIG_FSL_CORENET */ -	uint plat_ratio, e500_ratio, half_freqSystemBus; +	uint plat_ratio, e500_ratio, half_freq_systembus;  	int i;  #ifdef CONFIG_QE  	__maybe_unused u32 qe_ratio; @@ -290,40 +290,40 @@ void get_sys_info (sys_info_t * sysInfo)  	plat_ratio = (gur->porpllsr) & 0x0000003e;  	plat_ratio >>= 1; -	sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ; +	sys_info->freq_systembus = plat_ratio * CONFIG_SYS_CLK_FREQ;  	/* Divide before multiply to avoid integer  	 * overflow for processor speeds above 2GHz */ -	half_freqSystemBus = sysInfo->freqSystemBus/2; +	half_freq_systembus = sys_info->freq_systembus/2;  	for (i = 0; i < cpu_numcores(); i++) {  		e500_ratio = ((gur->porpllsr) >> (i * 8 + 16)) & 0x3f; -		sysInfo->freqProcessor[i] = e500_ratio * half_freqSystemBus; +		sys_info->freq_processor[i] = e500_ratio * half_freq_systembus;  	} -	/* Note: freqDDRBus is the MCLK frequency, not the data rate. */ -	sysInfo->freqDDRBus = sysInfo->freqSystemBus; +	/* Note: freq_ddrbus is the MCLK frequency, not the data rate. */ +	sys_info->freq_ddrbus = sys_info->freq_systembus;  #ifdef CONFIG_DDR_CLK_FREQ  	{  		u32 ddr_ratio = ((gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO)  			>> MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;  		if (ddr_ratio != 0x7) -			sysInfo->freqDDRBus = ddr_ratio * CONFIG_DDR_CLK_FREQ; +			sys_info->freq_ddrbus = ddr_ratio * CONFIG_DDR_CLK_FREQ;  	}  #endif  #ifdef CONFIG_QE  #if defined(CONFIG_P1012) || defined(CONFIG_P1021) || defined(CONFIG_P1025) -	sysInfo->freqQE =  sysInfo->freqSystemBus; +	sys_info->freq_qe =  sys_info->freq_systembus;  #else  	qe_ratio = ((gur->porpllsr) & MPC85xx_PORPLLSR_QE_RATIO)  			>> MPC85xx_PORPLLSR_QE_RATIO_SHIFT; -	sysInfo->freqQE = qe_ratio * CONFIG_SYS_CLK_FREQ; +	sys_info->freq_qe = qe_ratio * CONFIG_SYS_CLK_FREQ;  #endif  #endif  #ifdef CONFIG_SYS_DPAA_FMAN -		sysInfo->freqFMan[0] = sysInfo->freqSystemBus; +		sys_info->freq_fman[0] = sys_info->freq_systembus;  #endif  #endif /* CONFIG_FSL_CORENET */ @@ -350,10 +350,10 @@ void get_sys_info (sys_info_t * sysInfo)  		 */  		lcrr_div *= 2;  #endif -		sysInfo->freqLocalBus = sysInfo->freqSystemBus / lcrr_div; +		sys_info->freq_localbus = sys_info->freq_systembus / lcrr_div;  	} else {  		/* In case anyone cares what the unknown value is */ -		sysInfo->freqLocalBus = lcrr_div; +		sys_info->freq_localbus = lcrr_div;  	}  #endif @@ -361,7 +361,7 @@ void get_sys_info (sys_info_t * sysInfo)  	ccr = in_be32(&ifc_regs->ifc_ccr);  	ccr = ((ccr & IFC_CCR_CLK_DIV_MASK) >> IFC_CCR_CLK_DIV_SHIFT) + 1; -	sysInfo->freqLocalBus = sysInfo->freqSystemBus / ccr; +	sys_info->freq_localbus = sys_info->freq_systembus / ccr;  #endif  } @@ -382,13 +382,13 @@ int get_clocks (void)  	dfbrg = (sccr & SCCR_DFBRG_MSK) >> SCCR_DFBRG_SHIFT;  #endif  	get_sys_info (&sys_info); -	gd->cpu_clk = sys_info.freqProcessor[0]; -	gd->bus_clk = sys_info.freqSystemBus; -	gd->mem_clk = sys_info.freqDDRBus; -	gd->arch.lbc_clk = sys_info.freqLocalBus; +	gd->cpu_clk = sys_info.freq_processor[0]; +	gd->bus_clk = sys_info.freq_systembus; +	gd->mem_clk = sys_info.freq_ddrbus; +	gd->arch.lbc_clk = sys_info.freq_localbus;  #ifdef CONFIG_QE -	gd->arch.qe_clk = sys_info.freqQE; +	gd->arch.qe_clk = sys_info.freq_qe;  	gd->arch.brg_clk = gd->arch.qe_clk / 2;  #endif  	/* @@ -400,7 +400,7 @@ int get_clocks (void)  	 */  #if defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || \  	defined(CONFIG_MPC8560) || defined(CONFIG_MPC8555) -	gd->arch.i2c1_clk = sys_info.freqSystemBus; +	gd->arch.i2c1_clk = sys_info.freq_systembus;  #elif defined(CONFIG_MPC8544)  	/*  	 * On the 8544, the I2C clock is the same as the SEC clock.  This can be @@ -410,12 +410,12 @@ int get_clocks (void)  	 * PORDEVSR2_SEC_CFG bit is 0 on all 85xx boards that are not an 8544.  	 */  	if (gur->pordevsr2 & MPC85xx_PORDEVSR2_SEC_CFG) -		gd->arch.i2c1_clk = sys_info.freqSystemBus / 3; +		gd->arch.i2c1_clk = sys_info.freq_systembus / 3;  	else -		gd->arch.i2c1_clk = sys_info.freqSystemBus / 2; +		gd->arch.i2c1_clk = sys_info.freq_systembus / 2;  #else  	/* Most 85xx SOCs use CCB/2, so this is the default behavior. */ -	gd->arch.i2c1_clk = sys_info.freqSystemBus / 2; +	gd->arch.i2c1_clk = sys_info.freq_systembus / 2;  #endif  	gd->arch.i2c2_clk = gd->arch.i2c1_clk; @@ -429,7 +429,7 @@ int get_clocks (void)  #endif /* defined(CONFIG_FSL_ESDHC) */  #if defined(CONFIG_CPM2) -	gd->arch.vco_out = 2*sys_info.freqSystemBus; +	gd->arch.vco_out = 2*sys_info.freq_systembus;  	gd->arch.cpm_clk = gd->arch.vco_out / 2;  	gd->arch.scc_clk = gd->arch.vco_out / 4;  	gd->arch.brg_clk = gd->arch.vco_out / (1 << (2 * (dfbrg + 1))); diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S index cfc3a60d2..ad57a9cfa 100644 --- a/arch/powerpc/cpu/mpc85xx/start.S +++ b/arch/powerpc/cpu/mpc85xx/start.S @@ -33,7 +33,8 @@  #define MINIMAL_SPL  #endif -#if !defined(CONFIG_SPL) && !defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_SECURE_BOOT) +#if !defined(CONFIG_SPL) && !defined(CONFIG_SYS_RAMBOOT) && \ +	!defined(CONFIG_SECURE_BOOT) && !defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)  #define NOR_BOOT  #endif diff --git a/arch/powerpc/cpu/mpc85xx/t4240_ids.c b/arch/powerpc/cpu/mpc85xx/t4240_ids.c index e173cb5f9..54c1cfd2c 100644 --- a/arch/powerpc/cpu/mpc85xx/t4240_ids.c +++ b/arch/powerpc/cpu/mpc85xx/t4240_ids.c @@ -65,8 +65,8 @@ struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = {  #endif  struct srio_liodn_id_table srio_liodn_tbl[] = { -	SET_SRIO_LIODN_1(1, 307), -	SET_SRIO_LIODN_1(2, 387), +	SET_SRIO_LIODN_BASE(1, 307), +	SET_SRIO_LIODN_BASE(2, 387),  };  int srio_liodn_tbl_sz = ARRAY_SIZE(srio_liodn_tbl); @@ -159,10 +159,10 @@ int sec_liodn_tbl_sz = ARRAY_SIZE(sec_liodn_tbl);  #ifdef CONFIG_SYS_DPAA_RMAN  struct liodn_id_table rman_liodn_tbl[] = {  	/* Set RMan block 0-3 liodn offset */ -	SET_RMAN_LIODN(0, 678), -	SET_RMAN_LIODN(1, 679), -	SET_RMAN_LIODN(2, 680), -	SET_RMAN_LIODN(3, 681), +	SET_RMAN_LIODN(0, 6), +	SET_RMAN_LIODN(1, 7), +	SET_RMAN_LIODN(2, 8), +	SET_RMAN_LIODN(3, 9),  };  int rman_liodn_tbl_sz = ARRAY_SIZE(rman_liodn_tbl);  #endif diff --git a/arch/powerpc/cpu/mpc85xx/t4240_serdes.c b/arch/powerpc/cpu/mpc85xx/t4240_serdes.c index ed88602c3..ff55e3c35 100644 --- a/arch/powerpc/cpu/mpc85xx/t4240_serdes.c +++ b/arch/powerpc/cpu/mpc85xx/t4240_serdes.c @@ -106,25 +106,25 @@ static const struct serdes_config serdes2_cfg_tbl[] = {  		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,  		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},  	{38, {NONE, NONE, QSGMII_FM2_B, NONE, -		NONE, NONE, QSGMII_FM1_A, NONE}}, +		NONE, NONE, QSGMII_FM2_A, NONE} },  	{40, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,  		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9, -		NONE, NONE, QSGMII_FM1_A, NONE}}, +		NONE, NONE, QSGMII_FM2_A, NONE} },  	{46, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,  		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9, -		NONE, NONE, QSGMII_FM1_A, NONE}}, +		NONE, NONE, QSGMII_FM2_A, NONE} },  	{48, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,  		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9, -		NONE, NONE, QSGMII_FM1_A, NONE}}, +		NONE, NONE, QSGMII_FM2_A, NONE} },  	{50, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,  		XAUI_FM2_MAC9, XAUI_FM2_MAC9, -		NONE, NONE, QSGMII_FM1_A, NONE}}, +		NONE, NONE, QSGMII_FM2_A, NONE} },  	{52, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,  		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9, -		NONE, NONE, QSGMII_FM1_A, NONE}}, +		NONE, NONE, QSGMII_FM2_A, NONE} },  	{54, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,  		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9, -		NONE, NONE, QSGMII_FM1_A, NONE}}, +		NONE, NONE, QSGMII_FM2_A, NONE} },  	{56, {XFI_FM1_MAC9, XFI_FM1_MAC10,  		XFI_FM2_MAC10, XFI_FM2_MAC9,  		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2, diff --git a/arch/powerpc/cpu/mpc85xx/tlb.c b/arch/powerpc/cpu/mpc85xx/tlb.c index da3c345d6..8748ecd14 100644 --- a/arch/powerpc/cpu/mpc85xx/tlb.c +++ b/arch/powerpc/cpu/mpc85xx/tlb.c @@ -39,7 +39,8 @@ void init_tlbs(void)  	return ;  } -#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD) +#if !defined(CONFIG_NAND_SPL) && \ +	(!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL))  void read_tlbcam_entry(int idx, u32 *valid, u32 *tsize, unsigned long *epn,  		       phys_addr_t *rpn)  { diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds b/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds index 08188d75e..85ec74ba9 100644 --- a/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds +++ b/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds @@ -44,6 +44,11 @@ SECTIONS  	}  	_edata  =  .; +	. = .; +	__start___ex_table = .; +	__ex_table : { *(__ex_table) } +	__stop___ex_table = .; +  	. = ALIGN(8);  	__init_begin = .;  	__init_end = .; diff --git a/arch/powerpc/cpu/mpc86xx/cpu.c b/arch/powerpc/cpu/mpc86xx/cpu.c index d6b28dd07..30518544d 100644 --- a/arch/powerpc/cpu/mpc86xx/cpu.c +++ b/arch/powerpc/cpu/mpc86xx/cpu.c @@ -72,21 +72,21 @@ checkcpu(void)  	get_sys_info(&sysinfo);  	puts("Clock Configuration:\n"); -	printf("       CPU:%-4s MHz, ", strmhz(buf1, sysinfo.freqProcessor)); -	printf("MPX:%-4s MHz\n", strmhz(buf1, sysinfo.freqSystemBus)); +	printf("       CPU:%-4s MHz, ", strmhz(buf1, sysinfo.freq_processor)); +	printf("MPX:%-4s MHz\n", strmhz(buf1, sysinfo.freq_systembus));  	printf("       DDR:%-4s MHz (%s MT/s data rate), ", -		strmhz(buf1, sysinfo.freqSystemBus / 2), -		strmhz(buf2, sysinfo.freqSystemBus)); +		strmhz(buf1, sysinfo.freq_systembus / 2), +		strmhz(buf2, sysinfo.freq_systembus)); -	if (sysinfo.freqLocalBus > LCRR_CLKDIV) { -		printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freqLocalBus)); +	if (sysinfo.freq_localbus > LCRR_CLKDIV) { +		printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freq_localbus));  	} else {  		printf("LBC: unknown (LCRR[CLKDIV] = 0x%02lx)\n", -		       sysinfo.freqLocalBus); +		       sysinfo.freq_localbus);  	} -	puts("L1:    D-cache 32 KB enabled\n"); -	puts("       I-cache 32 KB enabled\n"); +	puts("L1:    D-cache 32 KiB enabled\n"); +	puts("       I-cache 32 KiB enabled\n");  	puts("L2:    ");  	if (get_l2cr() & 0x80000000) { @@ -95,7 +95,7 @@ checkcpu(void)  #elif defined(CONFIG_MPC8641)  		puts("512");  #endif -		puts(" KB enabled\n"); +		puts(" KiB enabled\n");  	} else {  		puts("Disabled\n");  	} @@ -131,7 +131,7 @@ get_tbclk(void)  	sys_info_t sys_info;  	get_sys_info(&sys_info); -	return (sys_info.freqSystemBus + 3L) / 4L; +	return (sys_info.freq_systembus + 3L) / 4L;  } diff --git a/arch/powerpc/cpu/mpc86xx/ddr-8641.c b/arch/powerpc/cpu/mpc86xx/ddr-8641.c index 92ba26dc8..33a91f9f7 100644 --- a/arch/powerpc/cpu/mpc86xx/ddr-8641.c +++ b/arch/powerpc/cpu/mpc86xx/ddr-8641.c @@ -15,7 +15,7 @@  #endif  void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, -			     unsigned int ctrl_num) +			     unsigned int ctrl_num, int step)  {  	unsigned int i;  	volatile ccsr_ddr_t *ddr; diff --git a/arch/powerpc/cpu/mpc86xx/speed.c b/arch/powerpc/cpu/mpc86xx/speed.c index ea366ab9e..854d02b5c 100644 --- a/arch/powerpc/cpu/mpc86xx/speed.c +++ b/arch/powerpc/cpu/mpc86xx/speed.c @@ -19,7 +19,7 @@ DECLARE_GLOBAL_DATA_PTR;  /* used in some defintiions of CONFIG_SYS_CLK_FREQ */  extern unsigned long get_board_sys_clk(unsigned long dummy); -void get_sys_info(sys_info_t *sysInfo) +void get_sys_info(sys_info_t *sys_info)  {  	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;  	volatile ccsr_gur_t *gur = &immap->im_gur; @@ -31,7 +31,7 @@ void get_sys_info(sys_info_t *sysInfo)  	switch (plat_ratio) {  	case 0x0: -		sysInfo->freqSystemBus = 16 * CONFIG_SYS_CLK_FREQ; +		sys_info->freq_systembus = 16 * CONFIG_SYS_CLK_FREQ;  		break;  	case 0x02:  	case 0x03: @@ -43,10 +43,10 @@ void get_sys_info(sys_info_t *sysInfo)  	case 0x0a:  	case 0x0c:  	case 0x10: -		sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ; +		sys_info->freq_systembus = plat_ratio * CONFIG_SYS_CLK_FREQ;  		break;  	default: -		sysInfo->freqSystemBus = 0; +		sys_info->freq_systembus = 0;  		break;  	} @@ -55,25 +55,26 @@ void get_sys_info(sys_info_t *sysInfo)  	switch (e600_ratio) {  	case 0x10: -		sysInfo->freqProcessor = 2 * sysInfo->freqSystemBus; +		sys_info->freq_processor = 2 * sys_info->freq_systembus;  		break;  	case 0x19: -		sysInfo->freqProcessor = 5 * sysInfo->freqSystemBus / 2; +		sys_info->freq_processor = 5 * sys_info->freq_systembus / 2;  		break;  	case 0x20: -		sysInfo->freqProcessor = 3 * sysInfo->freqSystemBus; +		sys_info->freq_processor = 3 * sys_info->freq_systembus;  		break;  	case 0x39: -		sysInfo->freqProcessor = 7 * sysInfo->freqSystemBus / 2; +		sys_info->freq_processor = 7 * sys_info->freq_systembus / 2;  		break;  	case 0x28: -		sysInfo->freqProcessor = 4 * sysInfo->freqSystemBus; +		sys_info->freq_processor = 4 * sys_info->freq_systembus;  		break;  	case 0x1d: -		sysInfo->freqProcessor = 9 * sysInfo->freqSystemBus / 2; +		sys_info->freq_processor = 9 * sys_info->freq_systembus / 2;  		break;  	default: -		sysInfo->freqProcessor = e600_ratio + sysInfo->freqSystemBus; +		sys_info->freq_processor = e600_ratio + +						sys_info->freq_systembus;  		break;  	} @@ -84,10 +85,11 @@ void get_sys_info(sys_info_t *sysInfo)  	lcrr_div = in_be32(&immap->im_lbc.lcrr) & LCRR_CLKDIV;  #endif  	if (lcrr_div == 2 || lcrr_div == 4 || lcrr_div == 8) { -		sysInfo->freqLocalBus = sysInfo->freqSystemBus / (lcrr_div * 2); +		sys_info->freq_localbus = sys_info->freq_systembus +							/ (lcrr_div * 2);  	} else {  		/* In case anyone cares what the unknown value is */ -		sysInfo->freqLocalBus = lcrr_div; +		sys_info->freq_localbus = lcrr_div;  	}  } @@ -102,9 +104,9 @@ int get_clocks(void)  	sys_info_t sys_info;  	get_sys_info(&sys_info); -	gd->cpu_clk = sys_info.freqProcessor; -	gd->bus_clk = sys_info.freqSystemBus; -	gd->arch.lbc_clk = sys_info.freqLocalBus; +	gd->cpu_clk = sys_info.freq_processor; +	gd->bus_clk = sys_info.freq_systembus; +	gd->arch.lbc_clk = sys_info.freq_localbus;  	/*  	 * The base clock for I2C depends on the actual SOC.  Unfortunately, @@ -114,9 +116,9 @@ int get_clocks(void)  	 * AN2919.  	 */  #ifdef CONFIG_MPC8610 -	gd->arch.i2c1_clk = sys_info.freqSystemBus; +	gd->arch.i2c1_clk = sys_info.freq_systembus;  #else -	gd->arch.i2c1_clk = sys_info.freqSystemBus / 2; +	gd->arch.i2c1_clk = sys_info.freq_systembus / 2;  #endif  	gd->arch.i2c2_clk = gd->arch.i2c1_clk; @@ -138,7 +140,7 @@ ulong get_bus_freq(ulong dummy)  	sys_info_t sys_info;  	get_sys_info(&sys_info); -	val = sys_info.freqSystemBus; +	val = sys_info.freq_systembus;  	return val;  } diff --git a/arch/powerpc/cpu/mpc8xx/cpu.c b/arch/powerpc/cpu/mpc8xx/cpu.c index 1550045e6..5c96b5fe1 100644 --- a/arch/powerpc/cpu/mpc8xx/cpu.c +++ b/arch/powerpc/cpu/mpc8xx/cpu.c @@ -136,10 +136,8 @@ static int check_CPU (long clock, uint pvr, uint immr)  #else  	printf (" at %s MHz: ", strmhz (buf, clock));  #endif -	printf ("%u kB I-Cache %u kB D-Cache", -		checkicache () >> 10, -		checkdcache () >> 10 -	); +	print_size(checkicache(), " I-Cache "); +	print_size(checkdcache(), " D-Cache");  	/* do we have a FEC (860T/P or 852/859/866/885)? */ @@ -204,10 +202,10 @@ static int check_CPU (long clock, uint pvr, uint immr)  		printf ("unknown MPC857 (0x%08x)", k);  #endif -	printf (" at %s MHz:", strmhz (buf, clock)); +	printf(" at %s MHz: ", strmhz(buf, clock)); -	printf (" %u kB I-Cache", checkicache () >> 10); -	printf (" %u kB D-Cache", checkdcache () >> 10); +	print_size(checkicache(), " I-Cache "); +	print_size(checkdcache(), " D-Cache");  	/* lets check and see if we're running on a 862T (or P?) */ @@ -265,10 +263,10 @@ static int check_CPU (long clock, uint pvr, uint immr)  	if (suf)  		printf ("PPC823ZTnn%s", suf); -	printf (" at %s MHz:", strmhz (buf, clock)); +	printf(" at %s MHz: ", strmhz(buf, clock)); -	printf (" %u kB I-Cache", checkicache () >> 10); -	printf (" %u kB D-Cache", checkdcache () >> 10); +	print_size(checkicache(), " I-Cache "); +	print_size(checkdcache(), " D-Cache");  	/* lets check and see if we're running on a 860T (or P?) */ @@ -321,10 +319,10 @@ static int check_CPU (long clock, uint pvr, uint immr)  	default:  		printf ("unknown MPC850 (0x%08x)", k);  	} -	printf (" at %s MHz:", strmhz (buf, clock)); +	printf(" at %s MHz: ", strmhz(buf, clock)); -	printf (" %u kB I-Cache", checkicache () >> 10); -	printf (" %u kB D-Cache", checkdcache () >> 10); +	print_size(checkicache(), " I-Cache "); +	print_size(checkdcache(), " D-Cache");  	/* lets check and see if we're running on a 850T (or P?) */ diff --git a/arch/powerpc/cpu/mpc8xx/video.c b/arch/powerpc/cpu/mpc8xx/video.c index 02cd0debc..fc351585b 100644 --- a/arch/powerpc/cpu/mpc8xx/video.c +++ b/arch/powerpc/cpu/mpc8xx/video.c @@ -109,7 +109,6 @@ DECLARE_GLOBAL_DATA_PTR;  /************************************************************************/  #include <video_font.h>			/* Get font data, width and height */ -#include <video_font_data.h>  #ifdef CONFIG_VIDEO_LOGO  #include <video_logo.h>			/* Get logo data, width and height */ @@ -1177,7 +1176,7 @@ static void *video_logo (void)  #ifndef CONFIG_FADS		/* all normal boards */  	/* leave one blank line */ -	sprintf (info, "MPC823 CPU at %s MHz, %ld MB RAM, %ld MB Flash", +	sprintf(info, "MPC823 CPU at %s MHz, %ld MiB RAM, %ld MiB Flash",  		strmhz(temp, gd->cpu_clk),  		gd->ram_size >> 20,  		gd->bd->bi_flashsize >> 20 ); @@ -1188,7 +1187,7 @@ static void *video_logo (void)  	video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y + VIDEO_FONT_HEIGHT,  					  info); -	sprintf (info, "2MB FLASH - 8MB DRAM - 4MB SRAM"); +	sprintf(info, "2MiB FLASH - 8MiB DRAM - 4MiB SRAM");  	video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y + VIDEO_FONT_HEIGHT * 2,  					  info);  #endif diff --git a/arch/powerpc/cpu/mpc8xxx/cpu.c b/arch/powerpc/cpu/mpc8xxx/cpu.c index 7369582ef..c67be4ef2 100644 --- a/arch/powerpc/cpu/mpc8xxx/cpu.c +++ b/arch/powerpc/cpu/mpc8xxx/cpu.c @@ -79,6 +79,9 @@ static struct cpu_type cpu_type_list[] = {  	CPU_TYPE_ENTRY(BSC9131, 9131, 1),  	CPU_TYPE_ENTRY(BSC9132, 9132, 2),  	CPU_TYPE_ENTRY(BSC9232, 9232, 2), +	CPU_TYPE_ENTRY(C291, C291, 1), +	CPU_TYPE_ENTRY(C292, C292, 1), +	CPU_TYPE_ENTRY(C293, C293, 1),  #elif defined(CONFIG_MPC86xx)  	CPU_TYPE_ENTRY(8610, 8610, 1),  	CPU_TYPE_ENTRY(8641, 8641, 2), diff --git a/arch/powerpc/cpu/mpc8xxx/ddr/ctrl_regs.c b/arch/powerpc/cpu/mpc8xxx/ddr/ctrl_regs.c index ff5812df5..242eb47ac 100644 --- a/arch/powerpc/cpu/mpc8xxx/ddr/ctrl_regs.c +++ b/arch/powerpc/cpu/mpc8xxx/ddr/ctrl_regs.c @@ -364,7 +364,7 @@ static void set_timing_cfg_3(fsl_ddr_cfg_regs_t *ddr,  	ddr->timing_cfg_3 = (0  		| ((ext_pretoact & 0x1) << 28) -		| ((ext_acttopre & 0x2) << 24) +		| ((ext_acttopre & 0x3) << 24)  		| ((ext_acttorw & 0x1) << 22)  		| ((ext_refrec & 0x1F) << 16)  		| ((ext_caslat & 0x3) << 12) @@ -681,6 +681,7 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,  	unsigned int odt_cfg = 0;	/* ODT configuration */  	unsigned int num_pr;		/* Number of posted refreshes */  	unsigned int slow = 0;		/* DDR will be run less than 1250 */ +	unsigned int x4_en = 0;		/* x4 DRAM enable */  	unsigned int obc_cfg;		/* On-The-Fly Burst Chop Cfg */  	unsigned int ap_en;		/* Address Parity Enable */  	unsigned int d_init;		/* DRAM data initialization */ @@ -725,6 +726,8 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,  		ap_en = 0;  	} +	x4_en = popts->x4_en ? 1 : 0; +  #if defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  	/* Use the DDR controller to auto initialize memory. */  	d_init = popts->ECC_init_using_memctl; @@ -747,6 +750,7 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,  		| ((odt_cfg & 0x3) << 21)  		| ((num_pr & 0xf) << 12)  		| ((slow & 1) << 11) +		| (x4_en << 10)  		| (qd_en << 9)  		| (unq_mrs_en << 8)  		| ((obc_cfg & 0x1) << 6) @@ -1585,8 +1589,8 @@ compute_fsl_memctl_config_regs(const memctl_options_t *popts,  				| ((ea & 0xFFF) << 0)	/* ending address MSB */  				);  		} else { -			debug("FSLDDR: setting bnds to 0 for inactive CS\n"); -			ddr->cs[i].bnds = 0; +			/* setting bnds to 0xffffffff for inactive CS */ +			ddr->cs[i].bnds = 0xffffffff;  		}  		debug("FSLDDR: cs[%d]_bnds = 0x%08x\n", i, ddr->cs[i].bnds); @@ -1638,5 +1642,10 @@ compute_fsl_memctl_config_regs(const memctl_options_t *popts,  	set_ddr_sdram_rcw(ddr, popts, common_dimm); +#ifdef CONFIG_SYS_FSL_DDR_EMU +	/* disble DDR training for emulator */ +	ddr->debug[2] = 0x00000400; +	ddr->debug[4] = 0xff800000; +#endif  	return check_fsl_memctl_config_regs(ddr);  } diff --git a/arch/powerpc/cpu/mpc8xxx/ddr/ddr.h b/arch/powerpc/cpu/mpc8xxx/ddr/ddr.h index 4dd55fc4c..c173a5a74 100644 --- a/arch/powerpc/cpu/mpc8xxx/ddr/ddr.h +++ b/arch/powerpc/cpu/mpc8xxx/ddr/ddr.h @@ -96,7 +96,7 @@ unsigned int check_fsl_memctl_config_regs(const fsl_ddr_cfg_regs_t *ddr);  /* processor specific function */  void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, -				   unsigned int ctrl_num); +				   unsigned int ctrl_num, int step);  /* board specific function */  int fsl_ddr_get_dimm_params(dimm_params_t *pdimm, diff --git a/arch/powerpc/cpu/mpc8xxx/ddr/ddr3_dimm_params.c b/arch/powerpc/cpu/mpc8xxx/ddr/ddr3_dimm_params.c index 3e7c269e4..b67158c0f 100644 --- a/arch/powerpc/cpu/mpc8xxx/ddr/ddr3_dimm_params.c +++ b/arch/powerpc/cpu/mpc8xxx/ddr/ddr3_dimm_params.c @@ -129,6 +129,7 @@ ddr_compute_dimm_parameters(const ddr3_spd_eeprom_t *spd,  		pdimm->ec_sdram_width = 0;  	pdimm->data_width = pdimm->primary_sdram_width  			  + pdimm->ec_sdram_width; +	pdimm->device_width = 1 << ((spd->organization & 0x7) + 2);  	/* These are the types defined by the JEDEC DDR3 SPD spec */  	pdimm->mirrored_dimm = 0; diff --git a/arch/powerpc/cpu/mpc8xxx/ddr/interactive.c b/arch/powerpc/cpu/mpc8xxx/ddr/interactive.c index 1ed6c7715..260fce577 100644 --- a/arch/powerpc/cpu/mpc8xxx/ddr/interactive.c +++ b/arch/powerpc/cpu/mpc8xxx/ddr/interactive.c @@ -205,6 +205,7 @@ static void fsl_ddr_dimm_parameters_edit(fsl_ddr_info_t *pinfo,  		DIMM_PARM(primary_sdram_width),  		DIMM_PARM(ec_sdram_width),  		DIMM_PARM(registered_dimm), +		DIMM_PARM(device_width),  		DIMM_PARM(n_row_addr),  		DIMM_PARM(n_col_addr), @@ -263,6 +264,7 @@ static void print_dimm_parameters(const dimm_params_t *pdimm)  		DIMM_PARM(primary_sdram_width),  		DIMM_PARM(ec_sdram_width),  		DIMM_PARM(registered_dimm), +		DIMM_PARM(device_width),  		DIMM_PARM(n_row_addr),  		DIMM_PARM(n_col_addr), @@ -443,6 +445,7 @@ static void fsl_ddr_options_edit(fsl_ddr_info_t *pinfo,  		CTRL_OPTIONS(twoT_en),  		CTRL_OPTIONS(threeT_en),  		CTRL_OPTIONS(ap_en), +		CTRL_OPTIONS(x4_en),  		CTRL_OPTIONS(bstopre),  		CTRL_OPTIONS(wrlvl_override),  		CTRL_OPTIONS(wrlvl_sample), @@ -687,6 +690,7 @@ static void print_memctl_options(const memctl_options_t *popts)  		CTRL_OPTIONS(threeT_en),  		CTRL_OPTIONS(registered_dimm_en),  		CTRL_OPTIONS(ap_en), +		CTRL_OPTIONS(x4_en),  		CTRL_OPTIONS(bstopre),  		CTRL_OPTIONS(wrlvl_override),  		CTRL_OPTIONS(wrlvl_sample), diff --git a/arch/powerpc/cpu/mpc8xxx/ddr/lc_common_dimm_params.c b/arch/powerpc/cpu/mpc8xxx/ddr/lc_common_dimm_params.c index e958e138d..56128a7b9 100644 --- a/arch/powerpc/cpu/mpc8xxx/ddr/lc_common_dimm_params.c +++ b/arch/powerpc/cpu/mpc8xxx/ddr/lc_common_dimm_params.c @@ -218,12 +218,16 @@ compute_lowest_common_dimm_parameters(const dimm_params_t *dimm_params,  		if (dimm_params[i].n_ranks) {  			if (dimm_params[i].registered_dimm) {  				temp1 = 1; +#ifndef CONFIG_SPL_BUILD  				printf("Detected RDIMM %s\n",  					dimm_params[i].mpart); +#endif  			} else {  				temp2 = 1; +#ifndef CONFIG_SPL_BUILD  				printf("Detected UDIMM %s\n",  					dimm_params[i].mpart); +#endif  			}  		}  	} diff --git a/arch/powerpc/cpu/mpc8xxx/ddr/main.c b/arch/powerpc/cpu/mpc8xxx/ddr/main.c index 7a8636de1..842bf1989 100644 --- a/arch/powerpc/cpu/mpc8xxx/ddr/main.c +++ b/arch/powerpc/cpu/mpc8xxx/ddr/main.c @@ -25,10 +25,6 @@ void fsl_ddr_set_lawbar(  		unsigned int ctrl_num);  void fsl_ddr_set_intl3r(const unsigned int granule_size); -/* processor specific function */ -extern void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, -				   unsigned int ctrl_num); -  #if defined(SPD_EEPROM_ADDRESS) || \      defined(SPD_EEPROM_ADDRESS1) || defined(SPD_EEPROM_ADDRESS2) || \      defined(SPD_EEPROM_ADDRESS3) || defined(SPD_EEPROM_ADDRESS4) @@ -365,9 +361,11 @@ fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step,  {  	unsigned int i, j;  	unsigned long long total_mem = 0; +	int assert_reset;  	fsl_ddr_cfg_regs_t *ddr_reg = pinfo->fsl_ddr_config_reg;  	common_timing_params_t *timing_params = pinfo->common_timing_params; +	assert_reset = board_need_mem_reset();  	/* data bus width capacity adjust shift amount */  	unsigned int dbw_capacity_adjust[CONFIG_NUM_DDR_CONTROLLERS]; @@ -462,7 +460,20 @@ fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step,  					timing_params[i].all_DIMMs_registered,  					&pinfo->memctl_opts[i],  					pinfo->dimm_params[i], i); +			/* +			 * For RDIMMs, JEDEC spec requires clocks to be stable +			 * before reset signal is deasserted. For the boards +			 * using fixed parameters, this function should be +			 * be called from board init file. +			 */ +			if (timing_params[i].all_DIMMs_registered) +				assert_reset = 1;  		} +		if (assert_reset) { +			debug("Asserting mem reset\n"); +			board_assert_mem_reset(); +		} +  	case STEP_ASSIGN_ADDRESSES:  		/* STEP 5:  Assign addresses to chip selects */  		check_interleaving_options(pinfo); @@ -504,7 +515,13 @@ fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step,  				fsl_ddr_cfg_regs_t *reg = &ddr_reg[i];  				if (reg->cs[j].config & 0x80000000) {  					unsigned int end; -					end = reg->cs[j].bnds & 0xFFF; +					/* +					 * 0xfffffff is a special value we put +					 * for unused bnds +					 */ +					if (reg->cs[j].bnds == 0xffffffff) +						continue; +					end = reg->cs[j].bnds & 0xffff;  					if (end > max_end) {  						max_end = end;  					} @@ -531,6 +548,7 @@ phys_size_t fsl_ddr_sdram(void)  	unsigned int law_memctl = LAW_TRGT_IF_DDR_1;  	unsigned long long total_memory;  	fsl_ddr_info_t info; +	int deassert_reset;  	/* Reset info structure. */  	memset(&info, 0, sizeof(fsl_ddr_info_t)); @@ -559,7 +577,21 @@ phys_size_t fsl_ddr_sdram(void)  		}  	} -	/* Program configuration registers. */ +	/* +	 * Program configuration registers. +	 * JEDEC specs requires clocks to be stable before deasserting reset +	 * for RDIMMs. Clocks start after chip select is enabled and clock +	 * control register is set. During step 1, all controllers have their +	 * registers set but not enabled. Step 2 proceeds after deasserting +	 * reset through board FPGA or GPIO. +	 * For non-registered DIMMs, initialization can go through but it is +	 * also OK to follow the same flow. +	 */ +	deassert_reset = board_need_mem_reset(); +	for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) { +		if (info.common_timing_params[i].all_DIMMs_registered) +			deassert_reset = 1; +	}  	for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) {  		debug("Programming controller %u\n", i);  		if (info.common_timing_params[i].ndimms_present == 0) { @@ -567,8 +599,22 @@ phys_size_t fsl_ddr_sdram(void)  					"skipping programming\n", i);  			continue;  		} - -		fsl_ddr_set_memctl_regs(&(info.fsl_ddr_config_reg[i]), i); +		/* +		 * The following call with step = 1 returns before enabling +		 * the controller. It has to finish with step = 2 later. +		 */ +		fsl_ddr_set_memctl_regs(&(info.fsl_ddr_config_reg[i]), i, +					deassert_reset ? 1 : 0); +	} +	if (deassert_reset) { +		/* Use board FPGA or GPIO to deassert reset signal */ +		debug("Deasserting mem reset\n"); +		board_deassert_mem_reset(); +		for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) { +			/* Call with step = 2 to continue initialization */ +			fsl_ddr_set_memctl_regs(&(info.fsl_ddr_config_reg[i]), +						i, 2); +		}  	}  	/* program LAWs */ @@ -637,7 +683,8 @@ phys_size_t fsl_ddr_sdram(void)  #if !defined(CONFIG_PHYS_64BIT)  	/* Check for 4G or more.  Bad. */  	if (total_memory >= (1ull << 32)) { -		printf("Detected %lld MB of memory\n", total_memory >> 20); +		puts("Detected "); +		print_size(total_memory, " of memory\n");  		printf("       This U-Boot only supports < 4G of DDR\n");  		printf("       You could rebuild it with CONFIG_PHYS_64BIT\n");  		printf("       "); /* re-align to match init_func_ram print */ diff --git a/arch/powerpc/cpu/mpc8xxx/ddr/options.c b/arch/powerpc/cpu/mpc8xxx/ddr/options.c index 26369e099..30cdca497 100644 --- a/arch/powerpc/cpu/mpc8xxx/ddr/options.c +++ b/arch/powerpc/cpu/mpc8xxx/ddr/options.c @@ -700,6 +700,8 @@ unsigned int populate_memctl_options(int all_DIMMs_registered,  	}  #endif +	popts->x4_en = (pdimm[0].device_width == 4) ? 1 : 0; +  	/* Choose burst length. */  #if defined(CONFIG_FSL_DDR3)  #if defined(CONFIG_E500MC) diff --git a/arch/powerpc/cpu/mpc8xxx/fdt.c b/arch/powerpc/cpu/mpc8xxx/fdt.c index 89966e0d2..eb7cbbce7 100644 --- a/arch/powerpc/cpu/mpc8xxx/fdt.c +++ b/arch/powerpc/cpu/mpc8xxx/fdt.c @@ -121,11 +121,8 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)  {  	const char *modes[] = { "host", "peripheral", "otg" };  	const char *phys[] = { "ulpi", "utmi" }; -	const char *mode = NULL; -	const char *phy_type = NULL;  	const char *dr_mode_type = NULL;  	const char *dr_phy_type = NULL; -	char usb1_defined = 0;  	int usb_mode_off = -1;  	int usb_phy_off = -1;  	char str[5]; @@ -159,12 +156,6 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)  			dr_mode_type = modes[mode_idx];  			dr_phy_type = phys[phy_idx]; -			/* use usb_dr_mode and usb_phy_type if -			   usb1_defined = 0; these variables are to -			   be deprecated */ -			if (!strcmp(str, "usb1")) -				usb1_defined = 1; -  			if (mode_idx < 0 && phy_idx < 0) {  				printf("WARNING: invalid phy or mode\n");  				return; @@ -183,19 +174,6 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)  		if (usb_phy_off < 0)  			return;  	} - -	if (!usb1_defined) { -		int usb_off = -1; -		mode = getenv("usb_dr_mode"); -		phy_type = getenv("usb_phy_type"); -		if (mode || phy_type) { -			printf("WARNING: usb_dr_mode and usb_phy_type " -				"are to be deprecated soon. Use " -				"hwconfig to set these values instead!!\n"); -			fdt_fixup_usb_mode_phy_type(blob, mode, -				phy_type, usb_off); -		} -	}  }  #endif /* defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB) */ diff --git a/arch/powerpc/cpu/mpc8xxx/law.c b/arch/powerpc/cpu/mpc8xxx/law.c index 89a561e0a..a40108310 100644 --- a/arch/powerpc/cpu/mpc8xxx/law.c +++ b/arch/powerpc/cpu/mpc8xxx/law.c @@ -76,7 +76,8 @@ void disable_law(u8 idx)  	return;  } -#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD) +#if !defined(CONFIG_NAND_SPL) && \ +	(!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL))  static int get_law_entry(u8 i, struct law_entry *e)  {  	u32 lawar; @@ -106,7 +107,8 @@ int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)  	return idx;  } -#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD) +#if !defined(CONFIG_NAND_SPL) && \ +	(!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL))  int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)  {  	u32 idx; diff --git a/arch/powerpc/cpu/ppc4xx/4xx_pci.c b/arch/powerpc/cpu/ppc4xx/4xx_pci.c index 2ca355b13..5584e0f3e 100644 --- a/arch/powerpc/cpu/ppc4xx/4xx_pci.c +++ b/arch/powerpc/cpu/ppc4xx/4xx_pci.c @@ -1,26 +1,5 @@ -/*-----------------------------------------------------------------------------+ - *       This source code is dual-licensed.  You may use it under the terms of - *       the GNU General Public license version 2, or under the license below. - * - *       This source code has been made available to you by IBM on an AS-IS - *       basis.  Anyone receiving this source is licensed under IBM - *       copyrights to use it in any way he or she deems fit, including - *       copying it, modifying it, compiling it, and redistributing it either - *       with or without modifications.  No license under IBM patents or - *       patent applications is to be implied by the copyright license. - * - *       Any user of this software should understand that IBM cannot provide - *       technical support for this software and will not be responsible for - *       any consequences resulting from the use of this software. - * - *       Any person who transfers this source code or any derivative work - *       must include the IBM copyright notice, this paragraph, and the - *       preceding two paragraphs in the transferred software. - * - *       COPYRIGHT   I B M   CORPORATION 1995 - *       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M - *-----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------+ +/* + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs   *   *  File Name:   405gp_pci.c   * diff --git a/arch/powerpc/cpu/ppc4xx/4xx_uart.c b/arch/powerpc/cpu/ppc4xx/4xx_uart.c index 1ad19abff..50c28a0d3 100644 --- a/arch/powerpc/cpu/ppc4xx/4xx_uart.c +++ b/arch/powerpc/cpu/ppc4xx/4xx_uart.c @@ -5,30 +5,7 @@   * (C) Copyright 2010   * Stefan Roese, DENX Software Engineering, sr@denx.de.   * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -/* - * This source code is dual-licensed.  You may use it under the terms of the - * GNU General Public License version 2, or under the license below. - * - * This source code has been made available to you by IBM on an AS-IS - * basis.  Anyone receiving this source is licensed under IBM - * copyrights to use it in any way he or she deems fit, including - * copying it, modifying it, compiling it, and redistributing it either - * with or without modifications.  No license under IBM patents or - * patent applications is to be implied by the copyright license. - * - * Any user of this software should understand that IBM cannot provide - * technical support for this software and will not be responsible for - * any consequences resulting from the use of this software. - * - * Any person who transfers this source code or any derivative work - * must include the IBM copyright notice, this paragraph, and the - * preceding two paragraphs in the transferred software. - * - * COPYRIGHT   I B M   CORPORATION 1995 - * LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs   */  #include <common.h> @@ -40,7 +17,7 @@  DECLARE_GLOBAL_DATA_PTR; -#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \ +#if defined(CONFIG_405GP) || \      defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \      defined(CONFIG_405EX) || defined(CONFIG_440) @@ -91,7 +68,7 @@ DECLARE_GLOBAL_DATA_PTR;  #define UDIV_SUBTRACT	0  #define UART0_SDR	SDR0_UART0  #define UART1_SDR	SDR0_UART1 -#else /* CONFIG_405GP || CONFIG_405CR */ +#else /* CONFIG_405GP */  #define CR0_MASK        0x00001fff  #define CR0_EXTCLK_ENA  0x000000c0  #define CR0_UDIV_POS    1 @@ -196,7 +173,7 @@ int get_serial_clock(void)  	 * Let's handle this in some #ifdef's for the SoC's.  	 */ -#if defined(CONFIG_405CR) || defined(CONFIG_405GP) +#if defined(CONFIG_405GP)  	reg = mfdcr(CPC0_CR0) & ~CR0_MASK;  #ifdef CONFIG_SYS_EXT_SERIAL_CLOCK  	clk = CONFIG_SYS_EXT_SERIAL_CLOCK; @@ -223,7 +200,7 @@ int get_serial_clock(void)  #else  	clk = CONFIG_SYS_BASE_BAUD * 16;  #endif -#endif /* CONFIG_405CR */ +#endif  #if defined(CONFIG_405EP)  	{ @@ -288,4 +265,4 @@ int get_serial_clock(void)  	return clk;  } -#endif	/* CONFIG_405GP || CONFIG_405CR */ +#endif	/* CONFIG_405GP */ diff --git a/arch/powerpc/cpu/ppc4xx/cpu.c b/arch/powerpc/cpu/ppc4xx/cpu.c index fe050985e..d1fc7f3fc 100644 --- a/arch/powerpc/cpu/ppc4xx/cpu.c +++ b/arch/powerpc/cpu/ppc4xx/cpu.c @@ -320,25 +320,9 @@ int checkcpu (void)  		puts("405GP Rev. D");  		break; -#ifdef CONFIG_405GP -	case PVR_405GP_RE: /* 405GP rev E and 405CR rev C have same PVR */ +	case PVR_405GP_RE:  		puts("405GP Rev. E");  		break; -#endif - -	case PVR_405CR_RA: -		puts("405CR Rev. A"); -		break; - -	case PVR_405CR_RB: -		puts("405CR Rev. B"); -		break; - -#ifdef CONFIG_405CR -	case PVR_405CR_RC: /* 405GP rev E and 405CR rev C have same PVR */ -		puts("405CR Rev. C"); -		break; -#endif  	case PVR_405GPR_RB:  		puts("405GPr Rev. B"); @@ -647,12 +631,12 @@ int checkcpu (void)  #endif  #if defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) -	printf ("       16 kB I-Cache 16 kB D-Cache"); +	printf("       16 KiB I-Cache 16 KiB D-Cache");  #elif defined(CONFIG_440) -	printf ("       32 kB I-Cache 32 kB D-Cache"); +	printf("       32 KiB I-Cache 32 KiB D-Cache");  #else -	printf ("       16 kB I-Cache %d kB D-Cache", -		((pvr | 0x00000001) == PVR_405GPR_RB) ? 16 : 8); +	printf("       16 KiB I-Cache %d KiB D-Cache", +	       ((pvr | 0x00000001) == PVR_405GPR_RB) ? 16 : 8);  #endif  #endif /* !defined(CONFIG_405) */ diff --git a/arch/powerpc/cpu/ppc4xx/cpu_init.c b/arch/powerpc/cpu/ppc4xx/cpu_init.c index d53d88251..d465dcda8 100644 --- a/arch/powerpc/cpu/ppc4xx/cpu_init.c +++ b/arch/powerpc/cpu/ppc4xx/cpu_init.c @@ -326,7 +326,7 @@ cpu_init_f (void)  	 * External Bus Controller (EBC) Setup  	 */  #if (defined(CONFIG_SYS_EBC_PB0AP) && defined(CONFIG_SYS_EBC_PB0CR)) -#if (defined(CONFIG_405GP) || defined(CONFIG_405CR) || \ +#if (defined(CONFIG_405GP) || \       defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \       defined(CONFIG_405EX) || defined(CONFIG_405))  	/* diff --git a/arch/powerpc/cpu/ppc4xx/miiphy.c b/arch/powerpc/cpu/ppc4xx/miiphy.c index 297155fda..e4a9db676 100644 --- a/arch/powerpc/cpu/ppc4xx/miiphy.c +++ b/arch/powerpc/cpu/ppc4xx/miiphy.c @@ -1,25 +1,6 @@ -/*-----------------------------------------------------------------------------+ -  |   This source code is dual-licensed.  You may use it under the terms of the -  |   GNU General Public License version 2, or under the license below. -  | -  |	  This source code has been made available to you by IBM on an AS-IS -  |	  basis.  Anyone receiving this source is licensed under IBM -  |	  copyrights to use it in any way he or she deems fit, including -  |	  copying it, modifying it, compiling it, and redistributing it either -  |	  with or without modifications.  No license under IBM patents or -  |	  patent applications is to be implied by the copyright license. -  | -  |	  Any user of this software should understand that IBM cannot provide -  |	  technical support for this software and will not be responsible for -  |	  any consequences resulting from the use of this software. -  | -  |	  Any person who transfers this source code or any derivative work -  |	  must include the IBM copyright notice, this paragraph, and the -  |	  preceding two paragraphs in the transferred software. -  | -  |	  COPYRIGHT   I B M   CORPORATION 1995 -  |	  LICENSED MATERIAL  -	PROGRAM PROPERTY OF I B M -  +-----------------------------------------------------------------------------*/ +/* + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs + */  /*-----------------------------------------------------------------------------+    |    |  File Name:	 miiphy.c diff --git a/arch/powerpc/cpu/ppc4xx/speed.c b/arch/powerpc/cpu/ppc4xx/speed.c index 3345e7334..7e077d5a9 100644 --- a/arch/powerpc/cpu/ppc4xx/speed.c +++ b/arch/powerpc/cpu/ppc4xx/speed.c @@ -21,7 +21,7 @@ DECLARE_GLOBAL_DATA_PTR;  #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -#if defined(CONFIG_405GP) || defined(CONFIG_405CR) +#if defined(CONFIG_405GP)  void get_sys_info (PPC4xx_SYS_INFO * sysInfo)  { @@ -1184,7 +1184,7 @@ ulong get_bus_freq (ulong dummy)  {  	ulong val; -#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \ +#if defined(CONFIG_405GP) || \      defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \      defined(CONFIG_405EX) || defined(CONFIG_405) || \      defined(CONFIG_440) diff --git a/arch/powerpc/cpu/ppc4xx/start.S b/arch/powerpc/cpu/ppc4xx/start.S index 57ae1d382..d9d8cbffa 100644 --- a/arch/powerpc/cpu/ppc4xx/start.S +++ b/arch/powerpc/cpu/ppc4xx/start.S @@ -6,46 +6,7 @@   *  Copyright (c) 2008 Nuovation System Designs, LLC   *    Grant Erickson <gerickson@nuovations.com>   * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ -/*------------------------------------------------------------------------------+ - *   This source code is dual-licensed.  You may use it under the terms of the - *   GNU General Public License version 2, or under the license below. - * - *	 This source code has been made available to you by IBM on an AS-IS - *	 basis.	 Anyone receiving this source is licensed under IBM - *	 copyrights to use it in any way he or she deems fit, including - *	 copying it, modifying it, compiling it, and redistributing it either - *	 with or without modifications.	 No license under IBM patents or - *	 patent applications is to be implied by the copyright license. - * - *	 Any user of this software should understand that IBM cannot provide - *	 technical support for this software and will not be responsible for - *	 any consequences resulting from the use of this software. - * - *	 Any person who transfers this source code or any derivative work - *	 must include the IBM copyright notice, this paragraph, and the - *	 preceding two paragraphs in the transferred software. - * - *	 COPYRIGHT   I B M   CORPORATION 1995 - *	 LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M - *------------------------------------------------------------------------------- + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs   */  /* @@ -833,7 +794,7 @@ _start:  #endif /* CONFIG_440 */  /*****************************************************************************/ -#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \ +#if defined(CONFIG_405GP) || \      defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \      defined(CONFIG_405EX) || defined(CONFIG_405)  	/*----------------------------------------------------------------------- */ @@ -1103,7 +1064,7 @@ _start:  #endif /* CONFIG_NAND_SPL */ -#endif	/* CONFIG_405GP || CONFIG_405CR || CONFIG_405 || CONFIG_405EP */ +#endif	/* CONFIG_405GP || CONFIG_405 || CONFIG_405EP */  	/*----------------------------------------------------------------------- */ diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index 7ed93acdc..15e44de41 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -67,6 +67,8 @@  #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5  #define CONFIG_SYS_FSL_RMU  #define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM	2 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x00  #elif defined(CONFIG_MPC8555)  #define CONFIG_MAX_CPUS			1 @@ -131,7 +133,10 @@  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_IFC_A002769  #define CONFIG_SYS_FSL_ERRATUM_P1010_A003549 +#define CONFIG_SYS_FSL_ERRATUM_SEC_A003571  #define CONFIG_SYS_FSL_ERRATUM_IFC_A003399 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x10  /* P1011 is single core version of P1020 */  #elif defined(CONFIG_P1011) @@ -249,6 +254,8 @@  #define CONFIG_SYS_FM_MURAM_SIZE	0x10000  #define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2"  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xff600000 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x11  /* P1024 is lower end variant of P1020 */  #elif defined(CONFIG_P1024) @@ -303,6 +310,7 @@  #elif defined(CONFIG_PPC_P2041) /* also supports P2040 */  #define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */  #define CONFIG_MAX_CPUS			4  #define CONFIG_SYS_FSL_NUM_CC_PLLS	2  #define CONFIG_SYS_FSL_NUM_LAWS		32 @@ -333,9 +341,12 @@  #define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000  #define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034  #define CONFIG_SYS_FSL_ERRATUM_A004849 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x11  #elif defined(CONFIG_PPC_P3041)  #define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */  #define CONFIG_MAX_CPUS			4  #define CONFIG_SYS_FSL_NUM_CC_PLLS	2  #define CONFIG_SYS_FSL_NUM_LAWS		32 @@ -366,9 +377,13 @@  #define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000  #define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034  #define CONFIG_SYS_FSL_ERRATUM_A004849 +#define CONFIG_SYS_FSL_ERRATUM_A005812 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x20  #elif defined(CONFIG_PPC_P4080) /* also supports P4040 */  #define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */  #define CONFIG_MAX_CPUS			8  #define CONFIG_SYS_FSL_NUM_CC_PLLS	4  #define CONFIG_SYS_FSL_NUM_LAWS		32 @@ -410,10 +425,14 @@  #define CONFIG_SYS_FSL_ERRATUM_A004849  #define CONFIG_SYS_FSL_ERRATUM_A004580  #define CONFIG_SYS_P4080_ERRATUM_PCIE_A003 +#define CONFIG_SYS_FSL_ERRATUM_A005812 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x20  #elif defined(CONFIG_PPC_P5020) /* also supports P5010 */  #define CONFIG_SYS_PPC64		/* 64-bit core */  #define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */  #define CONFIG_MAX_CPUS			2  #define CONFIG_SYS_FSL_NUM_CC_PLLS	2  #define CONFIG_SYS_FSL_NUM_LAWS		32 @@ -440,10 +459,13 @@  #define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x10  #define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xc0000000  #define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x20  #elif defined(CONFIG_PPC_P5040)  #define CONFIG_SYS_PPC64  #define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */  #define CONFIG_MAX_CPUS			4  #define CONFIG_SYS_FSL_NUM_CC_PLLS	3  #define CONFIG_SYS_FSL_NUM_LAWS		32 @@ -469,6 +491,7 @@  #define CONFIG_SYS_FSL_ERRATUM_A004510  #define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x10  #define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000 +#define CONFIG_SYS_FSL_ERRATUM_A005812  #elif defined(CONFIG_BSC9131)  #define CONFIG_MAX_CPUS			1 @@ -492,12 +515,18 @@  #define CONFIG_TSECV2  #define CONFIG_SYS_FSL_SEC_COMPAT	4  #define CONFIG_NUM_DDR_CONTROLLERS	2 +#define CONFIG_SYS_FSL_DSP_DDR_ADDR	0x40000000 +#define CONFIG_SYS_FSL_DSP_M2_RAM_ADDR	0xb0000000 +#define CONFIG_SYS_FSL_DSP_M3_RAM_ADDR	0xc0000000 +#define CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT	0xff600000  #define CONFIG_SYS_FSL_IFC_BANK_COUNT	3  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000  #define CONFIG_NAND_FSL_IFC  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111  #define CONFIG_SYS_FSL_ESDHC_P1010_BROKEN_SDCLK  #define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x11  #elif defined(CONFIG_PPC_T4240) || defined(CONFIG_PPC_T4160)  #define CONFIG_E6500 @@ -523,6 +552,8 @@  #endif  #define CONFIG_SYS_FSL_NUM_CC_PLLS	5  #define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SRDS_1 +#define CONFIG_SYS_FSL_SRDS_2  #define CONFIG_SYS_FSL_SRDS_3  #define CONFIG_SYS_FSL_SRDS_4  #define CONFIG_SYS_FSL_SEC_COMPAT	4 @@ -536,6 +567,7 @@  #define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2  #define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9  #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_SRIO_LIODN  #define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_A004468 @@ -552,6 +584,8 @@  #define CONFIG_SYS_FSL_QORIQ_CHASSIS2	/* Freescale Chassis generation 2 */  #define CONFIG_SYS_FSL_QMAN_V3		/* QMAN version 3 */  #define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SRDS_1 +#define CONFIG_SYS_FSL_SRDS_2  #define CONFIG_SYS_FSL_SEC_COMPAT	4  #define CONFIG_SYS_NUM_FMAN		1  #define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_7 @@ -576,6 +610,7 @@  #define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2  #define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9  #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_SRIO_LIODN  #else  #define CONFIG_MAX_CPUS			2  #define CONFIG_SYS_FSL_CORES_PER_CLUSTER 2 @@ -612,6 +647,18 @@  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#elif defined(CONFIG_PPC_C29X) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_FSL_SDHC_V2_3 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3 +#define CONFIG_TSECV2_1 +#define CONFIG_SYS_FSL_SEC_COMPAT	6 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	8 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +  #else  #error Processor type not defined for this platform  #endif diff --git a/arch/powerpc/include/asm/fsl_ddr_dimm_params.h b/arch/powerpc/include/asm/fsl_ddr_dimm_params.h index ffe4db8b8..bd312ad5c 100644 --- a/arch/powerpc/include/asm/fsl_ddr_dimm_params.h +++ b/arch/powerpc/include/asm/fsl_ddr_dimm_params.h @@ -26,6 +26,7 @@ typedef struct dimm_params_s {  	unsigned int primary_sdram_width;  	unsigned int ec_sdram_width;  	unsigned int registered_dimm; +	unsigned int device_width;	/* x4, x8, x16 components */  	/* SDRAM device parameters */  	unsigned int n_row_addr; diff --git a/arch/powerpc/include/asm/fsl_ddr_sdram.h b/arch/powerpc/include/asm/fsl_ddr_sdram.h index 640d3297d..f4eec82d5 100644 --- a/arch/powerpc/include/asm/fsl_ddr_sdram.h +++ b/arch/powerpc/include/asm/fsl_ddr_sdram.h @@ -277,6 +277,7 @@ typedef struct memctl_options_s {  	unsigned int mirrored_dimm;  	unsigned int quad_rank_present;  	unsigned int ap_en;	/* address parity enable for RDIMM */ +	unsigned int x4_en;	/* enable x4 devices */  	/* Global Timing Parameters */  	unsigned int cas_latency_override; @@ -330,9 +331,31 @@ extern phys_size_t fsl_ddr_sdram(void);  extern phys_size_t fsl_ddr_sdram_size(void);  extern int fsl_use_spd(void);  extern void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, -					unsigned int ctrl_num); +					unsigned int ctrl_num, int step);  u32 fsl_ddr_get_intl3r(void); +static void __board_assert_mem_reset(void) +{ +} + +static void __board_deassert_mem_reset(void) +{ +} + +void board_assert_mem_reset(void) +	__attribute__((weak, alias("__board_assert_mem_reset"))); + +void board_deassert_mem_reset(void) +	__attribute__((weak, alias("__board_deassert_mem_reset"))); + +static int __board_need_mem_reset(void) +{ +	return 0; +} + +int board_need_mem_reset(void) +	__attribute__((weak, alias("__board_need_mem_reset"))); +  /*   * The 85xx boards have a common prototype for fixed_sdram so put the   * declaration here. diff --git a/arch/powerpc/include/asm/fsl_i2c.h b/arch/powerpc/include/asm/fsl_i2c.h index 4f7134132..d6537fd63 100644 --- a/arch/powerpc/include/asm/fsl_i2c.h +++ b/arch/powerpc/include/asm/fsl_i2c.h @@ -54,6 +54,7 @@ typedef struct fsl_i2c {  #define I2C_CR_MTX	0x10  #define I2C_CR_TXAK	0x08  #define I2C_CR_RSTA	0x04 +#define I2C_CR_BIT6	0x02	/* required for workaround A004447 */  #define I2C_CR_BCST	0x01  	u8 sr;		/* I2C status register */ diff --git a/arch/powerpc/include/asm/fsl_law.h b/arch/powerpc/include/asm/fsl_law.h index bea163676..37d3a2246 100644 --- a/arch/powerpc/include/asm/fsl_law.h +++ b/arch/powerpc/include/asm/fsl_law.h @@ -82,7 +82,7 @@ enum law_trgt_if {  #ifndef CONFIG_MPC8641  	LAW_TRGT_IF_PCIE_1 = 0x02,  #endif -#if defined(CONFIG_BSC9131) +#if defined(CONFIG_BSC9131) || defined(CONFIG_BSC9132)  	LAW_TRGT_IF_OCN_DSP = 0x03,  #else  #if !defined(CONFIG_MPC8572) && !defined(CONFIG_P2020) @@ -92,9 +92,14 @@ enum law_trgt_if {  	LAW_TRGT_IF_LBC = 0x04,  	LAW_TRGT_IF_CCSR = 0x08,  	LAW_TRGT_IF_DSP_CCSR = 0x09, +	LAW_TRGT_IF_PLATFORM_SRAM = 0x0a,  	LAW_TRGT_IF_DDR_INTRLV = 0x0b,  	LAW_TRGT_IF_RIO = 0x0c, +#if defined(CONFIG_BSC9132) +	LAW_TRGT_IF_CLASS_DSP = 0x0d, +#else  	LAW_TRGT_IF_RIO_2 = 0x0d, +#endif  	LAW_TRGT_IF_DPAA_SWP_SRAM = 0x0e,  	LAW_TRGT_IF_DDR = 0x0f,  	LAW_TRGT_IF_DDR_2 = 0x16,	/* 2nd controller */ diff --git a/arch/powerpc/include/asm/fsl_liodn.h b/arch/powerpc/include/asm/fsl_liodn.h index 3f543d924..44bc88dce 100644 --- a/arch/powerpc/include/asm/fsl_liodn.h +++ b/arch/powerpc/include/asm/fsl_liodn.h @@ -29,6 +29,13 @@ struct srio_liodn_id_table {  		+ CONFIG_SYS_MPC85xx_GUTS_OFFSET + CONFIG_SYS_CCSRBAR, \  	} +#define SET_SRIO_LIODN_BASE(port, id_a) \ +	{ .id = { id_a }, .num_ids = 1, .portid = port, \ +	  .reg_offset[0] = offsetof(struct ccsr_rio, liodn) \ +		+ (port - 1) * 0x200 \ +		+ CONFIG_SYS_FSL_SRIO_ADDR, \ +	} +  struct liodn_id_table {  	const char * compat;  	u32 id[2]; diff --git a/arch/powerpc/include/asm/fsl_pci.h b/arch/powerpc/include/asm/fsl_pci.h index c740da37c..749411c10 100644 --- a/arch/powerpc/include/asm/fsl_pci.h +++ b/arch/powerpc/include/asm/fsl_pci.h @@ -1,5 +1,5 @@  /* - * Copyright 2007,2009-2011 Freescale Semiconductor, Inc. + * Copyright 2007,2009-2012 Freescale Semiconductor, Inc.   *   * SPDX-License-Identifier:	GPL-2.0+   */ @@ -13,6 +13,34 @@  #define PEX_IP_BLK_REV_2_2	0x02080202  #define PEX_IP_BLK_REV_2_3	0x02080203 +#define PEX_IP_BLK_REV_3_0	0x02080300 + +/* Freescale-specific PCI config registers */ +#define FSL_PCI_PBFR		0x44 + +#ifdef CONFIG_SYS_FSL_PCI_VER_3_X +/* Currently only the PCIe capability is used, so hardcode the offset. + * if more capabilities need to be justified, the capability link method + * should be applied here + */ +#define FSL_PCIE_CAP_ID		0x70 +#define PCI_DCR		0x78    /* PCIe Device Control Register */ +#define PCI_DSR		0x7a    /* PCIe Device Status Register */ +#define PCI_LSR		0x82    /* PCIe Link Status Register */ +#define PCI_LCR		0x80    /* PCIe Link Control Register */ +#else +#define FSL_PCIE_CAP_ID		0x4c +#define PCI_DCR		0x54    /* PCIe Device Control Register */ +#define PCI_DSR		0x56    /* PCIe Device Status Register */ +#define PCI_LSR		0x5e    /* PCIe Link Status Register */ +#define PCI_LCR		0x5c    /* PCIe Link Control Register */ +#endif + +#define FSL_PCIE_CFG_RDY	0x4b0 +#define FSL_PROG_IF_AGENT	0x1 + +#define PCI_LTSSM	0x404   /* PCIe Link Training, Status State Machine */ +#define  PCI_LTSSM_L0	0x16    /* L0 state */  int fsl_setup_hose(struct pci_controller *hose, unsigned long addr);  int fsl_is_pci_agent(struct pci_controller *hose); @@ -149,7 +177,10 @@ typedef struct ccsr_pci {  	u32	perr_cap3;	/* 0xe34 - PCIE Error Capture Register 3 */  	char	res23[200];  	u32	pdb_stat;	/* 0xf00 - PCIE Debug Status */ -	char	res24[252]; +	char	res24[16]; +	u32	pex_csr0;	/* 0xf14 - PEX Control/Status register 0*/ +	u32	pex_csr1;	/* 0xf18 - PEX Control/Status register 1*/ +	char	res25[228];  } ccsr_fsl_pci_t;  #define PCIE_CONFIG_PC	0x00020000  #define PCIE_CONFIG_OB_CK	0x00002000 diff --git a/arch/powerpc/include/asm/fsl_serdes.h b/arch/powerpc/include/asm/fsl_serdes.h index 59189adb3..1106d2805 100644 --- a/arch/powerpc/include/asm/fsl_serdes.h +++ b/arch/powerpc/include/asm/fsl_serdes.h @@ -90,6 +90,7 @@ void fsl_serdes_init(void);  #ifdef CONFIG_FSL_CORENET  #ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2  int serdes_get_first_lane(u32 sd, enum srds_prtcl device); +enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane);  #else  int serdes_get_first_lane(enum srds_prtcl device);  #endif diff --git a/arch/powerpc/include/asm/immap_85xx.h b/arch/powerpc/include/asm/immap_85xx.h index 81b3322fe..3a10d778f 100644 --- a/arch/powerpc/include/asm/immap_85xx.h +++ b/arch/powerpc/include/asm/immap_85xx.h @@ -1544,6 +1544,18 @@ struct rio_pw {  };  #endif +#ifdef CONFIG_SYS_FSL_SRIO_LIODN +struct rio_liodn { +	u32	plbr; +	u8	res0[28]; +	u32	plaor; +	u8	res1[12]; +	u32	pludr; +	u32	plldr; +	u8	res2[456]; +}; +#endif +  /* RapidIO Registers */  struct ccsr_rio {  	struct rio_arch	arch; @@ -1566,6 +1578,10 @@ struct ccsr_rio {  	u8	res7[100];  	struct rio_pw	pw;  #endif +#ifdef CONFIG_SYS_FSL_SRIO_LIODN +	u8	res5[8192]; +	struct rio_liodn liodn[CONFIG_SYS_FSL_SRIO_MAX_PORTS]; +#endif  };  #endif @@ -2131,6 +2147,11 @@ typedef struct ccsr_gur {  #ifdef CONFIG_MPC8536  #define MPC85xx_PORPLLSR_DDR_RATIO	0x3e000000  #define MPC85xx_PORPLLSR_DDR_RATIO_SHIFT	25 +#elif defined(CONFIG_PPC_C29X) +#define MPC85xx_PORPLLSR_DDR_RATIO	0x00003f00 +#define MPC85xx_PORPLLSR_DDR_RATIO_SHIFT	(9 - ((gur->pordevsr2 \ +					& MPC85xx_PORDEVSR2_DDR_SPD_0) \ +					>> MPC85xx_PORDEVSR2_DDR_SPD_0_SHIFT))  #else  #if defined(CONFIG_BSC9131) || defined(CONFIG_BSC9132)  #define MPC85xx_PORPLLSR_DDR_RATIO	0x00003f00 @@ -2178,6 +2199,9 @@ typedef struct ccsr_gur {  #elif defined(CONFIG_BSC9132)  #define MPC85xx_PORDEVSR_IO_SEL		0x00FE0000  #define MPC85xx_PORDEVSR_IO_SEL_SHIFT	17 +#elif defined(CONFIG_PPC_C29X) +#define MPC85xx_PORDEVSR_IO_SEL		0x00e00000 +#define MPC85xx_PORDEVSR_IO_SEL_SHIFT	21  #else  #define MPC85xx_PORDEVSR_IO_SEL		0x00780000  #define MPC85xx_PORDEVSR_IO_SEL_SHIFT	19 @@ -2193,6 +2217,10 @@ typedef struct ccsr_gur {  #define MPC85xx_PORDEVSR_RIO_DEV_ID	0x00000007  	u32	pordbgmsr;	/* POR debug mode status */  	u32	pordevsr2;	/* POR I/O device status 2 */ +#if defined(CONFIG_PPC_C29X) +#define MPC85xx_PORDEVSR2_DDR_SPD_0	0x00000008 +#define MPC85xx_PORDEVSR2_DDR_SPD_0_SHIFT	3 +#endif  /* The 8544 RM says this is bit 26, but it's really bit 24 */  #define MPC85xx_PORDEVSR2_SEC_CFG	0x00000080  	u8	res1[8]; @@ -2339,6 +2367,11 @@ typedef struct ccsr_gur {  #define MPC85xx_PMUXCR0_SIM_SEL_MASK	0x0003b000  #define MPC85xx_PMUXCR0_SIM_SEL		0x00014000  #endif +#if defined(CONFIG_PPC_C29X) +#define MPC85xx_PMUXCR_SPI_MASK			0x00000300 +#define MPC85xx_PMUXCR_SPI			0x00000000 +#define MPC85xx_PMUXCR_SPI_GPIO			0x00000100 +#endif  	u32	pmuxcr2;	/* Alt. function signal multiplex control 2 */  #if defined(CONFIG_P1010) || defined(CONFIG_P1014)  #define MPC85xx_PMUXCR2_UART_GPIO		0x40000000 @@ -2526,7 +2559,9 @@ typedef struct serdes_corenet {  #define SRDS_RSTCTL_RSTDONE	0x40000000  #define SRDS_RSTCTL_RSTERR	0x20000000  #define SRDS_RSTCTL_SWRST	0x10000000 -#define SRDS_RSTCTL_SDPD	0x00000020 +#define SRDS_RSTCTL_SDEN	0x00000020 +#define SRDS_RSTCTL_SDRST_B	0x00000040 +#define SRDS_RSTCTL_PLLRST_B	0x00000080  		u32	pllcr0; /* PLL Control Register 0 */  #define SRDS_PLLCR0_POFF		0x80000000  #define SRDS_PLLCR0_RFCK_SEL_MASK	0x70000000 @@ -2811,54 +2846,6 @@ typedef struct ccsr_pme {  	u8	res4[0x400];  } ccsr_pme_t; -#ifdef CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE -struct ccsr_usb_port_ctrl { -	u32	ctrl; -	u32	drvvbuscfg; -	u32	pwrfltcfg; -	u32	sts; -	u8	res_14[0xc]; -	u32	bistcfg; -	u32	biststs; -	u32	abistcfg; -	u32	abiststs; -	u8	res_30[0x10]; -	u32	xcvrprg; -	u32	anaprg; -	u32	anadrv; -	u32	anasts; -}; - -typedef struct ccsr_usb_phy { -	u32	id; -	struct  ccsr_usb_port_ctrl port1; -	u8	res_50[0xc]; -	u32	tvr; -	u32	pllprg[4]; -	u8	res_70[0x4]; -	u32	anaccfg; -	u32	dbg; -	u8	res_7c[0x4]; -	struct  ccsr_usb_port_ctrl port2; -	u8	res_dc[0x334]; -} ccsr_usb_phy_t; - -#define CONFIG_SYS_FSL_USB_CTRL_PHY_EN (1 << 0) -#define CONFIG_SYS_FSL_USB_DRVVBUS_CR_EN (1 << 1) -#define CONFIG_SYS_FSL_USB_PWRFLT_CR_EN (1 << 1) -#define CONFIG_SYS_FSL_USB_PLLPRG2_PHY2_CLK_EN (1 << 0) -#define CONFIG_SYS_FSL_USB_PLLPRG2_PHY1_CLK_EN (1 << 1) -#define CONFIG_SYS_FSL_USB_PLLPRG2_MFI (5 << 16) -#define CONFIG_SYS_FSL_USB_PLLPRG2_PLL_EN (1 << 21) -#else -typedef struct ccsr_usb_phy { -	u8	res0[0x18]; -	u32	usb_enable_override; -	u8	res[0xe4]; -} ccsr_usb_phy_t; -#define CONFIG_SYS_FSL_USB_ENABLE_OVERRIDE 1 -#endif -  #ifdef CONFIG_SYS_FSL_RAID_ENGINE  struct ccsr_raide {  	u8	res0[0x543]; @@ -3008,12 +2995,18 @@ struct ccsr_pman {  #define CONFIG_SYS_MPC85xx_USB2_OFFSET		0x23000  #ifdef CONFIG_TSECV2  #define CONFIG_SYS_TSEC1_OFFSET			0xB0000 +#elif defined(CONFIG_TSECV2_1) +#define CONFIG_SYS_TSEC1_OFFSET			0x10000  #else  #define CONFIG_SYS_TSEC1_OFFSET			0x24000  #endif  #define CONFIG_SYS_MDIO1_OFFSET			0x24000  #define CONFIG_SYS_MPC85xx_ESDHC_OFFSET		0x2e000 +#if defined(CONFIG_PPC_C29X) +#define CONFIG_SYS_FSL_SEC_OFFSET		0x80000 +#else  #define CONFIG_SYS_FSL_SEC_OFFSET		0x30000 +#endif  #define CONFIG_SYS_MPC85xx_SERDES2_OFFSET	0xE3100  #define CONFIG_SYS_MPC85xx_SERDES1_OFFSET	0xE3000  #define CONFIG_SYS_SNVS_OFFSET			0xE6000 @@ -3031,6 +3024,12 @@ struct ccsr_pman {  #define CONFIG_SYS_MPC85xx_GUTS_OFFSET		0xE0000  #define CONFIG_SYS_FSL_SRIO_OFFSET		0xC0000 +#if defined(CONFIG_BSC9132) +#define CONFIG_SYS_FSL_DSP_CCSR_DDR_OFFSET	0x10000 +#define CONFIG_SYS_FSL_DSP_CCSR_DDR_ADDR \ +	(CONFIG_SYS_FSL_DSP_CCSRBAR + CONFIG_SYS_FSL_DSP_CCSR_DDR_OFFSET) +#endif +  #define CONFIG_SYS_FSL_CPC_ADDR	\  	(CONFIG_SYS_CCSRBAR + CONFIG_SYS_FSL_CPC_OFFSET)  #define CONFIG_SYS_FSL_QMAN_ADDR \ diff --git a/arch/powerpc/include/asm/ppc405.h b/arch/powerpc/include/asm/ppc405.h index 892848aac..8bb342b92 100644 --- a/arch/powerpc/include/asm/ppc405.h +++ b/arch/powerpc/include/asm/ppc405.h @@ -1,25 +1,6 @@ -/*----------------------------------------------------------------------------+ -|   This source code is dual-licensed.  You may use it under the terms of the -|   GNU General Public License version 2, or under the license below. -| -|	This source code has been made available to you by IBM on an AS-IS -|	basis.	Anyone receiving this source is licensed under IBM -|	copyrights to use it in any way he or she deems fit, including -|	copying it, modifying it, compiling it, and redistributing it either -|	with or without modifications.	No license under IBM patents or -|	patent applications is to be implied by the copyright license. -| -|	Any user of this software should understand that IBM cannot provide -|	technical support for this software and will not be responsible for -|	any consequences resulting from the use of this software. -| -|	Any person who transfers this source code or any derivative work -|	must include the IBM copyright notice, this paragraph, and the -|	preceding two paragraphs in the transferred software. -| -|	COPYRIGHT   I B M   CORPORATION 1999 -|	LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M -+----------------------------------------------------------------------------*/ +/* + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs + */  #ifndef	__PPC405_H__  #define __PPC405_H__ diff --git a/arch/powerpc/include/asm/ppc405cr.h b/arch/powerpc/include/asm/ppc405cr.h deleted file mode 100644 index 0ea69bd09..000000000 --- a/arch/powerpc/include/asm/ppc405cr.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * (C) Copyright 2010 - * Stefan Roese, DENX Software Engineering, sr@denx.de. - * - * SPDX-License-Identifier:	GPL-2.0+  - */ - -#ifndef _PPC405CR_H_ -#define _PPC405CR_H_ - -#define CONFIG_SDRAM_PPC4xx_IBM_SDRAM	/* IBM SDRAM controller */ - -/* Memory mapped register */ -#define CONFIG_SYS_PERIPHERAL_BASE	0xef600000 /* Internal Peripherals */ - -#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) -#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0400) - -#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) - -/* DCR's */ -#define DCP0_CFGADDR	0x0014		/* Decompression controller addr reg */ -#define DCP0_CFGDATA	0x0015		/* Decompression controller data reg */ -#define OCM0_ISCNTL	0x0019	/* OCM I-side control reg */ -#define OCM0_DSARC	0x001a	/* OCM D-side address compare */ -#define OCM0_DSCNTL	0x001b	/* OCM D-side control */ -#define CPC0_PLLMR	0x00b0		/* PLL mode  register */ -#define CPC0_CR0	0x00b1		/* chip control register 0 */ -#define CPC0_CR1	0x00b2		/* chip control register 1 */ -#define CPC0_PSR	0x00b4		/* chip pin strapping reg */ -#define CPC0_EIRR	0x00b6		/* ext interrupt routing reg */ -#define CPC0_SR		0x00b8		/* Power management status */ -#define CPC0_ER		0x00b9		/* Power management enable */ -#define CPC0_FR		0x00ba		/* Power management force */ -#define CPC0_ECR	0x00aa		/* edge conditioner register */ - -#define PLLMR_FWD_DIV_MASK	0xE0000000	/* Forward Divisor */ -#define PLLMR_FWD_DIV_BYPASS	0xE0000000 -#define PLLMR_FWD_DIV_3		0xA0000000 -#define PLLMR_FWD_DIV_4		0x80000000 -#define PLLMR_FWD_DIV_6		0x40000000 - -#define PLLMR_FB_DIV_MASK	0x1E000000	/* Feedback Divisor */ -#define PLLMR_FB_DIV_1		0x02000000 -#define PLLMR_FB_DIV_2		0x04000000 -#define PLLMR_FB_DIV_3		0x06000000 -#define PLLMR_FB_DIV_4		0x08000000 - -#define PLLMR_TUNING_MASK	0x01F80000 - -#define PLLMR_CPU_TO_PLB_MASK	0x00060000	/* CPU:PLB Frequency Divisor */ -#define PLLMR_CPU_PLB_DIV_1	0x00000000 -#define PLLMR_CPU_PLB_DIV_2	0x00020000 -#define PLLMR_CPU_PLB_DIV_3	0x00040000 -#define PLLMR_CPU_PLB_DIV_4	0x00060000 - -#define PLLMR_OPB_TO_PLB_MASK	0x00018000	/* OPB:PLB Frequency Divisor */ -#define PLLMR_OPB_PLB_DIV_1	0x00000000 -#define PLLMR_OPB_PLB_DIV_2	0x00008000 -#define PLLMR_OPB_PLB_DIV_3	0x00010000 -#define PLLMR_OPB_PLB_DIV_4	0x00018000 - -#define PLLMR_PCI_TO_PLB_MASK	0x00006000	/* PCI:PLB Frequency Divisor */ -#define PLLMR_PCI_PLB_DIV_1	0x00000000 -#define PLLMR_PCI_PLB_DIV_2	0x00002000 -#define PLLMR_PCI_PLB_DIV_3	0x00004000 -#define PLLMR_PCI_PLB_DIV_4	0x00006000 - -#define PLLMR_EXB_TO_PLB_MASK	0x00001800	/* External Bus:PLB Divisor */ -#define PLLMR_EXB_PLB_DIV_2	0x00000000 -#define PLLMR_EXB_PLB_DIV_3	0x00000800 -#define PLLMR_EXB_PLB_DIV_4	0x00001000 -#define PLLMR_EXB_PLB_DIV_5	0x00001800 - -/* definitions for PPC405GPr (new mode strapping) */ -#define PLLMR_FWDB_DIV_MASK	0x00000007	/* Forward Divisor B */ - -#define PSR_PLL_FWD_MASK	0xC0000000 -#define PSR_PLL_FDBACK_MASK	0x30000000 -#define PSR_PLL_TUNING_MASK	0x0E000000 -#define PSR_PLB_CPU_MASK	0x01800000 -#define PSR_OPB_PLB_MASK	0x00600000 -#define PSR_PCI_PLB_MASK	0x00180000 -#define PSR_EB_PLB_MASK		0x00060000 -#define PSR_ROM_WIDTH_MASK	0x00018000 -#define PSR_ROM_LOC		0x00004000 -#define PSR_PCI_ASYNC_EN	0x00001000 -#define PSR_PERCLK_SYNC_MODE_EN 0x00000800	/* PPC405GPr only */ -#define PSR_PCI_ARBIT_EN	0x00000400 -#define PSR_NEW_MODE_EN		0x00000020	/* PPC405GPr only */ - -#endif /* _PPC405CR_H_ */ diff --git a/arch/powerpc/include/asm/ppc440.h b/arch/powerpc/include/asm/ppc440.h index 411d441a2..0f5bc8d1c 100644 --- a/arch/powerpc/include/asm/ppc440.h +++ b/arch/powerpc/include/asm/ppc440.h @@ -1,26 +1,3 @@ -/*----------------------------------------------------------------------------+ -|   This source code is dual-licensed.  You may use it under the terms of the -|   GNU General Public License version 2, or under the license below. -| -|	This source code has been made available to you by IBM on an AS-IS -|	basis.	Anyone receiving this source is licensed under IBM -|	copyrights to use it in any way he or she deems fit, including -|	copying it, modifying it, compiling it, and redistributing it either -|	with or without modifications.	No license under IBM patents or -|	patent applications is to be implied by the copyright license. -| -|	Any user of this software should understand that IBM cannot provide -|	technical support for this software and will not be responsible for -|	any consequences resulting from the use of this software. -| -|	Any person who transfers this source code or any derivative work -|	must include the IBM copyright notice, this paragraph, and the -|	preceding two paragraphs in the transferred software. -| -|	COPYRIGHT   I B M   CORPORATION 1999 -|	LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M -+----------------------------------------------------------------------------*/ -  /*   * (C) Copyright 2006   * Sylvie Gohl,             AMCC/IBM, gohl.sylvie@fr.ibm.com @@ -32,7 +9,7 @@   * (C) Copyright 2010   * Stefan Roese, DENX Software Engineering, sr@denx.de.   * - * SPDX-License-Identifier:	GPL-2.0+ + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs   */  #ifndef __PPC440_H__ diff --git a/arch/powerpc/include/asm/ppc4xx-ebc.h b/arch/powerpc/include/asm/ppc4xx-ebc.h index 9eb50ee84..32062fd41 100644 --- a/arch/powerpc/include/asm/ppc4xx-ebc.h +++ b/arch/powerpc/include/asm/ppc4xx-ebc.h @@ -14,12 +14,12 @@   * Within this group there is a slight variation concerning the bit field   * position of the EMPL and EMPH fields:   */ -#if defined(CONFIG_405CR) || defined(CONFIG_405GP) || \ +#if defined(CONFIG_405GP) || \      defined(CONFIG_405EP) || \      defined(CONFIG_440EP) || defined(CONFIG_440GR) || \      defined(CONFIG_440EPX) || defined(CONFIG_440GRX)  #define CONFIG_EBC_PPC4xx_IBM_VER1 -#if defined(CONFIG_405CR) || defined(CONFIG_405GP) || \ +#if defined(CONFIG_405GP) || \      defined(CONFIG_405EP)  #define EBC_CFG_EMPH_POS	8  #define EBC_CFG_EMPL_POS	6 @@ -32,7 +32,7 @@  /*   * Define the max number of EBC banks (chip selects)   */ -#if defined(CONFIG_405CR) || defined(CONFIG_405GP) || \ +#if defined(CONFIG_405GP) || \      defined(CONFIG_405EZ) || \      defined(CONFIG_440GP) || defined(CONFIG_440GX)  #define EBC_NUM_BANKS	8 diff --git a/arch/powerpc/include/asm/ppc4xx-emac.h b/arch/powerpc/include/asm/ppc4xx-emac.h index a219fa97f..e6eb33222 100644 --- a/arch/powerpc/include/asm/ppc4xx-emac.h +++ b/arch/powerpc/include/asm/ppc4xx-emac.h @@ -1,25 +1,6 @@ -/*----------------------------------------------------------------------------+ -|   This source code is dual-licensed.  You may use it under the terms of the -|   GNU General Public License version 2, or under the license below. -| -|	This source code has been made available to you by IBM on an AS-IS -|	basis.	Anyone receiving this source is licensed under IBM -|	copyrights to use it in any way he or she deems fit, including -|	copying it, modifying it, compiling it, and redistributing it either -|	with or without modifications.	No license under IBM patents or -|	patent applications is to be implied by the copyright license. -| -|	Any user of this software should understand that IBM cannot provide -|	technical support for this software and will not be responsible for -|	any consequences resulting from the use of this software. -| -|	Any person who transfers this source code or any derivative work -|	must include the IBM copyright notice, this paragraph, and the -|	preceding two paragraphs in the transferred software. -| -|	COPYRIGHT   I B M   CORPORATION 1999 -|	LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M -+----------------------------------------------------------------------------*/ +/* + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs + */  /*----------------------------------------------------------------------------+  |  |  File Name:	enetemac.h diff --git a/arch/powerpc/include/asm/ppc4xx-mal.h b/arch/powerpc/include/asm/ppc4xx-mal.h index 71986856b..d15290dc1 100644 --- a/arch/powerpc/include/asm/ppc4xx-mal.h +++ b/arch/powerpc/include/asm/ppc4xx-mal.h @@ -1,26 +1,7 @@  /* include/mal.h, openbios_walnut, walnut_bios 8/6/99 08:48:40 */ -/*----------------------------------------------------------------------------+ -|   This source code is dual-licensed.  You may use it under the terms of the -|   GNU General Public License version 2, or under the license below. -| -|	This source code has been made available to you by IBM on an AS-IS -|	basis.	Anyone receiving this source is licensed under IBM -|	copyrights to use it in any way he or she deems fit, including -|	copying it, modifying it, compiling it, and redistributing it either -|	with or without modifications.	No license under IBM patents or -|	patent applications is to be implied by the copyright license. -| -|	Any user of this software should understand that IBM cannot provide -|	technical support for this software and will not be responsible for -|	any consequences resulting from the use of this software. -| -|	Any person who transfers this source code or any derivative work -|	must include the IBM copyright notice, this paragraph, and the -|	preceding two paragraphs in the transferred software. -| -|	COPYRIGHT   I B M   CORPORATION 1999 -|	LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M -+----------------------------------------------------------------------------*/ +/* + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs + */  /*----------------------------------------------------------------------------+  |  |  File Name:	mal.h diff --git a/arch/powerpc/include/asm/ppc4xx.h b/arch/powerpc/include/asm/ppc4xx.h index 9f2a08b8b..8d703c663 100644 --- a/arch/powerpc/include/asm/ppc4xx.h +++ b/arch/powerpc/include/asm/ppc4xx.h @@ -1,25 +1,6 @@ -/*----------------------------------------------------------------------------+ -|       This source code is dual-licensed.  You may use it under the terms of -|       the GNU General Public License version 2, or under the license below. -| -|       This source code has been made available to you by IBM on an AS-IS -|       basis.  Anyone receiving this source is licensed under IBM -|       copyrights to use it in any way he or she deems fit, including -|       copying it, modifying it, compiling it, and redistributing it either -|       with or without modifications.  No license under IBM patents or -|       patent applications is to be implied by the copyright license. -| -|       Any user of this software should understand that IBM cannot provide -|       technical support for this software and will not be responsible for -|       any consequences resulting from the use of this software. -| -|       Any person who transfers this source code or any derivative work -|       must include the IBM copyright notice, this paragraph, and the -|       preceding two paragraphs in the transferred software. -| -|       COPYRIGHT   I B M   CORPORATION 1999 -|       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M -+----------------------------------------------------------------------------*/ +/* + * SPDX-License-Identifier:	GPL-2.0	ibm-pibs + */  #ifndef	__PPC4XX_H__  #define __PPC4XX_H__ @@ -27,10 +8,6 @@  /*   * Include SoC specific headers   */ -#if defined(CONFIG_405CR) -#include <asm/ppc405cr.h> -#endif -  #if defined(CONFIG_405EP)  #include <asm/ppc405ep.h>  #endif diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h index 56b22d840..c0fb51993 100644 --- a/arch/powerpc/include/asm/processor.h +++ b/arch/powerpc/include/asm/processor.h @@ -847,7 +847,7 @@  /* System-On-Chip Version Register (SVR) field extraction */  #define SVR_VER(svr)	(((svr) >> 16) & 0xFFFF) /* Version field */ -#define SVR_REV(svr)	(((svr) >>  0) & 0xFFFF) /* Revision field */ +#define SVR_REV(svr)	(((svr) >>  0) & 0xFF)	 /* Revision field */  #define SVR_CID(svr)	(((svr) >> 28) & 0x0F)	 /* Company or manufacturer ID */  #define SVR_SOCOP(svr)	(((svr) >> 22) & 0x3F)	 /* SOC integration options */ @@ -894,9 +894,6 @@  #define PVR_405GP_RC	0x40110082  #define PVR_405GP_RD	0x401100C4  #define PVR_405GP_RE	0x40110145  /* same as pc405cr rev c */ -#define PVR_405CR_RA	0x40110041 -#define PVR_405CR_RB	0x401100C5 -#define PVR_405CR_RC	0x40110145  /* same as pc405gp rev e */  #define PVR_405EP_RA	0x51210950  #define PVR_405GPR_RB	0x50910951  #define PVR_405EZ_RA	0x41511460 @@ -1043,9 +1040,6 @@  /* System Version Register (SVR) field extraction */ -#define SVR_VER(svr)	(((svr) >>  16) & 0xFFFF)	/* Version field */ -#define SVR_REV(svr)	(((svr) >>   0) & 0xFFFF)	/* Revison field */ -  #define SVR_SUBVER(svr)	(((svr) >>  8) & 0xFF)	/* Process/MFG sub-version */  #define SVR_FAM(svr)	(((svr) >> 20) & 0xFFF)	/* Family field */ @@ -1119,6 +1113,9 @@  #define SVR_T4240	0x824000  #define SVR_T4120	0x824001  #define SVR_T4160	0x824100 +#define SVR_C291	0x850000 +#define SVR_C292	0x850020 +#define SVR_C293	0x850030  #define SVR_B4860	0X868000  #define SVR_G4860	0x868001  #define SVR_G4060	0x868003 diff --git a/arch/powerpc/include/asm/u-boot.h b/arch/powerpc/include/asm/u-boot.h index f17b146da..5916f7ce9 100644 --- a/arch/powerpc/include/asm/u-boot.h +++ b/arch/powerpc/include/asm/u-boot.h @@ -67,7 +67,6 @@ typedef struct bd_info {  	unsigned int	bi_baudrate;	/* Console Baudrate */  #if defined(CONFIG_405)   || \      defined(CONFIG_405GP) || \ -    defined(CONFIG_405CR) || \      defined(CONFIG_405EP) || \      defined(CONFIG_405EZ) || \      defined(CONFIG_405EX) || \ diff --git a/arch/x86/cpu/coreboot/config.mk b/arch/x86/cpu/coreboot/config.mk deleted file mode 100644 index 0bbd2ffb5..000000000 --- a/arch/x86/cpu/coreboot/config.mk +++ /dev/null @@ -1,7 +0,0 @@ -# -# Copyright (c) 2012 The Chromium OS Authors. -# -# SPDX-License-Identifier:	GPL-2.0+ -# - -CONFIG_ARCH_DEVICE_TREE := coreboot diff --git a/arch/x86/cpu/coreboot/tables.c b/arch/x86/cpu/coreboot/tables.c index b116d5955..0d91adc5e 100644 --- a/arch/x86/cpu/coreboot/tables.c +++ b/arch/x86/cpu/coreboot/tables.c @@ -4,28 +4,7 @@   * Copyright (C) 2008 Advanced Micro Devices, Inc.   * Copyright (C) 2009 coresystems GmbH   * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * SPDX-License-Identifier:	BSD-3-Clause   */  #include <common.h> diff --git a/arch/x86/include/asm/arch-coreboot/sysinfo.h b/arch/x86/include/asm/arch-coreboot/sysinfo.h index 78d3a9d49..8e4a61de7 100644 --- a/arch/x86/include/asm/arch-coreboot/sysinfo.h +++ b/arch/x86/include/asm/arch-coreboot/sysinfo.h @@ -3,28 +3,7 @@   *   * Copyright (C) 2008 Advanced Micro Devices, Inc.   * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * SPDX-License-Identifier:	BSD-3-Clause   */  #ifndef _COREBOOT_SYSINFO_H diff --git a/arch/x86/include/asm/arch-coreboot/tables.h b/arch/x86/include/asm/arch-coreboot/tables.h index ad34a8b0f..0d02fe059 100644 --- a/arch/x86/include/asm/arch-coreboot/tables.h +++ b/arch/x86/include/asm/arch-coreboot/tables.h @@ -3,28 +3,7 @@   *   * Copyright (C) 2008 Advanced Micro Devices, Inc.   * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * SPDX-License-Identifier:	BSD-3-Clause   */  #ifndef _COREBOOT_TABLES_H |