diff options
Diffstat (limited to 'board')
69 files changed, 4668 insertions, 1591 deletions
| diff --git a/board/BuS/vl_ma2sc/vl_ma2sc.c b/board/BuS/vl_ma2sc/vl_ma2sc.c index e2ae6fde6..63f7ad9a7 100644 --- a/board/BuS/vl_ma2sc/vl_ma2sc.c +++ b/board/BuS/vl_ma2sc/vl_ma2sc.c @@ -10,13 +10,13 @@  #include <common.h>  #include <asm/sizes.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include <asm/arch/hardware.h>  #include <asm/arch/clk.h>  #include <asm/arch/at91_matrix.h>  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_pmc.h>  #include <asm/arch/at91_pio.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/at91sam9263.h>  #include <asm/arch/gpio.h>  #include <asm/arch/at91_common.h> @@ -66,35 +66,22 @@ static void vl_ma2sc_nand_hw_init(void)  	/* Configure RDY/BSY */  #ifdef CONFIG_SYS_NAND_READY_PIN -	at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); +	gpio_direction_input(CONFIG_SYS_NAND_READY_PIN);  #endif  	/* Enable NandFlash */ -	at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);  }  #endif  #ifdef CONFIG_MACB  static void vl_ma2sc_macb_hw_init(void)  { -	unsigned long	erstl;  	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC; -	at91_rstc_t	*rstc	= (at91_rstc_t *) ATMEL_BASE_RSTC; +  	/* Enable clock */  	writel(1 << ATMEL_ID_EMAC, &pmc->pcer); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(0x0D) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, &rstc->mr); +	at91_phy_reset();  	at91_macb_hw_init();  } diff --git a/board/actux1/u-boot.lds b/board/actux1/u-boot.lds index b0f09f592..4716e4f0e 100644 --- a/board/actux1/u-boot.lds +++ b/board/actux1/u-boot.lds @@ -87,10 +87,13 @@ SECTIONS  		KEEP(*(.__bss_end));  	} -	/DISCARD/ : { *(.dynsym) } -	/DISCARD/ : { *(.dynstr*) } -	/DISCARD/ : { *(.dynamic*) } -	/DISCARD/ : { *(.plt*) } -	/DISCARD/ : { *(.interp*) } -	/DISCARD/ : { *(.gnu*) } +	.dynsym _end : { *(.dynsym) } +	.dynbss : { *(.dynbss) } +	.dynstr : { *(.dynstr*) } +	.dynamic : { *(.dynamic*) } +	.hash : { *(.hash*) } +	.plt : { *(.plt*) } +	.interp : { *(.interp*) } +	.gnu : { *(.gnu*) } +	.ARM.exidx : { *(.ARM.exidx*) }  } diff --git a/board/actux2/u-boot.lds b/board/actux2/u-boot.lds index d84934e1f..f00d7c72b 100644 --- a/board/actux2/u-boot.lds +++ b/board/actux2/u-boot.lds @@ -87,10 +87,13 @@ SECTIONS  		KEEP(*(.__bss_end));  	} -	/DISCARD/ : { *(.dynsym) } -	/DISCARD/ : { *(.dynstr*) } -	/DISCARD/ : { *(.dynamic*) } -	/DISCARD/ : { *(.plt*) } -	/DISCARD/ : { *(.interp*) } -	/DISCARD/ : { *(.gnu*) } +	.dynsym _end : { *(.dynsym) } +	.dynbss : { *(.dynbss) } +	.dynstr : { *(.dynstr*) } +	.dynamic : { *(.dynamic*) } +	.hash : { *(.hash*) } +	.plt : { *(.plt*) } +	.interp : { *(.interp*) } +	.gnu : { *(.gnu*) } +	.ARM.exidx : { *(.ARM.exidx*) }  } diff --git a/board/actux3/u-boot.lds b/board/actux3/u-boot.lds index 30c204b64..2de3ca60b 100644 --- a/board/actux3/u-boot.lds +++ b/board/actux3/u-boot.lds @@ -87,10 +87,13 @@ SECTIONS  		KEEP(*(.__bss_end));  	} -	/DISCARD/ : { *(.dynsym) } -	/DISCARD/ : { *(.dynstr*) } -	/DISCARD/ : { *(.dynamic*) } -	/DISCARD/ : { *(.plt*) } -	/DISCARD/ : { *(.interp*) } -	/DISCARD/ : { *(.gnu*) } +	.dynsym _end : { *(.dynsym) } +	.dynbss : { *(.dynbss) } +	.dynstr : { *(.dynstr*) } +	.dynamic : { *(.dynamic*) } +	.hash : { *(.hash*) } +	.plt : { *(.plt*) } +	.interp : { *(.interp*) } +	.gnu : { *(.gnu*) } +	.ARM.exidx : { *(.ARM.exidx*) }  } diff --git a/board/afeb9260/afeb9260.c b/board/afeb9260/afeb9260.c index e1b1c10d5..ea9575d41 100644 --- a/board/afeb9260/afeb9260.c +++ b/board/afeb9260/afeb9260.c @@ -13,7 +13,6 @@  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #include <asm/io.h>  #include <asm/arch/hardware.h> @@ -67,8 +66,6 @@ static void afeb9260_macb_hw_init(void)  {  	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;  	struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; -	struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; -	unsigned long erstl;  	/* Enable EMAC clock */ @@ -94,20 +91,7 @@ static void afeb9260_macb_hw_init(void)  	       pin_to_mask(AT91_PIN_PA28),  	       &pioa->pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, -		&rstc->mr); - +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(pin_to_mask(AT91_PIN_PA14) | diff --git a/board/atmel/at91sam9260ek/at91sam9260ek.c b/board/atmel/at91sam9260ek/at91sam9260ek.c index 263de49c7..7f14af101 100644 --- a/board/atmel/at91sam9260ek/at91sam9260ek.c +++ b/board/atmel/at91sam9260ek/at91sam9260ek.c @@ -12,7 +12,6 @@  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #include <atmel_mci.h> @@ -73,8 +72,6 @@ static void at91sam9260ek_macb_hw_init(void)  {  	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;  	struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; -	struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; -	unsigned long erstl;  	/* Enable EMAC clock */  	writel(1 << ATMEL_ID_EMAC0, &pmc->pcer); @@ -98,21 +95,7 @@ static void at91sam9260ek_macb_hw_init(void)  		pin_to_mask(AT91_PIN_PA28),  		&pioa->pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, -		&rstc->mr); +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(pin_to_mask(AT91_PIN_PA14) | diff --git a/board/atmel/at91sam9263ek/at91sam9263ek.c b/board/atmel/at91sam9263ek/at91sam9263ek.c index 2e9246f31..d42a1730c 100644 --- a/board/atmel/at91sam9263ek/at91sam9263ek.c +++ b/board/atmel/at91sam9263ek/at91sam9263ek.c @@ -12,7 +12,6 @@  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/at91_matrix.h>  #include <asm/arch/at91_pio.h>  #include <asm/arch/clk.h> @@ -82,10 +81,9 @@ static void at91sam9263ek_nand_hw_init(void)  #ifdef CONFIG_MACB  static void at91sam9263ek_macb_hw_init(void)  { -	unsigned long 	erstl;  	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;  	at91_pio_t	*pio	= (at91_pio_t *) ATMEL_BASE_PIO; -	at91_rstc_t	*rstc	= (at91_rstc_t *) ATMEL_BASE_RSTC; +  	/* Enable clock */  	writel(1 << ATMEL_ID_EMAC, &pmc->pcer); @@ -97,23 +95,10 @@ static void at91sam9263ek_macb_hw_init(void)  	 *  	 * PHY has internal pull-down  	 */ -  	writel(1 << 25, &pio->pioc.pudr);  	writel((1 << 25) | (1 <<26), &pio->pioe.pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(0x0D) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, &rstc->mr); +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(1 << 25, &pio->pioc.puer); diff --git a/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c b/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c index 6a071f6b7..b7e2efd2f 100644 --- a/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c +++ b/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c @@ -12,7 +12,6 @@  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #include <asm/arch/clk.h>  #include <lcd.h> @@ -88,8 +87,6 @@ static void at91sam9m10g45ek_macb_hw_init(void)  {  	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;  	struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; -	struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; -	unsigned long erstl;  	/* Enable clock */  	writel(1 << ATMEL_ID_EMAC, &pmc->pcer); @@ -107,21 +104,7 @@ static void at91sam9m10g45ek_macb_hw_init(void)  	       pin_to_mask(AT91_PIN_PA13),  	       &pioa->pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, -		&rstc->mr); +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(pin_to_mask(AT91_PIN_PA15) | diff --git a/board/atmel/sama5d3xek/sama5d3xek.c b/board/atmel/sama5d3xek/sama5d3xek.c index 83fd63f54..eff94a48b 100644 --- a/board/atmel/sama5d3xek/sama5d3xek.c +++ b/board/atmel/sama5d3xek/sama5d3xek.c @@ -20,6 +20,9 @@  #include <micrel.h>  #include <net.h>  #include <netdev.h> +#include <spl.h> +#include <asm/arch/atmel_mpddrc.h> +#include <asm/arch/at91_wdt.h>  #ifdef CONFIG_USB_GADGET_ATMEL_USBA  #include <asm/arch/atmel_usba_udc.h> @@ -159,6 +162,12 @@ void lcd_show_board_info(void)  int board_early_init_f(void)  { +	at91_periph_clk_enable(ATMEL_ID_PIOA); +	at91_periph_clk_enable(ATMEL_ID_PIOB); +	at91_periph_clk_enable(ATMEL_ID_PIOC); +	at91_periph_clk_enable(ATMEL_ID_PIOD); +	at91_periph_clk_enable(ATMEL_ID_PIOE); +  	at91_seriald_hw_init();  	return 0; @@ -291,3 +300,85 @@ void spi_cs_deactivate(struct spi_slave *slave)  	}  }  #endif /* CONFIG_ATMEL_SPI */ + +/* SPL */ +#ifdef CONFIG_SPL_BUILD +void spl_board_init(void) +{ +#ifdef CONFIG_SYS_USE_MMC +	sama5d3xek_mci_hw_init(); +#endif +} + +static void ddr2_conf(struct atmel_mpddr *ddr2) +{ +	ddr2->md = (ATMEL_MPDDRC_MD_DBW_32_BITS | ATMEL_MPDDRC_MD_DDR2_SDRAM); + +	ddr2->cr = (ATMEL_MPDDRC_CR_NC_COL_10 | +		    ATMEL_MPDDRC_CR_NR_ROW_14 | +		    ATMEL_MPDDRC_CR_CAS_DDR_CAS3 | +		    ATMEL_MPDDRC_CR_ENRDM_ON | +		    ATMEL_MPDDRC_CR_NB_8BANKS | +		    ATMEL_MPDDRC_CR_NDQS_DISABLED | +		    ATMEL_MPDDRC_CR_DECOD_INTERLEAVED | +		    ATMEL_MPDDRC_CR_UNAL_SUPPORTED); +	/* +	 * As the DDR2-SDRAm device requires a refresh time is 7.8125us +	 * when DDR run at 133MHz, so it needs (7.8125us * 133MHz / 10^9) clocks +	 */ +	ddr2->rtr = 0x411; + +	ddr2->tpr0 = (6 << ATMEL_MPDDRC_TPR0_TRAS_OFFSET | +		      2 << ATMEL_MPDDRC_TPR0_TRCD_OFFSET | +		      2 << ATMEL_MPDDRC_TPR0_TWR_OFFSET | +		      8 << ATMEL_MPDDRC_TPR0_TRC_OFFSET | +		      2 << ATMEL_MPDDRC_TPR0_TRP_OFFSET | +		      2 << ATMEL_MPDDRC_TPR0_TRRD_OFFSET | +		      2 << ATMEL_MPDDRC_TPR0_TWTR_OFFSET | +		      2 << ATMEL_MPDDRC_TPR0_TMRD_OFFSET); + +	ddr2->tpr1 = (2 << ATMEL_MPDDRC_TPR1_TXP_OFFSET | +		      200 << ATMEL_MPDDRC_TPR1_TXSRD_OFFSET | +		      28 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET | +		      26 << ATMEL_MPDDRC_TPR1_TRFC_OFFSET); + +	ddr2->tpr2 = (7 << ATMEL_MPDDRC_TPR2_TFAW_OFFSET | +		      2 << ATMEL_MPDDRC_TPR2_TRTP_OFFSET | +		      2 << ATMEL_MPDDRC_TPR2_TRPA_OFFSET | +		      7 << ATMEL_MPDDRC_TPR2_TXARDS_OFFSET | +		      8 << ATMEL_MPDDRC_TPR2_TXARD_OFFSET); +} + +void mem_init(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; +	struct atmel_mpddr ddr2; + +	ddr2_conf(&ddr2); + +	/* enable MPDDR clock */ +	at91_periph_clk_enable(ATMEL_ID_MPDDRC); +	writel(0x4, &pmc->scer); + +	/* DDRAM2 Controller initialize */ +	ddr2_init(ATMEL_BASE_DDRCS, &ddr2); +} + +void at91_pmc_init(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; +	u32 tmp; + +	tmp = AT91_PMC_PLLAR_29 | +	      AT91_PMC_PLLXR_PLLCOUNT(0x3f) | +	      AT91_PMC_PLLXR_MUL(43) | +	      AT91_PMC_PLLXR_DIV(1); +	at91_plla_init(tmp); + +	writel(0x3 << 8, &pmc->pllicpr); + +	tmp = AT91_PMC_MCKR_MDIV_4 | +	      AT91_PMC_MCKR_CSS_PLLA; +	at91_mck_init(tmp); +} +#endif diff --git a/board/bluewater/snapper9260/snapper9260.c b/board/bluewater/snapper9260/snapper9260.c index 8a6919dbb..bfde1291a 100644 --- a/board/bluewater/snapper9260/snapper9260.c +++ b/board/bluewater/snapper9260/snapper9260.c @@ -14,7 +14,6 @@  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #include <net.h>  #include <netdev.h> @@ -31,8 +30,6 @@ static void macb_hw_init(void)  {  	struct at91_pmc *pmc   = (struct at91_pmc  *)ATMEL_BASE_PMC;  	struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; -	struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; -	unsigned long erstl;  	/* Enable clock */  	writel(1 << ATMEL_ID_EMAC0, &pmc->pcer); @@ -54,18 +51,7 @@ static void macb_hw_init(void)  	/* Enable ethernet power */  	pca953x_set_val(0x28, IO_EXP_ETH_POWER, 0); -	/* Need to reset PHY -> 500ms reset */ -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) | -	       AT91_RSTC_MR_URSTEN, &rstc->mr); -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, &rstc->mr); +	at91_phy_reset();  	/* Bring the ethernet out of reset */  	pca953x_set_val(0x28, IO_EXP_ETH_RESET, 1); diff --git a/board/calao/sbc35_a9g20/sbc35_a9g20.c b/board/calao/sbc35_a9g20/sbc35_a9g20.c index ecf261c1a..2074a93a1 100644 --- a/board/calao/sbc35_a9g20/sbc35_a9g20.c +++ b/board/calao/sbc35_a9g20/sbc35_a9g20.c @@ -15,7 +15,6 @@  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB) @@ -77,8 +76,6 @@ static void sbc35_a9g20_macb_hw_init(void)  {  	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;  	struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; -	struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; -	unsigned long erstl;  	/* Enable EMAC clock */  	writel(1 << ATMEL_ID_EMAC0, &pmc->pcer); @@ -102,21 +99,7 @@ static void sbc35_a9g20_macb_hw_init(void)  	       pin_to_mask(AT91_PIN_PA28),  	       &pioa->pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, -		&rstc->mr); +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(pin_to_mask(AT91_PIN_PA14) | diff --git a/board/calao/usb_a9263/Makefile b/board/calao/usb_a9263/Makefile new file mode 100644 index 000000000..8a22b3eac --- /dev/null +++ b/board/calao/usb_a9263/Makefile @@ -0,0 +1,14 @@ +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# Stelian Pop <stelian@popies.net> +# Lead Tech Design <www.leadtechdesign.com> +# +# (C) Copyright 2013 +# Mateusz Kulikowski <mateusz.kulikowski@gmail.com> +# +# SPDX-License-Identifier:	GPL-2.0+ + +obj-y	+= usb_a9263.o diff --git a/board/calao/usb_a9263/usb_a9263.c b/board/calao/usb_a9263/usb_a9263.c new file mode 100644 index 000000000..266e9507e --- /dev/null +++ b/board/calao/usb_a9263/usb_a9263.c @@ -0,0 +1,148 @@ +/* + * (C) Copyright 2007-2013 + * Stelian Pop <stelian.pop@leadtechdesign.com> + * Lead Tech Design <www.leadtechdesign.com> + * Thomas Petazzoni, Free Electrons, <thomas.petazzoni@free-electrons.com> + * Mateusz Kulikowski <mateusz.kulikowski@gmail.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <asm/arch/at91sam9_smc.h> +#include <asm/arch/at91_common.h> +#include <asm/arch/at91_matrix.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/gpio.h> +#include <asm-generic/gpio.h> +#include <asm/io.h> +#include <net.h> +#include <netdev.h> +#include <dataflash.h> + +DECLARE_GLOBAL_DATA_PTR; + +#ifdef CONFIG_HAS_DATAFLASH +AT91S_DATAFLASH_INFO dataflash_info[CONFIG_SYS_MAX_DATAFLASH_BANKS]; + +struct dataflash_addr cs[CONFIG_SYS_MAX_DATAFLASH_BANKS] = { +	{CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0, 0},	/* Logical adress, CS */ +}; + +/*define the area offsets*/ +dataflash_protect_t area_list[NB_DATAFLASH_AREA] = { +	{0x00000000, 0x00001FFF, FLAG_PROTECT_SET, 0, "Bootstrap"}, +	{0x00002000, 0x00003FFF, FLAG_PROTECT_CLEAR, 0, "Environment"}, +	{0x00004000, 0xFFFFFFFF, FLAG_PROTECT_CLEAR, 0, "U-Boot"}, +}; +#endif + +#ifdef CONFIG_CMD_NAND +static void usb_a9263_nand_hw_init(void) +{ +	unsigned long csa; +	at91_smc_t *smc = (at91_smc_t *)ATMEL_BASE_SMC0; +	at91_matrix_t *matrix = (at91_matrix_t *)ATMEL_BASE_MATRIX; +	at91_pmc_t *pmc = (at91_pmc_t *)ATMEL_BASE_PMC; + +	/* Enable CS3 */ +	csa = readl(&matrix->csa[0]) | AT91_MATRIX_CSA_EBI_CS3A; +	writel(csa, &matrix->csa[0]); + +	/* Configure SMC CS3 for NAND/SmartMedia */ +	writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) | +	       AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0), +	       &smc->cs[3].setup); + +	writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(3) | +	       AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(3), +	       &smc->cs[3].pulse); + +	writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5), +	       &smc->cs[3].cycle); + +	writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | +	       AT91_SMC_MODE_EXNW_DISABLE | +	       AT91_SMC_MODE_DBW_8 | +	       AT91_SMC_MODE_TDF_CYCLE(2), &smc->cs[3].mode); + +	writel(1 << ATMEL_ID_PIOA | 1 << ATMEL_ID_PIOCDE, &pmc->pcer); + +	/* Configure RDY/BSY */ +	gpio_request(CONFIG_SYS_NAND_READY_PIN, "NAND ready/busy"); +	gpio_direction_input(CONFIG_SYS_NAND_READY_PIN); + +	/* Enable NandFlash */ +	gpio_request(CONFIG_SYS_NAND_ENABLE_PIN, "NAND enable"); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +} +#endif + +#ifdef CONFIG_MACB +static void usb_a9263_macb_hw_init(void) +{ +	at91_pmc_t *pmc = (at91_pmc_t *)ATMEL_BASE_PMC; + +	/* Enable clock */ +	writel(1 << ATMEL_ID_EMAC, &pmc->pcer); + +	/* +	 * Disable pull-up on: +	 *  RXDV (PC25) => PHY normal mode (not Test mode) +	 *  ERX0 (PE25) => PHY ADDR0 +	 *  ERX1 (PE26) => PHY ADDR1 => PHYADDR = 0x0 +	 * +	 * PHY has internal weak pull-up/pull-down +	 */ +	gpio_request(GPIO_PIN_PC(25), "PHY mode"); +	gpio_direction_input(GPIO_PIN_PC(25)); + +	gpio_request(GPIO_PIN_PE(25), "PHY ADDR0"); +	gpio_direction_input(GPIO_PIN_PE(25)); + +	gpio_request(GPIO_PIN_PE(26), "PHY ADDR1"); +	gpio_direction_input(GPIO_PIN_PE(26)); + +	at91_phy_reset(); + +	/* It will set proper pinmux for ports PC25, PE25-26 */ +	at91_macb_hw_init(); +} +#endif + +int board_init(void) +{ +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + +#ifdef CONFIG_CMD_NAND +	usb_a9263_nand_hw_init(); +#endif +#ifdef CONFIG_HAS_DATAFLASH +	at91_spi0_hw_init(1 << 0); +#endif +#ifdef CONFIG_MACB +	usb_a9263_macb_hw_init(); +#endif +#ifdef CONFIG_USB_OHCI_NEW +	at91_uhp_hw_init(); +#endif +	return 0; +} + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, +				    CONFIG_SYS_SDRAM_SIZE); +	return 0; +} + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; + +#ifdef CONFIG_MACB +	rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC, 0x0001); +#endif +	return rc; +} diff --git a/board/compulab/cm_t335/Makefile b/board/compulab/cm_t335/Makefile new file mode 100644 index 000000000..0e6e96e03 --- /dev/null +++ b/board/compulab/cm_t335/Makefile @@ -0,0 +1,10 @@ +# +# Copyright (C) 2013 Compulab Ltd - http://compulab.co.il/ +# +# Author: Ilya Ledvich <ilya@compulab.co.il> +# +# SPDX-License-Identifier:	GPL-2.0+ +# + +obj-y	+= $(BOARD).o +obj-$(CONFIG_SPL_BUILD) += mux.o spl.o diff --git a/board/compulab/cm_t335/cm_t335.c b/board/compulab/cm_t335/cm_t335.c new file mode 100644 index 000000000..01019e8eb --- /dev/null +++ b/board/compulab/cm_t335/cm_t335.c @@ -0,0 +1,162 @@ +/* + * Board functions for Compulab CM-T335 board + * + * Copyright (C) 2013, Compulab Ltd - http://compulab.co.il/ + * + * Author: Ilya Ledvich <ilya@compulab.co.il> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <errno.h> +#include <miiphy.h> +#include <cpsw.h> + +#include <asm/arch/sys_proto.h> +#include <asm/arch/hardware_am33xx.h> +#include <asm/io.h> +#include <asm/gpio.h> + +#include "../common/eeprom.h" + +DECLARE_GLOBAL_DATA_PTR; + +/* + * Basic board specific setup.  Pinmux has been handled already. + */ +int board_init(void) +{ +	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + +	gpmc_init(); + +#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT) +	status_led_set(STATUS_LED_BOOT, STATUS_LED_OFF); +#endif +	return 0; +} + +#if defined (CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD) +static void cpsw_control(int enabled) +{ +	/* VTP can be added here */ +	return; +} + +static struct cpsw_slave_data cpsw_slave = { +	.slave_reg_ofs	= 0x208, +	.sliver_reg_ofs	= 0xd80, +	.phy_id		= 0, +	.phy_if		= PHY_INTERFACE_MODE_RGMII, +}; + +static struct cpsw_platform_data cpsw_data = { +	.mdio_base		= CPSW_MDIO_BASE, +	.cpsw_base		= CPSW_BASE, +	.mdio_div		= 0xff, +	.channels		= 8, +	.cpdma_reg_ofs		= 0x800, +	.slaves			= 1, +	.slave_data		= &cpsw_slave, +	.ale_reg_ofs		= 0xd00, +	.ale_entries		= 1024, +	.host_port_reg_ofs	= 0x108, +	.hw_stats_reg_ofs	= 0x900, +	.bd_ram_ofs		= 0x2000, +	.mac_control		= (1 << 5), +	.control		= cpsw_control, +	.host_port_num		= 0, +	.version		= CPSW_CTRL_VERSION_2, +}; + +/* PHY reset GPIO */ +#define GPIO_PHY_RST		GPIO_PIN(3, 7) + +static void board_phy_init(void) +{ +	gpio_request(GPIO_PHY_RST, "phy_rst"); +	gpio_direction_output(GPIO_PHY_RST, 0); +	mdelay(2); +	gpio_set_value(GPIO_PHY_RST, 1); +	mdelay(2); +} + +static void get_efuse_mac_addr(uchar *enetaddr) +{ +	uint32_t mac_hi, mac_lo; +	struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE; + +	mac_lo = readl(&cdev->macid0l); +	mac_hi = readl(&cdev->macid0h); +	enetaddr[0] = mac_hi & 0xFF; +	enetaddr[1] = (mac_hi & 0xFF00) >> 8; +	enetaddr[2] = (mac_hi & 0xFF0000) >> 16; +	enetaddr[3] = (mac_hi & 0xFF000000) >> 24; +	enetaddr[4] = mac_lo & 0xFF; +	enetaddr[5] = (mac_lo & 0xFF00) >> 8; +} + +/* + * Routine: handle_mac_address + * Description: prepare MAC address for on-board Ethernet. + */ +static int handle_mac_address(void) +{ +	uchar enetaddr[6]; +	int rv; + +	rv = eth_getenv_enetaddr("ethaddr", enetaddr); +	if (rv) +		return 0; + +	rv = cl_eeprom_read_mac_addr(enetaddr); +	if (rv) +		get_efuse_mac_addr(enetaddr); + +	if (!is_valid_ether_addr(enetaddr)) +		return -1; + +	return eth_setenv_enetaddr("ethaddr", enetaddr); +} + +#define AR8051_PHY_DEBUG_ADDR_REG	0x1d +#define AR8051_PHY_DEBUG_DATA_REG	0x1e +#define AR8051_DEBUG_RGMII_CLK_DLY_REG	0x5 +#define AR8051_RGMII_TX_CLK_DLY		0x100 + +int board_eth_init(bd_t *bis) +{ +	int rv, n = 0; +	const char *devname; +	struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE; + +	rv = handle_mac_address(); +	if (rv) +		printf("No MAC address found!\n"); + +	writel(RGMII_MODE_ENABLE | RGMII_INT_DELAY, &cdev->miisel); + +	board_phy_init(); + +	rv = cpsw_register(&cpsw_data); +	if (rv < 0) +		printf("Error %d registering CPSW switch\n", rv); +	else +		n += rv; + +	/* +	 * CPSW RGMII Internal Delay Mode is not supported in all PVT +	 * operating points.  So we must set the TX clock delay feature +	 * in the AR8051 PHY.  Since we only support a single ethernet +	 * device, we only do this for the first instance. +	 */ +	devname = miiphy_get_current_dev(); + +	miiphy_write(devname, 0x0, AR8051_PHY_DEBUG_ADDR_REG, +		     AR8051_DEBUG_RGMII_CLK_DLY_REG); +	miiphy_write(devname, 0x0, AR8051_PHY_DEBUG_DATA_REG, +		     AR8051_RGMII_TX_CLK_DLY); +	return n; +} +#endif /* CONFIG_DRIVER_TI_CPSW && !CONFIG_SPL_BUILD */ diff --git a/board/compulab/cm_t335/mux.c b/board/compulab/cm_t335/mux.c new file mode 100644 index 000000000..7d2beb01e --- /dev/null +++ b/board/compulab/cm_t335/mux.c @@ -0,0 +1,117 @@ +/* + * Pinmux configuration for Compulab CM-T335 board + * + * Copyright (C) 2013, Compulab Ltd - http://compulab.co.il/ + * + * Author: Ilya Ledvich <ilya@compulab.co.il> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <asm/arch/sys_proto.h> +#include <asm/arch/hardware.h> +#include <asm/arch/mux.h> +#include <asm/io.h> + +static struct module_pin_mux uart0_pin_mux[] = { +	{OFFSET(uart0_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)}, +	{OFFSET(uart0_txd), (MODE(0) | PULLUDEN)}, +	{-1}, +}; + +static struct module_pin_mux uart1_pin_mux[] = { +	{OFFSET(uart1_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)}, +	{OFFSET(uart1_txd), (MODE(0) | PULLUDEN)}, +	{OFFSET(uart1_ctsn), (MODE(0) | PULLUP_EN | RXACTIVE)}, +	{OFFSET(uart1_rtsn), (MODE(0) | PULLUDEN)}, +	{-1}, +}; + +static struct module_pin_mux mmc0_pin_mux[] = { +	{OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, +	{OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, +	{OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, +	{OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, +	{OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, +	{OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, +	{-1}, +}; + +static struct module_pin_mux i2c0_pin_mux[] = { +	{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDDIS | SLEWCTRL)}, +	{OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDDIS | SLEWCTRL)}, +	{-1}, +}; + +static struct module_pin_mux i2c1_pin_mux[] = { +	/* I2C_DATA */ +	{OFFSET(uart0_ctsn), (MODE(3) | RXACTIVE | PULLUDDIS | SLEWCTRL)}, +	/* I2C_SCLK */ +	{OFFSET(uart0_rtsn), (MODE(3) | RXACTIVE | PULLUDDIS | SLEWCTRL)}, +	{-1}, +}; + +static struct module_pin_mux rgmii1_pin_mux[] = { +	{OFFSET(mii1_txen), MODE(2)},			/* RGMII1_TCTL */ +	{OFFSET(mii1_rxdv), MODE(2) | RXACTIVE},	/* RGMII1_RCTL */ +	{OFFSET(mii1_txd3), MODE(2)},			/* RGMII1_TD3 */ +	{OFFSET(mii1_txd2), MODE(2)},			/* RGMII1_TD2 */ +	{OFFSET(mii1_txd1), MODE(2)},			/* RGMII1_TD1 */ +	{OFFSET(mii1_txd0), MODE(2)},			/* RGMII1_TD0 */ +	{OFFSET(mii1_txclk), MODE(2)},			/* RGMII1_TCLK */ +	{OFFSET(mii1_rxclk), MODE(2) | RXACTIVE},	/* RGMII1_RCLK */ +	{OFFSET(mii1_rxd3), MODE(2) | RXACTIVE},	/* RGMII1_RD3 */ +	{OFFSET(mii1_rxd2), MODE(2) | RXACTIVE},	/* RGMII1_RD2 */ +	{OFFSET(mii1_rxd1), MODE(2) | RXACTIVE},	/* RGMII1_RD1 */ +	{OFFSET(mii1_rxd0), MODE(2) | RXACTIVE},	/* RGMII1_RD0 */ +	{OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN},/* MDIO_DATA */ +	{OFFSET(mdio_clk), MODE(0) | PULLUP_EN},	/* MDIO_CLK */ +	{-1}, +}; + +static struct module_pin_mux nand_pin_mux[] = { +	{OFFSET(gpmc_ad0), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD0 */ +	{OFFSET(gpmc_ad1), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD1 */ +	{OFFSET(gpmc_ad2), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD2 */ +	{OFFSET(gpmc_ad3), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD3 */ +	{OFFSET(gpmc_ad4), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD4 */ +	{OFFSET(gpmc_ad5), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD5 */ +	{OFFSET(gpmc_ad6), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD6 */ +	{OFFSET(gpmc_ad7), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD7 */ +	{OFFSET(gpmc_wait0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* NAND WAIT */ +	{OFFSET(gpmc_wpn), (MODE(7) | PULLUP_EN | RXACTIVE)},	/* NAND_WPN */ +	{OFFSET(gpmc_csn0), (MODE(0) | PULLUDEN)},		/* NAND_CS0 */ +	{OFFSET(gpmc_advn_ale), (MODE(0) | PULLUDEN)},	/* NAND_ADV_ALE */ +	{OFFSET(gpmc_oen_ren), (MODE(0) | PULLUDEN)},	/* NAND_OE */ +	{OFFSET(gpmc_wen), (MODE(0) | PULLUDEN)},	/* NAND_WEN */ +	{OFFSET(gpmc_be0n_cle), (MODE(0) | PULLUDEN)},	/* NAND_BE_CLE */ +	{-1}, +}; + +static struct module_pin_mux eth_phy_rst_pin_mux[] = { +	{OFFSET(emu0), (MODE(7) | PULLUDDIS)},	/* GPIO3_7 */ +	{-1}, +}; + +static struct module_pin_mux status_led_pin_mux[] = { +	{OFFSET(gpmc_csn3), (MODE(7) | PULLUDEN)},	/* GPIO2_0 */ +	{-1}, +}; + +void set_uart_mux_conf(void) +{ +	configure_module_pin_mux(uart0_pin_mux); +	configure_module_pin_mux(uart1_pin_mux); +} + +void set_mux_conf_regs(void) +{ +	configure_module_pin_mux(i2c0_pin_mux); +	configure_module_pin_mux(i2c1_pin_mux); +	configure_module_pin_mux(rgmii1_pin_mux); +	configure_module_pin_mux(eth_phy_rst_pin_mux); +	configure_module_pin_mux(mmc0_pin_mux); +	configure_module_pin_mux(nand_pin_mux); +	configure_module_pin_mux(status_led_pin_mux); +} diff --git a/board/compulab/cm_t335/spl.c b/board/compulab/cm_t335/spl.c new file mode 100644 index 000000000..99f3a869b --- /dev/null +++ b/board/compulab/cm_t335/spl.c @@ -0,0 +1,106 @@ +/* + * SPL specific code for Compulab CM-T335 board + * + * Board functions for Compulab CM-T335 board + * + * Copyright (C) 2013, Compulab Ltd - http://compulab.co.il/ + * + * Author: Ilya Ledvich <ilya@compulab.co.il> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <errno.h> + +#include <asm/arch/ddr_defs.h> +#include <asm/arch/clock.h> +#include <asm/arch/clocks_am33xx.h> +#include <asm/arch/sys_proto.h> +#include <asm/arch/hardware_am33xx.h> +#include <asm/sizes.h> + +static const struct ddr_data ddr3_data = { +	.datardsratio0		= MT41J128MJT125_RD_DQS, +	.datawdsratio0		= MT41J128MJT125_WR_DQS, +	.datafwsratio0		= MT41J128MJT125_PHY_FIFO_WE, +	.datawrsratio0		= MT41J128MJT125_PHY_WR_DATA, +}; + +static const struct cmd_control ddr3_cmd_ctrl_data = { +	.cmd0csratio		= MT41J128MJT125_RATIO, +	.cmd0iclkout		= MT41J128MJT125_INVERT_CLKOUT, + +	.cmd1csratio		= MT41J128MJT125_RATIO, +	.cmd1iclkout		= MT41J128MJT125_INVERT_CLKOUT, + +	.cmd2csratio		= MT41J128MJT125_RATIO, +	.cmd2iclkout		= MT41J128MJT125_INVERT_CLKOUT, +}; + +static struct emif_regs ddr3_emif_reg_data = { +	.sdram_config		= MT41J128MJT125_EMIF_SDCFG, +	.ref_ctrl		= MT41J128MJT125_EMIF_SDREF, +	.sdram_tim1		= MT41J128MJT125_EMIF_TIM1, +	.sdram_tim2		= MT41J128MJT125_EMIF_TIM2, +	.sdram_tim3		= MT41J128MJT125_EMIF_TIM3, +	.zq_config		= MT41J128MJT125_ZQ_CFG, +	.emif_ddr_phy_ctlr_1	= MT41J128MJT125_EMIF_READ_LATENCY | +					PHY_EN_DYN_PWRDN, +}; + +const struct dpll_params dpll_ddr = { +/*       M           N            M2  M3  M4  M5  M6 */ +	303, (V_OSCK/1000000) - 1, 1, -1, -1, -1, -1}; + +void am33xx_spl_board_init(void) +{ +	struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE; + +	/* Get the frequency */ +	dpll_mpu_opp100.m = am335x_get_efuse_mpu_max_freq(cdev); + +	/* Set CORE Frequencies to OPP100 */ +	do_setup_dpll(&dpll_core_regs, &dpll_core_opp100); + +	/* Set MPU Frequency to what we detected now that voltages are set */ +	do_setup_dpll(&dpll_mpu_regs, &dpll_mpu_opp100); +} + +const struct dpll_params *get_dpll_ddr_params(void) +{ +	return &dpll_ddr; +} + +static void probe_sdram_size(long size) +{ +	switch (size) { +	case SZ_512M: +		ddr3_emif_reg_data.sdram_config = MT41J256MJT125_EMIF_SDCFG; +		break; +	case SZ_256M: +		ddr3_emif_reg_data.sdram_config = MT41J128MJT125_EMIF_SDCFG; +		break; +	case SZ_128M: +		ddr3_emif_reg_data.sdram_config = MT41J64MJT125_EMIF_SDCFG; +		break; +	default: +		puts("Failed configuring DRAM, resetting...\n\n"); +		reset_cpu(0); +	} +	debug("%s: setting DRAM size to %ldM\n", __func__, size >> 20); +	config_ddr(303, MT41J128MJT125_IOCTRL_VALUE, &ddr3_data, +		   &ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0); +} + +void sdram_init(void) +{ +	long size = SZ_1G; + +	do { +		size = size / 2; +		probe_sdram_size(size); +	} while (get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, size) < size); + +	return; +} diff --git a/board/compulab/cm_t335/u-boot.lds b/board/compulab/cm_t335/u-boot.lds new file mode 100644 index 000000000..1b609a249 --- /dev/null +++ b/board/compulab/cm_t335/u-boot.lds @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2004-2008 Texas Instruments + * + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ +	. = 0x00000000; + +	. = ALIGN(4); +	.text : +	{ +		*(.__image_copy_start) +		CPUDIR/start.o (.text*) +		board/compulab/cm_t335/built-in.o (.text*) +		*(.text*) +	} + +	. = ALIGN(4); +	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } + +	. = ALIGN(4); +	.data : { +		*(.data*) +	} + +	. = ALIGN(4); + +	. = .; + +	. = ALIGN(4); +	.u_boot_list : { +		KEEP(*(SORT(.u_boot_list*))); +	} + +	. = ALIGN(4); + +	.image_copy_end : +	{ +		*(.__image_copy_end) +	} + +	.rel_dyn_start : +	{ +		*(.__rel_dyn_start) +	} + +	.rel.dyn : { +		*(.rel*) +	} + +	.rel_dyn_end : +	{ +		*(.__rel_dyn_end) +	} + +	_end = .; + +	/* +	 * Deprecated: this MMU section is used by pxa at present but +	 * should not be used by new boards/CPUs. +	 */ +	. = ALIGN(4096); +	.mmutable : { +		*(.mmutable) +	} + +/* + * Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c + * __bss_base and __bss_limit are for linker only (overlay ordering) + */ + +	.bss_start __rel_dyn_start (OVERLAY) : { +		KEEP(*(.__bss_start)); +		__bss_base = .; +	} + +	.bss __bss_base (OVERLAY) : { +		*(.bss*) +		 . = ALIGN(4); +		 __bss_limit = .; +	} + +	.bss_end __bss_limit (OVERLAY) : { +		KEEP(*(.__bss_end)); +	} + +	/DISCARD/ : { *(.dynsym) } +	/DISCARD/ : { *(.dynstr*) } +	/DISCARD/ : { *(.dynamic*) } +	/DISCARD/ : { *(.plt*) } +	/DISCARD/ : { *(.interp*) } +	/DISCARD/ : { *(.gnu*) } +} diff --git a/board/compulab/cm_t35/Makefile b/board/compulab/cm_t35/Makefile index 6e2e1cbb6..ede250b52 100644 --- a/board/compulab/cm_t35/Makefile +++ b/board/compulab/cm_t35/Makefile @@ -7,4 +7,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-y	+= cm_t35.o leds.o +obj-y	+= cm_t35.o diff --git a/board/compulab/cm_t35/leds.c b/board/compulab/cm_t35/leds.c deleted file mode 100644 index 7e2803e3b..000000000 --- a/board/compulab/cm_t35/leds.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * (C) Copyright 2011 - 2013 CompuLab, Ltd. <www.compulab.co.il> - * - * Author: Igor Grinberg <grinberg@compulab.co.il> - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#include <common.h> -#include <status_led.h> -#include <asm/gpio.h> - -static unsigned int leds[] = { GREEN_LED_GPIO }; - -void __led_init(led_id_t mask, int state) -{ -	if (gpio_request(leds[mask], "") != 0) { -		printf("%s: failed requesting GPIO%u\n", __func__, leds[mask]); -		return; -	} - -	gpio_direction_output(leds[mask], 0); -} - -void __led_set(led_id_t mask, int state) -{ -	gpio_set_value(leds[mask], state == STATUS_LED_ON); -} - -void __led_toggle(led_id_t mask) -{ -	gpio_set_value(leds[mask], !gpio_get_value(leds[mask])); -} diff --git a/board/dvlhost/u-boot.lds b/board/dvlhost/u-boot.lds index 0035a0bf0..ebcaf447b 100644 --- a/board/dvlhost/u-boot.lds +++ b/board/dvlhost/u-boot.lds @@ -87,10 +87,13 @@ SECTIONS  		KEEP(*(.__bss_end));  	} -	/DISCARD/ : { *(.dynsym) } -	/DISCARD/ : { *(.dynstr*) } -	/DISCARD/ : { *(.dynamic*) } -	/DISCARD/ : { *(.plt*) } -	/DISCARD/ : { *(.interp*) } -	/DISCARD/ : { *(.gnu*) } +	.dynsym _end : { *(.dynsym) } +	.dynbss : { *(.dynbss) } +	.dynstr : { *(.dynstr*) } +	.dynamic : { *(.dynamic*) } +	.hash : { *(.hash*) } +	.plt : { *(.plt*) } +	.interp : { *(.interp*) } +	.gnu : { *(.gnu*) } +	.ARM.exidx : { *(.ARM.exidx*) }  } diff --git a/board/egnite/ethernut5/ethernut5.c b/board/egnite/ethernut5/ethernut5.c index 1f5eea56a..b45213c24 100644 --- a/board/egnite/ethernut5/ethernut5.c +++ b/board/egnite/ethernut5/ethernut5.c @@ -71,6 +71,7 @@  #include <asm/arch/at91_spi.h>  #include <asm/arch/gpio.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include "ethernut5_pwrman.h" @@ -141,7 +142,7 @@ static void ethernut5_nand_hw_init(void)  	/* Ready pin is optional. */  	at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1);  #endif -	at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);  }  #endif diff --git a/board/esd/meesc/meesc.c b/board/esd/meesc/meesc.c index 9bf673908..c5994e0a4 100644 --- a/board/esd/meesc/meesc.c +++ b/board/esd/meesc/meesc.c @@ -12,6 +12,7 @@  #include <common.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> @@ -74,10 +75,10 @@ static void meesc_nand_hw_init(void)  		&smc->cs[3].mode);  	/* Configure RDY/BSY */ -	at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); +	gpio_direction_input(CONFIG_SYS_NAND_READY_PIN);  	/* Enable NandFlash */ -	at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);  }  #endif /* CONFIG_CMD_NAND */ diff --git a/board/esd/otc570/otc570.c b/board/esd/otc570/otc570.c index acc1b31b7..4751d0a9e 100644 --- a/board/esd/otc570/otc570.c +++ b/board/esd/otc570/otc570.c @@ -12,6 +12,7 @@  #include <common.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> @@ -82,10 +83,10 @@ static void otc570_nand_hw_init(void)  		&smc->cs[3].mode);  	/* Configure RDY/BSY */ -	at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); +	gpio_direction_input(CONFIG_SYS_NAND_READY_PIN);  	/* Enable NandFlash */ -	at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);  }  #endif /* CONFIG_CMD_NAND */ diff --git a/board/eukrea/cpu9260/cpu9260.c b/board/eukrea/cpu9260/cpu9260.c index 5e1524e07..01ecccb8c 100644 --- a/board/eukrea/cpu9260/cpu9260.c +++ b/board/eukrea/cpu9260/cpu9260.c @@ -12,12 +12,12 @@  #include <common.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include <asm/arch/at91sam9260.h>  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_matrix.h>  #include <asm/arch/at91_pmc.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/at91_pio.h>  #include <asm/arch/clk.h>  #include <asm/arch/hardware.h> @@ -79,39 +79,24 @@ static void cpu9260_nand_hw_init(void)  	writel(1 << ATMEL_ID_PIOC, &pmc->pcer);  	/* Configure RDY/BSY */ -	at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); +	gpio_direction_input(CONFIG_SYS_NAND_READY_PIN);  	/* Enable NandFlash */ -	at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);  }  #endif  #ifdef CONFIG_MACB  static void cpu9260_macb_hw_init(void)  { -	unsigned long rstcmr;  	at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC; -	at91_rstc_t *rstc = (at91_rstc_t *) ATMEL_BASE_RSTC;  	/* Enable clock */  	writel(1 << ATMEL_ID_EMAC0, &pmc->pcer);  	at91_set_pio_pullup(AT91_PIO_PORTA, 17, 1); -	rstcmr = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(0xD) | -				AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | rstcmr | AT91_RSTC_MR_URSTEN, &rstc->mr); +	at91_phy_reset();  	at91_macb_hw_init();  } diff --git a/board/freescale/mx31ads/u-boot.lds b/board/freescale/mx31ads/u-boot.lds index 8d5cc9101..1cca176c3 100644 --- a/board/freescale/mx31ads/u-boot.lds +++ b/board/freescale/mx31ads/u-boot.lds @@ -90,13 +90,13 @@ SECTIONS  		KEEP(*(.__bss_end));  	} -	/DISCARD/ : { *(.bss*) } -	/DISCARD/ : { *(.dynsym) } -	/DISCARD/ : { *(.dynstr*) } -	/DISCARD/ : { *(.dynsym*) } -	/DISCARD/ : { *(.dynamic*) } -	/DISCARD/ : { *(.hash*) } -	/DISCARD/ : { *(.plt*) } -	/DISCARD/ : { *(.interp*) } -	/DISCARD/ : { *(.gnu*) } +	.dynsym _end : { *(.dynsym) } +	.dynbss : { *(.dynbss) } +	.dynstr : { *(.dynstr*) } +	.dynamic : { *(.dynamic*) } +	.hash : { *(.hash*) } +	.plt : { *(.plt*) } +	.interp : { *(.interp*) } +	.gnu : { *(.gnu*) } +	.ARM.exidx : { *(.ARM.exidx*) }  } diff --git a/board/isee/igep0033/board.c b/board/isee/igep0033/board.c index 0b8356dc4..6a8ca2b4c 100644 --- a/board/isee/igep0033/board.c +++ b/board/isee/igep0033/board.c @@ -35,20 +35,16 @@ static const struct ddr_data ddr3_data = {  	.datawdsratio0 = K4B2G1646EBIH9_WR_DQS,  	.datafwsratio0 = K4B2G1646EBIH9_PHY_FIFO_WE,  	.datawrsratio0 = K4B2G1646EBIH9_PHY_WR_DATA, -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  static const struct cmd_control ddr3_cmd_ctrl_data = {  	.cmd0csratio = K4B2G1646EBIH9_RATIO, -	.cmd0dldiff = K4B2G1646EBIH9_DLL_LOCK_DIFF,  	.cmd0iclkout = K4B2G1646EBIH9_INVERT_CLKOUT,  	.cmd1csratio = K4B2G1646EBIH9_RATIO, -	.cmd1dldiff = K4B2G1646EBIH9_DLL_LOCK_DIFF,  	.cmd1iclkout = K4B2G1646EBIH9_INVERT_CLKOUT,  	.cmd2csratio = K4B2G1646EBIH9_RATIO, -	.cmd2dldiff = K4B2G1646EBIH9_DLL_LOCK_DIFF,  	.cmd2iclkout = K4B2G1646EBIH9_INVERT_CLKOUT,  }; diff --git a/board/phytec/pcm051/board.c b/board/phytec/pcm051/board.c index 034886ad5..68463e78d 100644 --- a/board/phytec/pcm051/board.c +++ b/board/phytec/pcm051/board.c @@ -49,25 +49,22 @@ const struct dpll_params *get_dpll_ddr_params(void)  	return &dpll_ddr;  } +#ifdef CONFIG_REV1  static const struct ddr_data ddr3_data = {  	.datardsratio0 = MT41J256M8HX15E_RD_DQS,  	.datawdsratio0 = MT41J256M8HX15E_WR_DQS,  	.datafwsratio0 = MT41J256M8HX15E_PHY_FIFO_WE,  	.datawrsratio0 = MT41J256M8HX15E_PHY_WR_DATA, -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  static const struct cmd_control ddr3_cmd_ctrl_data = {  	.cmd0csratio = MT41J256M8HX15E_RATIO, -	.cmd0dldiff = MT41J256M8HX15E_DLL_LOCK_DIFF,  	.cmd0iclkout = MT41J256M8HX15E_INVERT_CLKOUT,  	.cmd1csratio = MT41J256M8HX15E_RATIO, -	.cmd1dldiff = MT41J256M8HX15E_DLL_LOCK_DIFF,  	.cmd1iclkout = MT41J256M8HX15E_INVERT_CLKOUT,  	.cmd2csratio = MT41J256M8HX15E_RATIO, -	.cmd2dldiff = MT41J256M8HX15E_DLL_LOCK_DIFF,  	.cmd2iclkout = MT41J256M8HX15E_INVERT_CLKOUT,  }; @@ -82,6 +79,48 @@ static struct emif_regs ddr3_emif_reg_data = {  				PHY_EN_DYN_PWRDN,  }; +void sdram_init(void) +{ +	config_ddr(DDR_CLK_MHZ, MT41J256M8HX15E_IOCTRL_VALUE, &ddr3_data, +		   &ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0); +} +#else +static const struct ddr_data ddr3_data = { +	.datardsratio0 = MT41K256M16HA125E_RD_DQS, +	.datawdsratio0 = MT41K256M16HA125E_WR_DQS, +	.datafwsratio0 = MT41K256M16HA125E_PHY_FIFO_WE, +	.datawrsratio0 = MT41K256M16HA125E_PHY_WR_DATA, +}; + +static const struct cmd_control ddr3_cmd_ctrl_data = { +	.cmd0csratio = MT41K256M16HA125E_RATIO, +	.cmd0iclkout = MT41K256M16HA125E_INVERT_CLKOUT, + +	.cmd1csratio = MT41K256M16HA125E_RATIO, +	.cmd1iclkout = MT41K256M16HA125E_INVERT_CLKOUT, + +	.cmd2csratio = MT41K256M16HA125E_RATIO, +	.cmd2iclkout = MT41K256M16HA125E_INVERT_CLKOUT, +}; + +static struct emif_regs ddr3_emif_reg_data = { +	.sdram_config = MT41K256M16HA125E_EMIF_SDCFG, +	.ref_ctrl = MT41K256M16HA125E_EMIF_SDREF, +	.sdram_tim1 = MT41K256M16HA125E_EMIF_TIM1, +	.sdram_tim2 = MT41K256M16HA125E_EMIF_TIM2, +	.sdram_tim3 = MT41K256M16HA125E_EMIF_TIM3, +	.zq_config = MT41K256M16HA125E_ZQ_CFG, +	.emif_ddr_phy_ctlr_1 = MT41K256M16HA125E_EMIF_READ_LATENCY | +				PHY_EN_DYN_PWRDN, +}; + +void sdram_init(void) +{ +	config_ddr(DDR_CLK_MHZ, MT41K256M16HA125E_IOCTRL_VALUE, &ddr3_data, +		   &ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0); +} +#endif +  void set_uart_mux_conf(void)  {  	enable_uart0_pin_mux(); @@ -95,12 +134,6 @@ void set_mux_conf_regs(void)  	enable_board_pin_mux();  } - -void sdram_init(void) -{ -	config_ddr(DDR_CLK_MHZ, MT41J256M8HX15E_IOCTRL_VALUE, &ddr3_data, -			&ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0); -}  #endif  /* diff --git a/board/renesas/koelsch/Makefile b/board/renesas/koelsch/Makefile new file mode 100644 index 000000000..b4d0183b3 --- /dev/null +++ b/board/renesas/koelsch/Makefile @@ -0,0 +1,9 @@ +# +# board/renesas/koelsch/Makefile +# +# Copyright (C) 2013 Renesas Electronics Corporation +# +# SPDX-License-Identifier: GPL-2.0 +# + +obj-y	:= koelsch.o qos.o diff --git a/board/renesas/koelsch/koelsch.c b/board/renesas/koelsch/koelsch.c new file mode 100644 index 000000000..7153f652b --- /dev/null +++ b/board/renesas/koelsch/koelsch.c @@ -0,0 +1,283 @@ +/* + * board/renesas/koelsch/koelsch.c + * + * Copyright (C) 2013 Renesas Electronics Corporation + * + * SPDX-License-Identifier: GPL-2.0 + * + */ + +#include <common.h> +#include <malloc.h> +#include <asm/processor.h> +#include <asm/mach-types.h> +#include <asm/io.h> +#include <asm/errno.h> +#include <asm/arch/sys_proto.h> +#include <asm/gpio.h> +#include <asm/arch/rmobile.h> +#include <i2c.h> +#include "qos.h" + +DECLARE_GLOBAL_DATA_PTR; + +#define s_init_wait(cnt) \ +	({	\ +		u32 i = 0x10000 * cnt;	\ +		while (i > 0)	\ +			i--;	\ +	}) + + +#define dbpdrgd_check(bsc) \ +	({	\ +		while ((readl(&bsc->dbpdrgd) & 0x1) != 0x1)	\ +			;	\ +	}) + +#if defined(CONFIG_NORFLASH) +static void bsc_init(void) +{ +	struct r8a7791_lbsc *lbsc = (struct r8a7791_lbsc *)LBSC_BASE; +	struct r8a7791_dbsc3 *dbsc3_0 = (struct r8a7791_dbsc3 *)DBSC3_0_BASE; + +	/* LBSC */ +	writel(0x00000020, &lbsc->cs0ctrl); +	writel(0x00000020, &lbsc->cs1ctrl); +	writel(0x00002020, &lbsc->ecs0ctrl); +	writel(0x00002020, &lbsc->ecs1ctrl); + +	writel(0x077F077F, &lbsc->cswcr0); +	writel(0x077F077F, &lbsc->cswcr1); +	writel(0x077F077F, &lbsc->ecswcr0); +	writel(0x077F077F, &lbsc->ecswcr1); + +	/* DBSC3 */ +	s_init_wait(10); + +	writel(0x0000A55A, &dbsc3_0->dbpdlck); +	writel(0x00000001, &dbsc3_0->dbpdrga); +	writel(0x80000000, &dbsc3_0->dbpdrgd); +	writel(0x00000004, &dbsc3_0->dbpdrga); +	dbpdrgd_check(dbsc3_0); + +	writel(0x00000006, &dbsc3_0->dbpdrga); +	writel(0x0001C000, &dbsc3_0->dbpdrgd); + +	writel(0x00000023, &dbsc3_0->dbpdrga); +	writel(0x00FD2480, &dbsc3_0->dbpdrgd); + +	writel(0x00000010, &dbsc3_0->dbpdrga); +	writel(0xF004649B, &dbsc3_0->dbpdrgd); + +	writel(0x0000000F, &dbsc3_0->dbpdrga); +	writel(0x00181EE4, &dbsc3_0->dbpdrgd); + +	writel(0x0000000E, &dbsc3_0->dbpdrga); +	writel(0x33C03812, &dbsc3_0->dbpdrgd); + +	writel(0x00000003, &dbsc3_0->dbpdrga); +	writel(0x0300C481, &dbsc3_0->dbpdrgd); + +	writel(0x00000007, &dbsc3_0->dbkind); +	writel(0x10030A02, &dbsc3_0->dbconf0); +	writel(0x00000001, &dbsc3_0->dbphytype); +	writel(0x00000000, &dbsc3_0->dbbl); +	writel(0x0000000B, &dbsc3_0->dbtr0); +	writel(0x00000008, &dbsc3_0->dbtr1); +	writel(0x00000000, &dbsc3_0->dbtr2); +	writel(0x0000000B, &dbsc3_0->dbtr3); +	writel(0x000C000B, &dbsc3_0->dbtr4); +	writel(0x00000027, &dbsc3_0->dbtr5); +	writel(0x0000001C, &dbsc3_0->dbtr6); +	writel(0x00000005, &dbsc3_0->dbtr7); +	writel(0x00000018, &dbsc3_0->dbtr8); +	writel(0x00000008, &dbsc3_0->dbtr9); +	writel(0x0000000C, &dbsc3_0->dbtr10); +	writel(0x00000009, &dbsc3_0->dbtr11); +	writel(0x00000012, &dbsc3_0->dbtr12); +	writel(0x000000D0, &dbsc3_0->dbtr13); +	writel(0x00140005, &dbsc3_0->dbtr14); +	writel(0x00050004, &dbsc3_0->dbtr15); +	writel(0x70233005, &dbsc3_0->dbtr16); +	writel(0x000C0000, &dbsc3_0->dbtr17); +	writel(0x00000300, &dbsc3_0->dbtr18); +	writel(0x00000040, &dbsc3_0->dbtr19); +	writel(0x00000001, &dbsc3_0->dbrnk0); +	writel(0x00020001, &dbsc3_0->dbadj0); +	writel(0x20082008, &dbsc3_0->dbadj2); +	writel(0x00020002, &dbsc3_0->dbwt0cnf0); +	writel(0x0000000F, &dbsc3_0->dbwt0cnf4); + +	writel(0x00000015, &dbsc3_0->dbpdrga); +	writel(0x00000D70, &dbsc3_0->dbpdrgd); + +	writel(0x00000016, &dbsc3_0->dbpdrga); +	writel(0x00000006, &dbsc3_0->dbpdrgd); + +	writel(0x00000017, &dbsc3_0->dbpdrga); +	writel(0x00000018, &dbsc3_0->dbpdrgd); + +	writel(0x00000012, &dbsc3_0->dbpdrga); +	writel(0x9D5CBB66, &dbsc3_0->dbpdrgd); + +	writel(0x00000013, &dbsc3_0->dbpdrga); +	writel(0x1A868300, &dbsc3_0->dbpdrgd); + +	writel(0x00000023, &dbsc3_0->dbpdrga); +	writel(0x00FDB6C0, &dbsc3_0->dbpdrgd); + +	writel(0x00000014, &dbsc3_0->dbpdrga); +	writel(0x300214D8, &dbsc3_0->dbpdrgd); + +	writel(0x0000001A, &dbsc3_0->dbpdrga); +	writel(0x930035C7, &dbsc3_0->dbpdrgd); + +	writel(0x00000060, &dbsc3_0->dbpdrga); +	writel(0x330657B2, &dbsc3_0->dbpdrgd); + +	writel(0x00000011, &dbsc3_0->dbpdrga); +	writel(0x1000040B, &dbsc3_0->dbpdrgd); + +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x00000001, &dbsc3_0->dbpdrga); +	writel(0x00000071, &dbsc3_0->dbpdrgd); + +	writel(0x00000004, &dbsc3_0->dbpdrga); +	dbpdrgd_check(dbsc3_0); + +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x2100FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); + +	writel(0x110000DB, &dbsc3_0->dbcmd); + +	writel(0x00000001, &dbsc3_0->dbpdrga); +	writel(0x00000181, &dbsc3_0->dbpdrgd); + +	writel(0x00000004, &dbsc3_0->dbpdrga); +	dbpdrgd_check(dbsc3_0); + +	writel(0x00000001, &dbsc3_0->dbpdrga); +	writel(0x0000FE01, &dbsc3_0->dbpdrgd); + +	writel(0x00000004, &dbsc3_0->dbpdrga); +	dbpdrgd_check(dbsc3_0); + +	writel(0x00000000, &dbsc3_0->dbbs0cnt1); +	writel(0x01004C20, &dbsc3_0->dbcalcnf); +	writel(0x014000AA, &dbsc3_0->dbcaltr); +	writel(0x00000140, &dbsc3_0->dbrfcnf0); +	writel(0x00081860, &dbsc3_0->dbrfcnf1); +	writel(0x00010000, &dbsc3_0->dbrfcnf2); +	writel(0x00000001, &dbsc3_0->dbrfen); +	writel(0x00000001, &dbsc3_0->dbacen); +} +#else +#define bsc_init() do {} while (0) +#endif /* CONFIG_NORFLASH */ + +void s_init(void) +{ +	struct r8a7791_rwdt *rwdt = (struct r8a7791_rwdt *)RWDT_BASE; +	struct r8a7791_swdt *swdt = (struct r8a7791_swdt *)SWDT_BASE; + +	/* Watchdog init */ +	writel(0xA5A5A500, &rwdt->rwtcsra); +	writel(0xA5A5A500, &swdt->swtcsra); + +	/* QoS */ +	qos_init(); + +	/* BSC */ +	bsc_init(); +} + +#define MSTPSR1		0xE6150038 +#define SMSTPCR1	0xE6150134 +#define TMU0_MSTP125	(1 << 25) + +#define MSTPSR7		0xE61501C4 +#define SMSTPCR7	0xE615014C +#define SCIF0_MSTP721	(1 << 21) + +#define PMMR	0xE6060000 +#define GPSR4	0xE6060014 +#define IPSR14	0xE6060058 + +#define set_guard_reg(addr, mask, value)	\ +{ \ +	u32 val; \ +	val = (readl(addr) & ~(mask)) | (value); \ +	writel(~val, PMMR); \ +	writel(val, addr); \ +} + +#define mstp_setbits(type, addr, saddr, set) \ +	out_##type((saddr), in_##type(addr) | (set)) +#define mstp_clrbits(type, addr, saddr, clear) \ +	out_##type((saddr), in_##type(addr) & ~(clear)) +#define mstp_setbits_le32(addr, saddr, set) \ +	mstp_setbits(le32, addr, saddr, set) +#define mstp_clrbits_le32(addr, saddr, clear)   \ +	mstp_clrbits(le32, addr, saddr, clear) + +int board_early_init_f(void) +{ +	mstp_clrbits_le32(MSTPSR1, SMSTPCR1, TMU0_MSTP125); + +#if defined(CONFIG_NORFLASH) +	/* SCIF0 */ +	set_guard_reg(GPSR4, 0x34000000, 0x00000000); +	set_guard_reg(IPSR14, 0x00000FC7, 0x00000481); +	set_guard_reg(GPSR4, 0x00000000, 0x34000000); +#endif + +	mstp_clrbits_le32(MSTPSR7, SMSTPCR7, SCIF0_MSTP721); + +	return 0; +} + +int board_init(void) +{ +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = KOELSCH_SDRAM_BASE + 0x100; + +	/* Init PFC controller */ +	r8a7791_pinmux_init(); + +	return 0; +} + +int dram_init(void) +{ +	gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; +	gd->ram_size = CONFIG_SYS_SDRAM_SIZE; + +	return 0; +} + +const struct rmobile_sysinfo sysinfo = { +	CONFIG_RMOBILE_BOARD_STRING +}; + +void dram_init_banksize(void) +{ +	gd->bd->bi_dram[0].start = KOELSCH_SDRAM_BASE; +	gd->bd->bi_dram[0].size = KOELSCH_SDRAM_SIZE; +} + +int board_late_init(void) +{ +	return 0; +} + +void reset_cpu(ulong addr) +{ +} diff --git a/board/renesas/koelsch/qos.c b/board/renesas/koelsch/qos.c new file mode 100644 index 000000000..7f88f7da8 --- /dev/null +++ b/board/renesas/koelsch/qos.c @@ -0,0 +1,1220 @@ +/* + * board/renesas/koelsch/qos.c + * + * Copyright (C) 2013 Renesas Electronics Corporation + * + * SPDX-License-Identifier: GPL-2.0 + * + */ + +#include <common.h> +#include <asm/processor.h> +#include <asm/mach-types.h> +#include <asm/io.h> +#include <asm/arch/rmobile.h> + +/* QoS version 0.23 */ + +enum { +	DBSC3_00, DBSC3_01, DBSC3_02, DBSC3_03, DBSC3_04, +	DBSC3_05, DBSC3_06, DBSC3_07, DBSC3_08, DBSC3_09, +	DBSC3_10, DBSC3_11, DBSC3_12, DBSC3_13, DBSC3_14, +	DBSC3_15, +	DBSC3_NR, +}; + +static u32 dbsc3_0_r_qos_addr[DBSC3_NR] = { +	[DBSC3_00] = DBSC3_0_QOS_R0_BASE, +	[DBSC3_01] = DBSC3_0_QOS_R1_BASE, +	[DBSC3_02] = DBSC3_0_QOS_R2_BASE, +	[DBSC3_03] = DBSC3_0_QOS_R3_BASE, +	[DBSC3_04] = DBSC3_0_QOS_R4_BASE, +	[DBSC3_05] = DBSC3_0_QOS_R5_BASE, +	[DBSC3_06] = DBSC3_0_QOS_R6_BASE, +	[DBSC3_07] = DBSC3_0_QOS_R7_BASE, +	[DBSC3_08] = DBSC3_0_QOS_R8_BASE, +	[DBSC3_09] = DBSC3_0_QOS_R9_BASE, +	[DBSC3_10] = DBSC3_0_QOS_R10_BASE, +	[DBSC3_11] = DBSC3_0_QOS_R11_BASE, +	[DBSC3_12] = DBSC3_0_QOS_R12_BASE, +	[DBSC3_13] = DBSC3_0_QOS_R13_BASE, +	[DBSC3_14] = DBSC3_0_QOS_R14_BASE, +	[DBSC3_15] = DBSC3_0_QOS_R15_BASE, +}; + +static u32 dbsc3_0_w_qos_addr[DBSC3_NR] = { +	[DBSC3_00] = DBSC3_0_QOS_W0_BASE, +	[DBSC3_01] = DBSC3_0_QOS_W1_BASE, +	[DBSC3_02] = DBSC3_0_QOS_W2_BASE, +	[DBSC3_03] = DBSC3_0_QOS_W3_BASE, +	[DBSC3_04] = DBSC3_0_QOS_W4_BASE, +	[DBSC3_05] = DBSC3_0_QOS_W5_BASE, +	[DBSC3_06] = DBSC3_0_QOS_W6_BASE, +	[DBSC3_07] = DBSC3_0_QOS_W7_BASE, +	[DBSC3_08] = DBSC3_0_QOS_W8_BASE, +	[DBSC3_09] = DBSC3_0_QOS_W9_BASE, +	[DBSC3_10] = DBSC3_0_QOS_W10_BASE, +	[DBSC3_11] = DBSC3_0_QOS_W11_BASE, +	[DBSC3_12] = DBSC3_0_QOS_W12_BASE, +	[DBSC3_13] = DBSC3_0_QOS_W13_BASE, +	[DBSC3_14] = DBSC3_0_QOS_W14_BASE, +	[DBSC3_15] = DBSC3_0_QOS_W15_BASE, +}; + +static u32 dbsc3_1_r_qos_addr[DBSC3_NR] = { +	[DBSC3_00] = DBSC3_1_QOS_R0_BASE, +	[DBSC3_01] = DBSC3_1_QOS_R1_BASE, +	[DBSC3_02] = DBSC3_1_QOS_R2_BASE, +	[DBSC3_03] = DBSC3_1_QOS_R3_BASE, +	[DBSC3_04] = DBSC3_1_QOS_R4_BASE, +	[DBSC3_05] = DBSC3_1_QOS_R5_BASE, +	[DBSC3_06] = DBSC3_1_QOS_R6_BASE, +	[DBSC3_07] = DBSC3_1_QOS_R7_BASE, +	[DBSC3_08] = DBSC3_1_QOS_R8_BASE, +	[DBSC3_09] = DBSC3_1_QOS_R9_BASE, +	[DBSC3_10] = DBSC3_1_QOS_R10_BASE, +	[DBSC3_11] = DBSC3_1_QOS_R11_BASE, +	[DBSC3_12] = DBSC3_1_QOS_R12_BASE, +	[DBSC3_13] = DBSC3_1_QOS_R13_BASE, +	[DBSC3_14] = DBSC3_1_QOS_R14_BASE, +	[DBSC3_15] = DBSC3_1_QOS_R15_BASE, +}; + +static u32 dbsc3_1_w_qos_addr[DBSC3_NR] = { +	[DBSC3_00] = DBSC3_1_QOS_W0_BASE, +	[DBSC3_01] = DBSC3_1_QOS_W1_BASE, +	[DBSC3_02] = DBSC3_1_QOS_W2_BASE, +	[DBSC3_03] = DBSC3_1_QOS_W3_BASE, +	[DBSC3_04] = DBSC3_1_QOS_W4_BASE, +	[DBSC3_05] = DBSC3_1_QOS_W5_BASE, +	[DBSC3_06] = DBSC3_1_QOS_W6_BASE, +	[DBSC3_07] = DBSC3_1_QOS_W7_BASE, +	[DBSC3_08] = DBSC3_1_QOS_W8_BASE, +	[DBSC3_09] = DBSC3_1_QOS_W9_BASE, +	[DBSC3_10] = DBSC3_1_QOS_W10_BASE, +	[DBSC3_11] = DBSC3_1_QOS_W11_BASE, +	[DBSC3_12] = DBSC3_1_QOS_W12_BASE, +	[DBSC3_13] = DBSC3_1_QOS_W13_BASE, +	[DBSC3_14] = DBSC3_1_QOS_W14_BASE, +	[DBSC3_15] = DBSC3_1_QOS_W15_BASE, +}; + +void qos_init(void) +{ +	int i; +	struct r8a7791_s3c *s3c; +	struct r8a7791_s3c_qos *s3c_qos; +	struct r8a7791_dbsc3_qos *qos_addr; +	struct r8a7791_mxi *mxi; +	struct r8a7791_mxi_qos *mxi_qos; +	struct r8a7791_axi_qos *axi_qos; + +	/* DBSC DBADJ2 */ +	writel(0x20042004, DBSC3_0_DBADJ2); + +	/* S3C -QoS */ +	s3c = (struct r8a7791_s3c *)S3C_BASE; +	writel(0x00FF1B1D, &s3c->s3cadsplcr); +	writel(0x1F0D0C0C, &s3c->s3crorr); +	writel(0x1F0D0C0A, &s3c->s3cworr); + +	/* QoS Control Registers */ +	s3c_qos = (struct r8a7791_s3c_qos *)S3C_QOS_CCI0_BASE; +	writel(0x00890089, &s3c_qos->s3cqos0); +	writel(0x20960010, &s3c_qos->s3cqos1); +	writel(0x20302030, &s3c_qos->s3cqos2); +	writel(0x20AA2200, &s3c_qos->s3cqos3); +	writel(0x00002032, &s3c_qos->s3cqos4); +	writel(0x20960010, &s3c_qos->s3cqos5); +	writel(0x20302030, &s3c_qos->s3cqos6); +	writel(0x20AA2200, &s3c_qos->s3cqos7); +	writel(0x00002032, &s3c_qos->s3cqos8); + +	s3c_qos = (struct r8a7791_s3c_qos *)S3C_QOS_CCI1_BASE; +	writel(0x00890089, &s3c_qos->s3cqos0); +	writel(0x20960010, &s3c_qos->s3cqos1); +	writel(0x20302030, &s3c_qos->s3cqos2); +	writel(0x20AA2200, &s3c_qos->s3cqos3); +	writel(0x00002032, &s3c_qos->s3cqos4); +	writel(0x20960010, &s3c_qos->s3cqos5); +	writel(0x20302030, &s3c_qos->s3cqos6); +	writel(0x20AA2200, &s3c_qos->s3cqos7); +	writel(0x00002032, &s3c_qos->s3cqos8); + +	s3c_qos = (struct r8a7791_s3c_qos *)S3C_QOS_MXI_BASE; +	writel(0x00820082, &s3c_qos->s3cqos0); +	writel(0x20960020, &s3c_qos->s3cqos1); +	writel(0x20302030, &s3c_qos->s3cqos2); +	writel(0x20AA20DC, &s3c_qos->s3cqos3); +	writel(0x00002032, &s3c_qos->s3cqos4); +	writel(0x20960020, &s3c_qos->s3cqos5); +	writel(0x20302030, &s3c_qos->s3cqos6); +	writel(0x20AA20DC, &s3c_qos->s3cqos7); +	writel(0x00002032, &s3c_qos->s3cqos8); + +	s3c_qos = (struct r8a7791_s3c_qos *)S3C_QOS_AXI_BASE; +	writel(0x00820082, &s3c_qos->s3cqos0); +	writel(0x20960020, &s3c_qos->s3cqos1); +	writel(0x20302030, &s3c_qos->s3cqos2); +	writel(0x20AA20FA, &s3c_qos->s3cqos3); +	writel(0x00002032, &s3c_qos->s3cqos4); +	writel(0x20960020, &s3c_qos->s3cqos5); +	writel(0x20302030, &s3c_qos->s3cqos6); +	writel(0x20AA20FA, &s3c_qos->s3cqos7); +	writel(0x00002032, &s3c_qos->s3cqos8); + +	/* DBSC -QoS */ +	/* DBSC0 - Read */ +	for (i = DBSC3_00; i < DBSC3_NR; i++) { +		qos_addr = (struct r8a7791_dbsc3_qos *)dbsc3_0_r_qos_addr[i]; +		writel(0x00000002, &qos_addr->dblgcnt); +		writel(0x00002096, &qos_addr->dbtmval0); +		writel(0x00002064, &qos_addr->dbtmval1); +		writel(0x00002032, &qos_addr->dbtmval2); +		writel(0x00001FB0, &qos_addr->dbtmval3); +		writel(0x00000001, &qos_addr->dbrqctr); +		writel(0x00002078, &qos_addr->dbthres0); +		writel(0x0000204B, &qos_addr->dbthres1); +		writel(0x00001FE7, &qos_addr->dbthres2); +		writel(0x00000001, &qos_addr->dblgqon); +	} + +	/* DBSC0 - Write */ +	for (i = DBSC3_00; i < DBSC3_NR; i++) { +		qos_addr = (struct r8a7791_dbsc3_qos *)dbsc3_0_w_qos_addr[i]; +		writel(0x00000002, &qos_addr->dblgcnt); +		writel(0x000020EB, &qos_addr->dbtmval0); +		writel(0x0000206E, &qos_addr->dbtmval1); +		writel(0x00002050, &qos_addr->dbtmval2); +		writel(0x0000203A, &qos_addr->dbtmval3); +		writel(0x00000001, &qos_addr->dbrqctr); +		writel(0x00002078, &qos_addr->dbthres0); +		writel(0x0000205A, &qos_addr->dbthres1); +		writel(0x0000203C, &qos_addr->dbthres2); +		writel(0x00000001, &qos_addr->dblgqon); +	} + +	/* DBSC1 - Read */ +	for (i = DBSC3_00; i < DBSC3_NR; i++) { +		qos_addr = (struct r8a7791_dbsc3_qos *)dbsc3_1_r_qos_addr[i]; +		writel(0x00000002, &qos_addr->dblgcnt); +		writel(0x00002096, &qos_addr->dbtmval0); +		writel(0x00002064, &qos_addr->dbtmval1); +		writel(0x00002032, &qos_addr->dbtmval2); +		writel(0x00001FB0, &qos_addr->dbtmval3); +		writel(0x00000001, &qos_addr->dbrqctr); +		writel(0x00002078, &qos_addr->dbthres0); +		writel(0x0000204B, &qos_addr->dbthres1); +		writel(0x00001FE7, &qos_addr->dbthres2); +		writel(0x00000001, &qos_addr->dblgqon); +	} + +	/* DBSC1 - Write */ +	for (i = DBSC3_00; i < DBSC3_NR; i++) { +		qos_addr = (struct r8a7791_dbsc3_qos *)dbsc3_1_w_qos_addr[i]; +		writel(0x00000002, &qos_addr->dblgcnt); +		writel(0x000020EB, &qos_addr->dbtmval0); +		writel(0x0000206E, &qos_addr->dbtmval1); +		writel(0x00002050, &qos_addr->dbtmval2); +		writel(0x0000203A, &qos_addr->dbtmval3); +		writel(0x00000001, &qos_addr->dbrqctr); +		writel(0x00002078, &qos_addr->dbthres0); +		writel(0x0000205A, &qos_addr->dbthres1); +		writel(0x0000203C, &qos_addr->dbthres2); +		writel(0x00000001, &qos_addr->dblgqon); +	} + +	/* CCI-400 -QoS */ +	writel(0x20001000, CCI_400_MAXOT_1); +	writel(0x20001000, CCI_400_MAXOT_2); +	writel(0x0000000C, CCI_400_QOSCNTL_1); +	writel(0x0000000C, CCI_400_QOSCNTL_2); + +	/* MXI -QoS */ +	/* Transaction Control (MXI) */ +	mxi = (struct r8a7791_mxi *)MXI_BASE; +	writel(0x00000013, &mxi->mxrtcr); +	writel(0x00000013, &mxi->mxwtcr); +	writel(0x00780080, &mxi->mxsaar0); +	writel(0x02000800, &mxi->mxsaar1); + +	/* QoS Control (MXI) */ +	mxi_qos = (struct r8a7791_mxi_qos *)MXI_QOS_BASE; +	writel(0x0000000C, &mxi_qos->vspdu0); +	writel(0x0000000C, &mxi_qos->vspdu1); +	writel(0x0000000D, &mxi_qos->du0); +	writel(0x0000000D, &mxi_qos->du1); + +	/* AXI -QoS */ +	/* Transaction Control (MXI) */ +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_SYX64TO128_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_AVB_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020A6, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_G2D_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020A6, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_IMP0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002021, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_IMP1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002037, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_IMUX0_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_IMUX1_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_IMUX2_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_LBS_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000214C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_MMUDS_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_MMUM_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_MMUR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_MMUS0_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_MMUS1_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_MTSB0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002021, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_MTSB1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002021, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_PCI_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000214C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_RTX_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_SDS0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020A6, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_SDS1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020A6, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_USB20_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_USB21_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_USB22_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_USB30_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000214C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_AX2M_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_CC50_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002029, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_CCI_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_CS_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_DDM_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020A6, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_ETH_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_MPXM_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_SAT0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_SAT1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_SDM0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000214C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_SDM1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000214C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_TRAB_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020A6, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_UDM0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI_UDM1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (RT-AXI) */ +	axi_qos = (struct r8a7791_axi_qos *)RT_AXI_SHX_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)RT_AXI_DBG_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)RT_AXI_RDM_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002299, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)RT_AXI_RDS_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002029, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)RT_AXI_RTX64TO128_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)RT_AXI_STPRO_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002029, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)RT_AXI_SY2RT_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (MP-AXI) */ +	axi_qos = (struct r8a7791_axi_qos *)MP_AXI_ADSP_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002037, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MP_AXI_ASDS0_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002014, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MP_AXI_ASDS1_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002014, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MP_AXI_MLP_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002014, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MP_AXI_MMUMP_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MP_AXI_SPU_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002053, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MP_AXI_SPUC_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000206E, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (SYS-AXI256) */ +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI256_AXI128TO256_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI256_SYX_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI256_MPX_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)SYS_AXI256_MXI_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (CCI-AXI) */ +	axi_qos = (struct r8a7791_axi_qos *)CCI_AXI_MMUS0_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)CCI_AXI_SYX2_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)CCI_AXI_MMUR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)CCI_AXI_MMUDS_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)CCI_AXI_MMUM_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)CCI_AXI_MXI_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x00002245, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)CCI_AXI_MMUS1_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)CCI_AXI_MMUMP_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (Media-AXI) */ +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_MXR_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x000020DC, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x000020AA, &axi_qos->qosthres0); +	writel(0x00002032, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_MXW_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x000020DC, &axi_qos->qosctset0); +	writel(0x00002096, &axi_qos->qosctset1); +	writel(0x00002030, &axi_qos->qosctset2); +	writel(0x00002030, &axi_qos->qosctset3); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x000020AA, &axi_qos->qosthres0); +	writel(0x00002032, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_JPR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_JPW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_TDMR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_TDMW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSP1CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSP1CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSPDU0CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSPDU0CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSPDU1CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSPDU1CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002190, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VIN0W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_FDP0R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_FDP0W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_IMSR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_IMSW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSP1R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSP1W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_FDP1R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_FDP1W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_IMRR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_IMRW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSPD0R_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSPD0W_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSPD1R_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VSPD1W_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x000020C8, &axi_qos->qosctset0); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_DU0R_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002063, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_DU0W_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002063, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VCP0CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002073, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VCP0CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002073, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VCP0VR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002073, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VCP0VW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002073, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7791_axi_qos *)MEDIA_AXI_VPC0R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002073, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002064, &axi_qos->qosthres0); +	writel(0x00002004, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); +} diff --git a/board/renesas/koelsch/qos.h b/board/renesas/koelsch/qos.h new file mode 100644 index 000000000..9a6c0461b --- /dev/null +++ b/board/renesas/koelsch/qos.h @@ -0,0 +1,12 @@ +/* + * Copyright (C) 2013 Renesas Electronics Corporation + * + * SPDX-License-Identifier: GPL-2.0 + */ + +#ifndef __QOS_H__ +#define __QOS_H__ + +void qos_init(void); + +#endif diff --git a/board/renesas/lager/Makefile b/board/renesas/lager/Makefile new file mode 100644 index 000000000..034c6f8c0 --- /dev/null +++ b/board/renesas/lager/Makefile @@ -0,0 +1,9 @@ +# +# board/renesas/lager/Makefile +# +# Copyright (C) 2013 Renesas Electronics Corporation +# +# SPDX-License-Identifier: GPL-2.0 +# + +obj-y	:= lager.o qos.o diff --git a/board/renesas/lager/lager.c b/board/renesas/lager/lager.c new file mode 100644 index 000000000..5c99fc9b5 --- /dev/null +++ b/board/renesas/lager/lager.c @@ -0,0 +1,287 @@ +/* + * board/renesas/lager/lager.c + *     This file is lager board support. + * + * Copyright (C) 2013 Renesas Electronics Corporation + * Copyright (C) 2013 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> + * + * SPDX-License-Identifier: GPL-2.0 + */ + +#include <common.h> +#include <malloc.h> +#include <netdev.h> +#include <asm/processor.h> +#include <asm/mach-types.h> +#include <asm/io.h> +#include <asm/errno.h> +#include <asm/arch/sys_proto.h> +#include <asm/gpio.h> +#include <asm/arch/rmobile.h> +#include "qos.h" + +DECLARE_GLOBAL_DATA_PTR; + +#define s_init_wait(cnt) \ +	({	\ +		u32 i = 0x10000 * cnt;	\ +		while (i > 0)	\ +			i--;	\ +	}) + +#define dbpdrgd_check(bsc) \ +	({	\ +		while ((readl(&bsc->dbpdrgd) & 0x1) != 0x1)	\ +			;	\ +	}) + +#if defined(CONFIG_NORFLASH) +static void bsc_init(void) +{ +	struct r8a7790_lbsc *lbsc = (struct r8a7790_lbsc *)LBSC_BASE; +	struct r8a7790_dbsc3 *dbsc3_0 = (struct r8a7790_dbsc3 *)DBSC3_0_BASE; + +	/* LBSC */ +	writel(0x00000020, &lbsc->cs0ctrl); +	writel(0x00000020, &lbsc->cs1ctrl); +	writel(0x00002020, &lbsc->ecs0ctrl); +	writel(0x00002020, &lbsc->ecs1ctrl); + +	writel(0x077F077F, &lbsc->cswcr0); +	writel(0x077F077F, &lbsc->cswcr1); +	writel(0x077F077F, &lbsc->ecswcr0); +	writel(0x077F077F, &lbsc->ecswcr1); + +	/* DBSC3 */ +	s_init_wait(10); + +	writel(0x0000A55A, &dbsc3_0->dbpdlck); +	writel(0x00000001, &dbsc3_0->dbpdrga); +	writel(0x80000000, &dbsc3_0->dbpdrgd); +	writel(0x00000004, &dbsc3_0->dbpdrga); +	dbpdrgd_check(dbsc3_0); + +	writel(0x00000006, &dbsc3_0->dbpdrga); +	writel(0x0001C000, &dbsc3_0->dbpdrgd); + +	writel(0x00000023, &dbsc3_0->dbpdrga); +	writel(0x00FD2480, &dbsc3_0->dbpdrgd); + +	writel(0x00000010, &dbsc3_0->dbpdrga); +	writel(0xF004649B, &dbsc3_0->dbpdrgd); + +	writel(0x0000000F, &dbsc3_0->dbpdrga); +	writel(0x00181EE4, &dbsc3_0->dbpdrgd); + +	writel(0x0000000E, &dbsc3_0->dbpdrga); +	writel(0x33C03812, &dbsc3_0->dbpdrgd); + +	writel(0x00000003, &dbsc3_0->dbpdrga); +	writel(0x0300C481, &dbsc3_0->dbpdrgd); + +	writel(0x00000007, &dbsc3_0->dbkind); +	writel(0x10030A02, &dbsc3_0->dbconf0); +	writel(0x00000001, &dbsc3_0->dbphytype); +	writel(0x00000000, &dbsc3_0->dbbl); +	writel(0x0000000B, &dbsc3_0->dbtr0); +	writel(0x00000008, &dbsc3_0->dbtr1); +	writel(0x00000000, &dbsc3_0->dbtr2); +	writel(0x0000000B, &dbsc3_0->dbtr3); +	writel(0x000C000B, &dbsc3_0->dbtr4); +	writel(0x00000027, &dbsc3_0->dbtr5); +	writel(0x0000001C, &dbsc3_0->dbtr6); +	writel(0x00000005, &dbsc3_0->dbtr7); +	writel(0x00000018, &dbsc3_0->dbtr8); +	writel(0x00000008, &dbsc3_0->dbtr9); +	writel(0x0000000C, &dbsc3_0->dbtr10); +	writel(0x00000009, &dbsc3_0->dbtr11); +	writel(0x00000012, &dbsc3_0->dbtr12); +	writel(0x000000D0, &dbsc3_0->dbtr13); +	writel(0x00140005, &dbsc3_0->dbtr14); +	writel(0x00050004, &dbsc3_0->dbtr15); +	writel(0x70233005, &dbsc3_0->dbtr16); +	writel(0x000C0000, &dbsc3_0->dbtr17); +	writel(0x00000300, &dbsc3_0->dbtr18); +	writel(0x00000040, &dbsc3_0->dbtr19); +	writel(0x00000001, &dbsc3_0->dbrnk0); +	writel(0x00020001, &dbsc3_0->dbadj0); +	writel(0x20082008, &dbsc3_0->dbadj2); +	writel(0x00020002, &dbsc3_0->dbwt0cnf0); +	writel(0x0000000F, &dbsc3_0->dbwt0cnf4); + +	writel(0x00000015, &dbsc3_0->dbpdrga); +	writel(0x00000D70, &dbsc3_0->dbpdrgd); + +	writel(0x00000016, &dbsc3_0->dbpdrga); +	writel(0x00000006, &dbsc3_0->dbpdrgd); + +	writel(0x00000017, &dbsc3_0->dbpdrga); +	writel(0x00000018, &dbsc3_0->dbpdrgd); + +	writel(0x00000012, &dbsc3_0->dbpdrga); +	writel(0x9D5CBB66, &dbsc3_0->dbpdrgd); + +	writel(0x00000013, &dbsc3_0->dbpdrga); +	writel(0x1A868300, &dbsc3_0->dbpdrgd); + +	writel(0x00000023, &dbsc3_0->dbpdrga); +	writel(0x00FDB6C0, &dbsc3_0->dbpdrgd); + +	writel(0x00000014, &dbsc3_0->dbpdrga); +	writel(0x300214D8, &dbsc3_0->dbpdrgd); + +	writel(0x0000001A, &dbsc3_0->dbpdrga); +	writel(0x930035C7, &dbsc3_0->dbpdrgd); + +	writel(0x00000060, &dbsc3_0->dbpdrga); +	writel(0x330657B2, &dbsc3_0->dbpdrgd); + +	writel(0x00000011, &dbsc3_0->dbpdrga); +	writel(0x1000040B, &dbsc3_0->dbpdrgd); + +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x00000001, &dbsc3_0->dbpdrga); +	writel(0x00000071, &dbsc3_0->dbpdrgd); + +	writel(0x00000004, &dbsc3_0->dbpdrga); +	dbpdrgd_check(dbsc3_0); + +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x2100FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); +	writel(0x0000FA00, &dbsc3_0->dbcmd); + +	writel(0x110000DB, &dbsc3_0->dbcmd); + +	writel(0x00000001, &dbsc3_0->dbpdrga); +	writel(0x00000181, &dbsc3_0->dbpdrgd); + +	writel(0x00000004, &dbsc3_0->dbpdrga); +	dbpdrgd_check(dbsc3_0); + +	writel(0x00000001, &dbsc3_0->dbpdrga); +	writel(0x0000FE01, &dbsc3_0->dbpdrgd); + +	writel(0x00000004, &dbsc3_0->dbpdrga); +	dbpdrgd_check(dbsc3_0); + +	writel(0x00000000, &dbsc3_0->dbbs0cnt1); +	writel(0x01004C20, &dbsc3_0->dbcalcnf); +	writel(0x014000AA, &dbsc3_0->dbcaltr); +	writel(0x00000140, &dbsc3_0->dbrfcnf0); +	writel(0x00081860, &dbsc3_0->dbrfcnf1); +	writel(0x00010000, &dbsc3_0->dbrfcnf2); +	writel(0x00000001, &dbsc3_0->dbrfen); +	writel(0x00000001, &dbsc3_0->dbacen); +} +#else +#define bsc_init() do {} while (0) +#endif /* CONFIG_NORFLASH */ + +void s_init(void) +{ +	struct r8a7790_rwdt *rwdt = (struct r8a7790_rwdt *)RWDT_BASE; +	struct r8a7790_swdt *swdt = (struct r8a7790_swdt *)SWDT_BASE; + +	/* Watchdog init */ +	writel(0xA5A5A500, &rwdt->rwtcsra); +	writel(0xA5A5A500, &swdt->swtcsra); + +	/* QoS(Quality-of-Service) Init */ +	qos_init(); + +	/* BSC init */ +	bsc_init(); +} + +#define MSTPSR1	0xE6150038 +#define SMSTPCR1	0xE6150134 +#define TMU0_MSTP125	(1 << 25) + +#define MSTPSR7	0xE61501C4 +#define SMSTPCR7	0xE615014C +#define SCIF0_MSTP721	(1 << 21) + +#define PMMR	0xE6060000 +#define GPSR4	0xE6060014 +#define IPSR14	0xE6060058 + +#define	set_guard_reg(addr, mask, value)	\ +{ \ +	u32	val; \ +	val = (readl(addr) & ~(mask)) | (value);	\ +	writel(~val, PMMR);	\ +	writel(val, addr);	\ +} + +#define mstp_setbits(type, addr, saddr, set) \ +	out_##type((saddr), in_##type(addr) | (set)) +#define mstp_clrbits(type, addr, saddr, clear) \ +	out_##type((saddr), in_##type(addr) & ~(clear)) +#define mstp_setbits_le32(addr, saddr, set)	\ +		mstp_setbits(le32, addr, saddr, set) +#define mstp_clrbits_le32(addr, saddr, clear)	\ +		mstp_clrbits(le32, addr, saddr, clear) + +int board_early_init_f(void) +{ +	/* TMU0 */ +	mstp_clrbits_le32(MSTPSR1, SMSTPCR1, TMU0_MSTP125); + +#if defined(CONFIG_NORFLASH) +	/* SCIF0 */ +	set_guard_reg(GPSR4, 0x34000000, 0x00000000); +	set_guard_reg(IPSR14, 0x00000FC7, 0x00000481); +	set_guard_reg(GPSR4,  0x00000000, 0x34000000); +#endif + +	mstp_clrbits_le32(MSTPSR7, SMSTPCR7, SCIF0_MSTP721); + +	return 0; +} + +DECLARE_GLOBAL_DATA_PTR; +int board_init(void) +{ +	/* board id for linux */ +	gd->bd->bi_arch_number = MACH_TYPE_LAGER; +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = LAGER_SDRAM_BASE + 0x100; + +	/* Init PFC controller */ +	r8a7790_pinmux_init(); + +	return 0; +} + +int dram_init(void) +{ +	gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; +	gd->ram_size = CONFIG_SYS_SDRAM_SIZE; + +	return 0; +} + +const struct rmobile_sysinfo sysinfo = { +	CONFIG_RMOBILE_BOARD_STRING +}; + +void dram_init_banksize(void) +{ +	gd->bd->bi_dram[0].start = LAGER_SDRAM_BASE; +	gd->bd->bi_dram[0].size = LAGER_SDRAM_SIZE; +} + +int board_late_init(void) +{ +	return 0; +} + +void reset_cpu(ulong addr) +{ +} diff --git a/board/renesas/lager/qos.c b/board/renesas/lager/qos.c new file mode 100644 index 000000000..b88511a32 --- /dev/null +++ b/board/renesas/lager/qos.c @@ -0,0 +1,1119 @@ +/* + * board/renesas/lager/qos.c + * + * Copyright (C) 2013 Renesas Electronics Corporation + * + * SPDX-License-Identifier: GPL-2.0 + */ + +#include <common.h> +#include <asm/processor.h> +#include <asm/mach-types.h> +#include <asm/io.h> +#include <asm/arch/rmobile.h> + +/* QoS version 0.954 */ + +enum { +	DBSC3_R00, DBSC3_R01, DBSC3_R02, DBSC3_R03, DBSC3_R04, +	DBSC3_R05, DBSC3_R06, DBSC3_R07, DBSC3_R08, DBSC3_R09, +	DBSC3_R10, DBSC3_R11, DBSC3_R12, DBSC3_R13, DBSC3_R14, +	DBSC3_R15, +	DBSC3_W00, DBSC3_W01, DBSC3_W02, DBSC3_W03, DBSC3_W04, +	DBSC3_W05, DBSC3_W06, DBSC3_W07, DBSC3_W08, DBSC3_W09, +	DBSC3_W10, DBSC3_W11, DBSC3_W12, DBSC3_W13, DBSC3_W14, +	DBSC3_W15, +	DBSC3_NR, +}; + +static const u32 dbsc3_qos_addr[DBSC3_NR] = { +	[DBSC3_R00] = DBSC3_0_QOS_R0_BASE, +	[DBSC3_R01] = DBSC3_0_QOS_R1_BASE, +	[DBSC3_R02] = DBSC3_0_QOS_R2_BASE, +	[DBSC3_R03] = DBSC3_0_QOS_R3_BASE, +	[DBSC3_R04] = DBSC3_0_QOS_R4_BASE, +	[DBSC3_R05] = DBSC3_0_QOS_R5_BASE, +	[DBSC3_R06] = DBSC3_0_QOS_R6_BASE, +	[DBSC3_R07] = DBSC3_0_QOS_R7_BASE, +	[DBSC3_R08] = DBSC3_0_QOS_R8_BASE, +	[DBSC3_R09] = DBSC3_0_QOS_R9_BASE, +	[DBSC3_R10] = DBSC3_0_QOS_R10_BASE, +	[DBSC3_R11] = DBSC3_0_QOS_R11_BASE, +	[DBSC3_R12] = DBSC3_0_QOS_R12_BASE, +	[DBSC3_R13] = DBSC3_0_QOS_R13_BASE, +	[DBSC3_R14] = DBSC3_0_QOS_R14_BASE, +	[DBSC3_R15] = DBSC3_0_QOS_R15_BASE, +	[DBSC3_W00] = DBSC3_0_QOS_W0_BASE, +	[DBSC3_W01] = DBSC3_0_QOS_W1_BASE, +	[DBSC3_W02] = DBSC3_0_QOS_W2_BASE, +	[DBSC3_W03] = DBSC3_0_QOS_W3_BASE, +	[DBSC3_W04] = DBSC3_0_QOS_W4_BASE, +	[DBSC3_W05] = DBSC3_0_QOS_W5_BASE, +	[DBSC3_W06] = DBSC3_0_QOS_W6_BASE, +	[DBSC3_W07] = DBSC3_0_QOS_W7_BASE, +	[DBSC3_W08] = DBSC3_0_QOS_W8_BASE, +	[DBSC3_W09] = DBSC3_0_QOS_W9_BASE, +	[DBSC3_W10] = DBSC3_0_QOS_W10_BASE, +	[DBSC3_W11] = DBSC3_0_QOS_W11_BASE, +	[DBSC3_W12] = DBSC3_0_QOS_W12_BASE, +	[DBSC3_W13] = DBSC3_0_QOS_W13_BASE, +	[DBSC3_W14] = DBSC3_0_QOS_W14_BASE, +	[DBSC3_W15] = DBSC3_0_QOS_W15_BASE, +}; + +void qos_init(void) +{ +	int i; +	struct r8a7790_s3c *s3c; +	struct r8a7790_s3c_qos *s3c_qos; +	struct r8a7790_dbsc3_qos *qos_addr; +	struct r8a7790_mxi *mxi; +	struct r8a7790_mxi_qos *mxi_qos; +	struct r8a7790_axi_qos *axi_qos; + +	/* DBSC DBADJ2 */ +	writel(0x20042004, DBSC3_0_DBADJ2); + +	/* S3C -QoS */ +	s3c = (struct r8a7790_s3c *)S3C_BASE; +	writel(0x80FF1C1E, &s3c->s3cadsplcr); +	writel(0x1F060505, &s3c->s3crorr); +	writel(0x1F020100, &s3c->s3cworr); + +	/* QoS Control Registers */ +	s3c_qos = (struct r8a7790_s3c_qos *)S3C_QOS_CCI0_BASE; +	writel(0x00800080, &s3c_qos->s3cqos0); +	writel(0x22000010, &s3c_qos->s3cqos1); +	writel(0x22002200, &s3c_qos->s3cqos2); +	writel(0x2F002200, &s3c_qos->s3cqos3); +	writel(0x2F002F00, &s3c_qos->s3cqos4); +	writel(0x22000010, &s3c_qos->s3cqos5); +	writel(0x22002200, &s3c_qos->s3cqos6); +	writel(0x2F002200, &s3c_qos->s3cqos7); +	writel(0x2F002F00, &s3c_qos->s3cqos8); + +	s3c_qos = (struct r8a7790_s3c_qos *)S3C_QOS_CCI1_BASE; +	writel(0x00800080, &s3c_qos->s3cqos0); +	writel(0x22000010, &s3c_qos->s3cqos1); +	writel(0x22002200, &s3c_qos->s3cqos2); +	writel(0x2F002200, &s3c_qos->s3cqos3); +	writel(0x2F002F00, &s3c_qos->s3cqos4); +	writel(0x22000010, &s3c_qos->s3cqos5); +	writel(0x22002200, &s3c_qos->s3cqos6); +	writel(0x2F002200, &s3c_qos->s3cqos7); +	writel(0x2F002F00, &s3c_qos->s3cqos8); + +	s3c_qos = (struct r8a7790_s3c_qos *)S3C_QOS_MXI_BASE; +	writel(0x80918099, &s3c_qos->s3cqos0); +	writel(0x20410010, &s3c_qos->s3cqos1); +	writel(0x200A2023, &s3c_qos->s3cqos2); +	writel(0x20502001, &s3c_qos->s3cqos3); +	writel(0x00002032, &s3c_qos->s3cqos4); +	writel(0x20410FFF, &s3c_qos->s3cqos5); +	writel(0x200A2023, &s3c_qos->s3cqos6); +	writel(0x20502001, &s3c_qos->s3cqos7); +	writel(0x20142032, &s3c_qos->s3cqos8); + +	s3c_qos = (struct r8a7790_s3c_qos *)S3C_QOS_AXI_BASE; + +	writel(0x00810089, &s3c_qos->s3cqos0); +	writel(0x20410001, &s3c_qos->s3cqos1); +	writel(0x200A2023, &s3c_qos->s3cqos2); +	writel(0x20502001, &s3c_qos->s3cqos3); +	writel(0x00002032, &s3c_qos->s3cqos4); +	writel(0x20410FFF, &s3c_qos->s3cqos5); +	writel(0x200A2023, &s3c_qos->s3cqos6); +	writel(0x20502001, &s3c_qos->s3cqos7); +	writel(0x20142032, &s3c_qos->s3cqos8); + +	writel(0x00200808, &s3c->s3carcr11); + +	/* DBSC -QoS */ +	/* DBSC0 - Read/Write */ +	for (i = DBSC3_R00; i < DBSC3_NR; i++) { +		qos_addr = (struct r8a7790_dbsc3_qos *)dbsc3_qos_addr[i]; +		writel(0x00000203, &qos_addr->dblgcnt); +		writel(0x00002064, &qos_addr->dbtmval0); +		writel(0x00002048, &qos_addr->dbtmval1); +		writel(0x00002032, &qos_addr->dbtmval2); +		writel(0x00002019, &qos_addr->dbtmval3); +		writel(0x00000001, &qos_addr->dbrqctr); +		writel(0x00002019, &qos_addr->dbthres0); +		writel(0x00002019, &qos_addr->dbthres1); +		writel(0x00002019, &qos_addr->dbthres2); +		writel(0x00000000, &qos_addr->dblgqon); +	} +	/* CCI-400 -QoS */ +	writel(0x20001000, CCI_400_MAXOT_1); +	writel(0x20001000, CCI_400_MAXOT_2); +	writel(0x0000000C, CCI_400_QOSCNTL_1); +	writel(0x0000000C, CCI_400_QOSCNTL_2); + +	/* MXI -QoS */ +	/* Transaction Control (MXI) */ +	mxi = (struct r8a7790_mxi *)MXI_BASE; +	writel(0x00000013, &mxi->mxrtcr); +	writel(0x00000013, &mxi->mxwtcr); +	writel(0x00B800C0, &mxi->mxsaar0); +	writel(0x02000800, &mxi->mxsaar1); +	writel(0x00200000, &mxi->mxs3cracr); +	writel(0x00200000, &mxi->mxs3cwacr); +	writel(0x00200000, &mxi->mxaxiracr); +	writel(0x00200000, &mxi->mxaxiwacr); + +	/* QoS Control (MXI) */ +	mxi_qos = (struct r8a7790_mxi_qos *)MXI_QOS_BASE; +	writel(0x0000000C, &mxi_qos->vspdu0); +	writel(0x0000000C, &mxi_qos->vspdu1); +	writel(0x0000000D, &mxi_qos->du0); +	writel(0x0000000D, &mxi_qos->du1); + +	/* AXI -QoS */ +	/* Transaction Control (MXI) */ +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_SYX64TO128_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_AVB_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200A, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_G2D_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200A, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_IMP0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002002, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_IMP1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002004, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_IMUX0_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_IMUX1_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_IMUX2_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_LBS_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002014, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_MMUDS_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_MMUM_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_MMUR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_MMUS0_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_MMUS1_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_MTSB0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002002, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_MTSB1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002002, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_PCI_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002014, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_RTX_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_SDS0_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200A, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_SDS1_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200A, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_USB20_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002005, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_USB21_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002005, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_USB22_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002005, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI_USB30_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002014, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (RT-AXI) */ +	axi_qos = (struct r8a7790_axi_qos *)RT_AXI_SHX_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002005, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)RT_AXI_RDS_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)RT_AXI_RTX64TO128_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)RT_AXI_STPRO_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002003, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (MP-AXI) */ +	axi_qos = (struct r8a7790_axi_qos *)MP_AXI_ADSP_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MP_AXI_ASDS0_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002014, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MP_AXI_ASDS1_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002014, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MP_AXI_MLP_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002002, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MP_AXI_MMUMP_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MP_AXI_SPU_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MP_AXI_SPUC_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200D, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (SYS-AXI256) */ +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI256_AXI128TO256_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI256_SYX_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI256_MPX_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)SYS_AXI256_MXI_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (CCI-AXI) */ +	axi_qos = (struct r8a7790_axi_qos *)CCI_AXI_MMUS0_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)CCI_AXI_SYX2_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)CCI_AXI_MMUR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)CCI_AXI_MMUDS_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)CCI_AXI_MMUM_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)CCI_AXI_MXI_BASE; +	writel(0x00000002, &axi_qos->qosconf); +	writel(0x0000200F, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)CCI_AXI_MMUS1_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)CCI_AXI_MMUMP_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002001, &axi_qos->qosctset0); +	writel(0x00002009, &axi_qos->qosctset1); +	writel(0x00002003, &axi_qos->qosctset2); +	writel(0x00002003, &axi_qos->qosctset3); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000000, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	/* QoS Register (Media-AXI) */ +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_JPR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_JPW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_GCU0R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_GCU0W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_GCU1R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_GCU1W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_TDMR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_TDMW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSP0CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSP0CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSP1CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSP1CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSPDU0CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSPDU0CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSPDU1CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSPDU1CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002018, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VIN0W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSP0R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSP0W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_FDP0R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_FDP0W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_IMSR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_IMSW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSP1R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSP1W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_FDP1R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_FDP1W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_IMRR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_IMRW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_FDP2R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_FDP2W_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSPD0R_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSPD0W_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSPD1R_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VSPD1W_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_DU0R_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_DU0W_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_DU1R_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_DU1W_BASE; +	writel(0x00000000, &axi_qos->qosconf); +	writel(0x0000200C, &axi_qos->qosctset0); +	writel(0x00000001, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VCP0CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VCP0CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VCP0VR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VCP0VW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VPC0R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VCP1CR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VCP1CW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VCP1VR_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VCP1VW_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000001, &axi_qos->qosqon); + +	axi_qos = (struct r8a7790_axi_qos *)MEDIA_AXI_VPC1R_BASE; +	writel(0x00000001, &axi_qos->qosconf); +	writel(0x00002007, &axi_qos->qosctset0); +	writel(0x00000020, &axi_qos->qosreqctr); +	writel(0x00002006, &axi_qos->qosthres0); +	writel(0x00002001, &axi_qos->qosthres1); +	writel(0x00000001, &axi_qos->qosthres2); +	writel(0x00000000, &axi_qos->qosqon); +} diff --git a/board/renesas/lager/qos.h b/board/renesas/lager/qos.h new file mode 100644 index 000000000..9a6c0461b --- /dev/null +++ b/board/renesas/lager/qos.h @@ -0,0 +1,12 @@ +/* + * Copyright (C) 2013 Renesas Electronics Corporation + * + * SPDX-License-Identifier: GPL-2.0 + */ + +#ifndef __QOS_H__ +#define __QOS_H__ + +void qos_init(void); + +#endif diff --git a/board/ronetix/pm9261/led.c b/board/ronetix/pm9261/led.c index 223a51617..cc4c2a072 100644 --- a/board/ronetix/pm9261/led.c +++ b/board/ronetix/pm9261/led.c @@ -8,9 +8,9 @@   */  #include <common.h> +#include <asm/gpio.h>  #include <asm/arch/at91_pmc.h>  #include <asm/arch/gpio.h> -#include <asm/io.h>  void coloured_LED_init(void)  { @@ -19,11 +19,11 @@ void coloured_LED_init(void)  	/* Enable clock */  	writel(1 << ATMEL_ID_PIOC, &pmc->pcer); -	at91_set_pio_output(CONFIG_RED_LED, 1); -	at91_set_pio_output(CONFIG_GREEN_LED, 1); -	at91_set_pio_output(CONFIG_YELLOW_LED, 1); +	gpio_direction_output(CONFIG_RED_LED, 1); +	gpio_direction_output(CONFIG_GREEN_LED, 1); +	gpio_direction_output(CONFIG_YELLOW_LED, 1); -	at91_set_pio_value(CONFIG_RED_LED, 0); -	at91_set_pio_value(CONFIG_GREEN_LED, 1); -	at91_set_pio_value(CONFIG_YELLOW_LED, 1); +	gpio_set_value(CONFIG_RED_LED, 0); +	gpio_set_value(CONFIG_GREEN_LED, 1); +	gpio_set_value(CONFIG_YELLOW_LED, 1);  } diff --git a/board/ronetix/pm9261/pm9261.c b/board/ronetix/pm9261/pm9261.c index a2a569b0c..a63438343 100644 --- a/board/ronetix/pm9261/pm9261.c +++ b/board/ronetix/pm9261/pm9261.c @@ -11,6 +11,7 @@  #include <common.h>  #include <asm/sizes.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> @@ -73,10 +74,10 @@ static void pm9261_nand_hw_init(void)  		&pmc->pcer);  	/* Configure RDY/BSY */ -	at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); +	gpio_direction_input(CONFIG_SYS_NAND_READY_PIN);  	/* Enable NandFlash */ -	at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);  	at91_set_a_periph(AT91_PIO_PORTC, 0, 0);	/* NANDOE */  	at91_set_a_periph(AT91_PIO_PORTC, 1, 0);	/* NANDWE */ diff --git a/board/ronetix/pm9263/led.c b/board/ronetix/pm9263/led.c index 44e343090..bfc2310b0 100644 --- a/board/ronetix/pm9263/led.c +++ b/board/ronetix/pm9263/led.c @@ -8,9 +8,9 @@   */  #include <common.h> +#include <asm/gpio.h>  #include <asm/arch/at91_pmc.h>  #include <asm/arch/gpio.h> -#include <asm/io.h>  void coloured_LED_init(void)  { @@ -19,9 +19,9 @@ void coloured_LED_init(void)  	/* Enable clock */  	writel(1 << ATMEL_ID_PIOB, &pmc->pcer); -	at91_set_pio_output(CONFIG_RED_LED, 1); -	at91_set_pio_output(CONFIG_GREEN_LED, 1); +	gpio_direction_output(CONFIG_RED_LED, 1); +	gpio_direction_output(CONFIG_GREEN_LED, 1); -	at91_set_pio_value(CONFIG_RED_LED, 0); -	at91_set_pio_value(CONFIG_GREEN_LED, 1); +	gpio_set_value(CONFIG_RED_LED, 0); +	gpio_set_value(CONFIG_GREEN_LED, 1);  } diff --git a/board/ronetix/pm9263/pm9263.c b/board/ronetix/pm9263/pm9263.c index 48eba99d0..3cedeef8a 100644 --- a/board/ronetix/pm9263/pm9263.c +++ b/board/ronetix/pm9263/pm9263.c @@ -11,6 +11,7 @@  #include <common.h>  #include <asm/sizes.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> @@ -67,10 +68,10 @@ static void pm9263_nand_hw_init(void)  		&smc->cs[3].mode);  	/* Configure RDY/BSY */ -	at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); +	gpio_direction_input(CONFIG_SYS_NAND_READY_PIN);  	/* Enable NandFlash */ -	at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);  }  #endif diff --git a/board/ronetix/pm9g45/pm9g45.c b/board/ronetix/pm9g45/pm9g45.c index 5bb5a3c10..c9f274700 100644 --- a/board/ronetix/pm9g45/pm9g45.c +++ b/board/ronetix/pm9g45/pm9g45.c @@ -14,6 +14,7 @@  #include <common.h>  #include <asm/sizes.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> @@ -66,11 +67,11 @@ static void pm9g45_nand_hw_init(void)  #ifdef CONFIG_SYS_NAND_READY_PIN  	/* Configure RDY/BSY */ -	at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); +	gpio_direction_input(CONFIG_SYS_NAND_READY_PIN);  #endif  	/* Enable NandFlash */ -	at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +	gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);  }  #endif diff --git a/board/samsung/trats/trats.c b/board/samsung/trats/trats.c index 7012c134f..6bd106ed5 100644 --- a/board/samsung/trats/trats.c +++ b/board/samsung/trats/trats.c @@ -501,6 +501,17 @@ int board_usb_init(int index, enum usb_init_type init)  	debug("USB_udc_probe\n");  	return s3c_udc_probe(&s5pc210_otg_data);  } + +#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void) +{ +	struct pmic *muic = pmic_get("MAX8997_MUIC"); +	if (!muic) +		return 0; + +	return !!muic->chrg->chrg_type(muic); +} +#endif  #endif  static void pmic_reset(void) diff --git a/board/samsung/trats2/trats2.c b/board/samsung/trats2/trats2.c index d44d825e8..955252200 100644 --- a/board/samsung/trats2/trats2.c +++ b/board/samsung/trats2/trats2.c @@ -25,6 +25,9 @@  #include <power/max77693_fg.h>  #include <libtizen.h>  #include <errno.h> +#include <usb.h> +#include <usb/s3c_udc.h> +#include <usb_mass_storage.h>  DECLARE_GLOBAL_DATA_PTR; @@ -40,7 +43,7 @@ static void check_hw_revision(void)  	int modelrev = 0;  	int i; -	gpio2 = (struct exynos4x12_gpio_part2 *)EXYNOS4X12_GPIO_PART2_BASE; +	gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();  	/*  	 * GPM1[1:0]: MODEL_REV[1:0] @@ -90,7 +93,7 @@ static inline u32 get_model_rev(void)  static void board_external_gpio_init(void)  { -	gpio2 = (struct exynos4x12_gpio_part2 *)EXYNOS4X12_GPIO_PART2_BASE; +	gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();  	/*  	 * some pins which in alive block are connected with external pull-up @@ -115,8 +118,8 @@ static void board_external_gpio_init(void)  #ifdef CONFIG_SYS_I2C_INIT_BOARD  static void board_init_i2c(void)  { -	gpio1 = (struct exynos4x12_gpio_part1 *)EXYNOS4X12_GPIO_PART1_BASE; -	gpio2 = (struct exynos4x12_gpio_part2 *)EXYNOS4X12_GPIO_PART2_BASE; +	gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1(); +	gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();  	/* I2C_7 */  	s5p_gpio_direction_output(&gpio1->d0, 2, 1); @@ -147,7 +150,7 @@ static int pmic_init_max77686(void);  int board_init(void)  {  	struct exynos4_power *pwr = -		(struct exynos4_power *)EXYNOS4X12_POWER_BASE; +		(struct exynos4_power *)samsung_get_base_power();  	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; @@ -254,7 +257,7 @@ int board_mmc_init(bd_t *bis)  {  	int err0, err2 = 0; -	gpio2 = (struct exynos4x12_gpio_part2 *)EXYNOS4X12_GPIO_PART2_BASE; +	gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();  	/* eMMC_EN: SD_0_CDn: GPK0[2] Output High */  	s5p_gpio_direction_output(&gpio2->k0, 2, 1); @@ -308,6 +311,95 @@ int board_mmc_init(bd_t *bis)  	return err0 & err2;  } +#ifdef CONFIG_USB_GADGET +static int s5pc210_phy_control(int on) +{ +	int ret = 0; +	unsigned int val; +	struct pmic *p, *p_pmic, *p_muic; + +	p_pmic = pmic_get("MAX77686_PMIC"); +	if (!p_pmic) +		return -ENODEV; + +	if (pmic_probe(p_pmic)) +		return -1; + +	p_muic = pmic_get("MAX77693_MUIC"); +	if (!p_muic) +		return -ENODEV; + +	if (pmic_probe(p_muic)) +		return -1; + +	if (on) { +		ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON); +		if (ret) +			return -1; + +		p = pmic_get("MAX77693_PMIC"); +		if (!p) +			return -ENODEV; + +		if (pmic_probe(p)) +			return -1; + +		/* SAFEOUT */ +		ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val); +		if (ret) +			return -1; + +		val |= MAX77693_ENSAFEOUT1; +		ret = pmic_reg_write(p, MAX77693_SAFEOUT, val); +		if (ret) +			return -1; + +		/* PATH: USB */ +		ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, +			MAX77693_MUIC_CTRL1_DN1DP2); + +	} else { +		ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM); +		if (ret) +			return -1; + +		/* PATH: UART */ +		ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, +			MAX77693_MUIC_CTRL1_UT1UR2); +	} + +	if (ret) +		return -1; + +	return 0; +} + +struct s3c_plat_otg_data s5pc210_otg_data = { +	.phy_control	= s5pc210_phy_control, +	.regs_phy	= EXYNOS4X12_USBPHY_BASE, +	.regs_otg	= EXYNOS4X12_USBOTG_BASE, +	.usb_phy_ctrl	= EXYNOS4X12_USBPHY_CONTROL, +	.usb_flags	= PHY0_SLEEP, +}; + +int board_usb_init(int index, enum usb_init_type init) +{ +	debug("USB_udc_probe\n"); +	return s3c_udc_probe(&s5pc210_otg_data); +} + +#ifdef CONFIG_USB_CABLE_CHECK +int usb_cable_connected(void) +{ +	struct pmic *muic = pmic_get("MAX77693_MUIC"); +	if (!muic) +		return 0; + +	return !!muic->chrg->chrg_type(muic); +} +#endif +#endif +  static int pmic_init_max77686(void)  {  	struct pmic *p = pmic_get("MAX77686_PMIC"); @@ -421,7 +513,7 @@ void exynos_lcd_power_on(void)  {  	struct pmic *p = pmic_get("MAX77686_PMIC"); -	gpio1 = (struct exynos4x12_gpio_part1 *)EXYNOS4X12_GPIO_PART1_BASE; +	gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1();  	/* LCD_2.2V_EN: GPC0[1] */  	s5p_gpio_set_pull(&gpio1->c0, 1, GPIO_PULL_UP); @@ -435,7 +527,7 @@ void exynos_lcd_power_on(void)  void exynos_reset_lcd(void)  { -	gpio1 = (struct exynos4x12_gpio_part1 *)EXYNOS4X12_GPIO_PART1_BASE; +	gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1();  	/* reset lcd */  	s5p_gpio_direction_output(&gpio1->f2, 1, 0); diff --git a/board/siemens/common/factoryset.c b/board/siemens/common/factoryset.c index fbe79973e..266dbbbb5 100644 --- a/board/siemens/common/factoryset.c +++ b/board/siemens/common/factoryset.c @@ -15,7 +15,8 @@  #include <asm/arch/sys_proto.h>  #include <asm/unaligned.h>  #include <net.h> -#include <usbdescriptors.h> +#include <errno.h> +#include <g_dnl.h>  #include "factoryset.h"  #define EEPR_PG_SZ		0x80 @@ -224,8 +225,20 @@ int factoryset_read_eeprom(int i2c_addr)  					MAX_STRING_LENGTH)) {  		debug("display name: %s\n", factory_dat.disp_name);  	} -  #endif +	if (0 <= get_factory_record_val(cp, size, (uchar *)"DEV", +					(uchar *)"num", factory_dat.serial, +					MAX_STRING_LENGTH)) { +		debug("serial number: %s\n", factory_dat.serial); +	} +	if (0 <= get_factory_record_val(cp, size, (uchar *)"DEV", +					(uchar *)"ver", buf, +					MAX_STRING_LENGTH)) { +		factory_dat.version = simple_strtoul((char *)buf, +							    NULL, 16); +		debug("version number: %d\n", factory_dat.version); +	} +  	return 0;  err: @@ -279,6 +292,13 @@ int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)  {  	put_unaligned(factory_dat.usb_vendor_id, &dev->idVendor);  	put_unaligned(factory_dat.usb_product_id, &dev->idProduct); +	g_dnl_set_serialnumber((char *)factory_dat.serial); +  	return 0;  } + +int g_dnl_get_board_bcd_device_number(int gcnum) +{ +	return factory_dat.version; +}  #endif /* defined(CONFIG_SPL_BUILD) */ diff --git a/board/siemens/common/factoryset.h b/board/siemens/common/factoryset.h index 445f3842d..4d6de10f5 100644 --- a/board/siemens/common/factoryset.h +++ b/board/siemens/common/factoryset.h @@ -18,6 +18,8 @@ struct factorysetcontainer {  #if defined(CONFIG_VIDEO)  	unsigned char disp_name[MAX_STRING_LENGTH];  #endif +	unsigned char serial[MAX_STRING_LENGTH]; +	int version;  };  int factoryset_read_eeprom(int i2c_addr); diff --git a/board/siemens/corvus/Makefile b/board/siemens/corvus/Makefile new file mode 100644 index 000000000..f3ebf77f1 --- /dev/null +++ b/board/siemens/corvus/Makefile @@ -0,0 +1,18 @@ +# +# Makefile for siemens CORVUS (AT91SAM9G45) based board +# (C) Copyright 2013 Siemens AG +# +# Based on: +# U-Boot file: board/atmel/at91sam9m10g45ek/Makefile +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# Stelian Pop <stelian@popies.net> +# Lead Tech Design <www.leadtechdesign.com> +# +# SPDX-License-Identifier:	GPL-2.0+ +# + +obj-y += board.o diff --git a/board/siemens/corvus/board.c b/board/siemens/corvus/board.c new file mode 100644 index 000000000..f1e93ef06 --- /dev/null +++ b/board/siemens/corvus/board.c @@ -0,0 +1,195 @@ +/* + * Board functions for Siemens CORVUS (AT91SAM9G45) based board + * (C) Copyright 2013 Siemens AG + * + * Based on: + * U-Boot file: board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c + * (C) Copyright 2007-2008 + * Stelian Pop <stelian@popies.net> + * Lead Tech Design <www.leadtechdesign.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/at91sam9g45_matrix.h> +#include <asm/arch/at91sam9_smc.h> +#include <asm/arch/at91_common.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/at91_rstc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/clk.h> +#include <lcd.h> +#include <atmel_lcdc.h> +#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB) +#include <net.h> +#endif +#include <netdev.h> +#include <spi.h> + +DECLARE_GLOBAL_DATA_PTR; + +#ifdef CONFIG_CMD_NAND +static void corvus_nand_hw_init(void) +{ +	struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; +	struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; +	unsigned long csa; + +	/* Enable CS3 */ +	csa = readl(&matrix->ebicsa); +	csa |= AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA; +	writel(csa, &matrix->ebicsa); + +	/* Configure SMC CS3 for NAND/SmartMedia */ +	writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) | +	       AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0), +	       &smc->cs[3].setup); +	writel(AT91_SMC_PULSE_NWE(4) | AT91_SMC_PULSE_NCS_WR(3) | +	       AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(2), +	       &smc->cs[3].pulse); +	writel(AT91_SMC_CYCLE_NWE(7) | AT91_SMC_CYCLE_NRD(4), +	       &smc->cs[3].cycle); +	writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | +	       AT91_SMC_MODE_EXNW_DISABLE | +#ifdef CONFIG_SYS_NAND_DBW_16 +	       AT91_SMC_MODE_DBW_16 | +#else /* CONFIG_SYS_NAND_DBW_8 */ +	       AT91_SMC_MODE_DBW_8 | +#endif +	       AT91_SMC_MODE_TDF_CYCLE(3), +	       &smc->cs[3].mode); + +	writel(1 << ATMEL_ID_PIOC, &pmc->pcer); + +	/* Configure RDY/BSY */ +	at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); + +	/* Enable NandFlash */ +	at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +} +#endif + +#ifdef CONFIG_CMD_USB +static void taurus_usb_hw_init(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; + +	writel(1 << ATMEL_ID_PIODE, &pmc->pcer); + +	at91_set_gpio_output(AT91_PIN_PD1, 0); +	at91_set_gpio_output(AT91_PIN_PD3, 0); +} +#endif + +#ifdef CONFIG_MACB +static void corvus_macb_hw_init(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; + +	/* Enable clock */ +	writel(1 << ATMEL_ID_EMAC, &pmc->pcer); + +	/* +	 * Disable pull-up on: +	 *      RXDV (PA15) => PHY normal mode (not Test mode) +	 *      ERX0 (PA12) => PHY ADDR0 +	 *      ERX1 (PA13) => PHY ADDR1 => PHYADDR = 0x0 +	 * +	 * PHY has internal pull-down +	 */ +	at91_set_pio_pullup(AT91_PIO_PORTA, 15, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 12, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 13, 0); + +	at91_phy_reset(); + +	/* Re-enable pull-up */ +	at91_set_pio_pullup(AT91_PIO_PORTA, 15, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 12, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 13, 1); + +	/* And the pins. */ +	at91_macb_hw_init(); +} +#endif + +int board_early_init_f(void) +{ +	at91_seriald_hw_init(); +	return 0; +} + +int board_init(void) +{ +	/* address of boot parameters */ +	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + +#ifdef CONFIG_CMD_NAND +	corvus_nand_hw_init(); +#endif +#ifdef CONFIG_ATMEL_SPI +	at91_spi0_hw_init(1 << 4); +#endif +#ifdef CONFIG_HAS_DATAFLASH +	at91_spi0_hw_init(1 << 0); +#endif +#ifdef CONFIG_MACB +	corvus_macb_hw_init(); +#endif +#ifdef CONFIG_CMD_USB +	taurus_usb_hw_init(); +#endif +	return 0; +} + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, +				    CONFIG_SYS_SDRAM_SIZE); +	return 0; +} + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; +#ifdef CONFIG_MACB +	rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC, 0x00); +#endif +	return rc; +} + +/* SPI chip select control */ +int spi_cs_is_valid(unsigned int bus, unsigned int cs) +{ +	return bus == 0 && cs < 2; +} + +void spi_cs_activate(struct spi_slave *slave) +{ +	switch (slave->cs) { +	case 1: +			at91_set_gpio_output(AT91_PIN_PB18, 0); +			break; +	case 0: +	default: +			at91_set_gpio_output(AT91_PIN_PB3, 0); +			break; +	} +} + +void spi_cs_deactivate(struct spi_slave *slave) +{ +	switch (slave->cs) { +	case 1: +			at91_set_gpio_output(AT91_PIN_PB18, 1); +			break; +	case 0: +	default: +			at91_set_gpio_output(AT91_PIN_PB3, 1); +			break; +	} +} diff --git a/board/siemens/dxr2/board.c b/board/siemens/dxr2/board.c index af9d84f12..3a5e11dc8 100644 --- a/board/siemens/dxr2/board.c +++ b/board/siemens/dxr2/board.c @@ -38,11 +38,11 @@ DECLARE_GLOBAL_DATA_PTR;  #ifdef CONFIG_SPL_BUILD  static struct dxr2_baseboard_id __attribute__((section(".data"))) settings; - +/* @303MHz-i0 */  const struct ddr3_data ddr3_default = { -	0x33524444, 0x56312e33, 0x0100, 0x0001, 0x003A, 0x008A, 0x010B, -	0x00C4, 0x0888A39B, 0x26247FDA, 0x501F821F, 0x0006, 0x61C04AB2, -	0x00000618, +	0x33524444, 0x56312e34, 0x0080, 0x0000, 0x0038, 0x003E, 0x00A4, +	0x0075, 0x0888A39B, 0x26247FDA, 0x501F821F, 0x00100206, 0x61A44A32, +	0x00000618, 0x0000014A,  };  static void set_default_ddr3_timings(void) @@ -73,6 +73,7 @@ static void print_ddr3_timings(void)  	PRINTARGS(sdram_config);  	PRINTARGS(ref_ctrl); +	PRINTARGS(ioctr_val);  }  static void print_chip_data(void) @@ -139,13 +140,9 @@ struct emif_regs dxr2_ddr3_emif_reg_data = {  };  struct ddr_data dxr2_ddr3_data = { -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  struct cmd_control dxr2_ddr3_cmd_ctrl_data = { -	.cmd0dldiff = 0, -	.cmd1dldiff = 0, -	.cmd2dldiff = 0,  };  	/* pass values from eeprom */  	dxr2_ddr3_emif_reg_data.sdram_tim1 = settings.ddr3.sdram_tim1; @@ -168,7 +165,7 @@ struct cmd_control dxr2_ddr3_cmd_ctrl_data = {  	dxr2_ddr3_cmd_ctrl_data.cmd2csratio = settings.ddr3.ddr3_sratio;  	dxr2_ddr3_cmd_ctrl_data.cmd2iclkout = settings.ddr3.iclkout; -	config_ddr(DDR_PLL_FREQ, DXR2_IOCTRL_VAL, &dxr2_ddr3_data, +	config_ddr(DDR_PLL_FREQ, settings.ddr3.ioctr_val, &dxr2_ddr3_data,  		   &dxr2_ddr3_cmd_ctrl_data, &dxr2_ddr3_emif_reg_data, 0);  } diff --git a/board/siemens/dxr2/board.h b/board/siemens/dxr2/board.h index 2be78fbab..abf543232 100644 --- a/board/siemens/dxr2/board.h +++ b/board/siemens/dxr2/board.h @@ -22,11 +22,11 @@  #define MAGIC_CHIP	0x50494843  /* Automatic generated definition */ -/* Wed, 19 Jun 2013 10:57:48 +0200 */ -/* From file: draco/ddr3-data-micron.txt */ +/* Wed, 18 Sep 2013 18:58:27 +0200 */ +/* From file: draco/ddr3-data-micron-v2.txt */  struct ddr3_data {  	unsigned int magic;			/* 0x33524444 */ -	unsigned int version;			/* 0x56312e33 */ +	unsigned int version;			/* 0x56312e34 */  	unsigned short int ddr3_sratio;		/* 0x0100 */  	unsigned short int iclkout;		/* 0x0001 */  	unsigned short int dt0rdsratio0;	/* 0x003A */ @@ -36,9 +36,10 @@ struct ddr3_data {  	unsigned int sdram_tim1;		/* 0x0888A39B */  	unsigned int sdram_tim2;		/* 0x26247FDA */  	unsigned int sdram_tim3;		/* 0x501F821F */ -	unsigned short int emif_ddr_phy_ctlr_1;	/* 0x0006 */ +	unsigned int emif_ddr_phy_ctlr_1;	/* 0x00100206 */  	unsigned int sdram_config;		/* 0x61C04AB2 */  	unsigned int ref_ctrl;			/* 0x00000618 */ +	unsigned int ioctr_val;			/* 0x0000018B */  };  struct chip_data { diff --git a/board/siemens/dxr2/mux.c b/board/siemens/dxr2/mux.c index bc80b79d7..5c22999bb 100644 --- a/board/siemens/dxr2/mux.c +++ b/board/siemens/dxr2/mux.c @@ -63,6 +63,164 @@ static struct module_pin_mux gpios_pin_mux[] = {  	{OFFSET(gpmc_ad11), (MODE(7) | PULLUDEN | RXACTIVE)},  	{OFFSET(gpmc_csn3), MODE(7) },			/* LED0 GPIO2_0 */  	{OFFSET(emu0), MODE(7)},			/* LED1 GPIO3_7 */ +	/* Triacs in HW Rev 2 */ +	{OFFSET(uart1_ctsn), MODE(7) | PULLUDDIS | RXACTIVE},	/* Y5 GPIO0_12*/ +	{OFFSET(mmc0_dat1), MODE(7) | PULLUDDIS | RXACTIVE},	/* Y3 GPIO2_28*/ +	{OFFSET(mmc0_dat2), MODE(7) | PULLUDDIS | RXACTIVE},	/* Y7 GPIO2_27*/ +	/* Triacs initial HW Rev */ +	{OFFSET(gpmc_csn1), MODE(7) | RXACTIVE | PULLUDDIS},	/* 1_30 Y0 */ +	{OFFSET(gpmc_be1n), MODE(7) | RXACTIVE | PULLUDDIS},	/* 1_28 Y1 */ +	{OFFSET(gpmc_csn2), MODE(7) | RXACTIVE | PULLUDDIS},	/* 1_31 Y2 */ +	{OFFSET(lcd_data15), MODE(7) | RXACTIVE | PULLUDDIS},	/* 0_11 Y3 */ +	{OFFSET(lcd_data14), MODE(7) | RXACTIVE | PULLUDDIS},	/* 0_10 Y4 */ +	{OFFSET(gpmc_clk), MODE(7) | RXACTIVE | PULLUDDIS},	/* 2_1  Y5 */ +	{OFFSET(emu1), MODE(7) | RXACTIVE | PULLUDDIS},		/* 3_8  Y6 */ +	{OFFSET(gpmc_ad15), MODE(7) | RXACTIVE | PULLUDDIS},	/* 1_15 Y7 */ +	/* Remaining pins that were not used in this file */ +	{OFFSET(gpmc_ad8), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_ad9), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a2), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a3), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a4), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a5), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a6), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a7), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a8), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a9), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a10), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(gpmc_a11), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data2), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data3), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data4), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data5), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data6), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data7), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data8), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_data9), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_vsync), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_hsync), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_pclk), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(lcd_ac_bias_en), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mmc0_dat3), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mmc0_dat0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mmc0_clk), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mmc0_cmd), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(spi0_sclk), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(spi0_d0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(spi0_d1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(spi0_cs0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(uart0_ctsn), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(uart0_rtsn), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(uart1_rtsn), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(uart1_rxd), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(uart1_txd), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mcasp0_aclkx), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mcasp0_fsx), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mcasp0_axr0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mcasp0_ahclkr), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mcasp0_aclkr), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mcasp0_fsr), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mcasp0_axr1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(mcasp0_ahclkx), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(xdma_event_intr0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(xdma_event_intr1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(nresetin_out), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(porz), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(nnmi), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(osc0_in), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(osc0_out), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(rsvd1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(tms), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(tdi), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(tdo), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(tck), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ntrst), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(osc1_in), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(osc1_out), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(pmic_power_en), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(rtc_porz), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(rsvd2), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ext_wakeup), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(enz_kaldo_1p8v), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb0_dm), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb0_dp), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb0_ce), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb0_id), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb0_vbus), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb0_drvvbus), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb1_dm), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb1_dp), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb1_ce), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb1_id), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb1_vbus), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(usb1_drvvbus), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_resetn), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_csn0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_cke), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_ck), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_nck), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_casn), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_rasn), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_wen), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_ba0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_ba1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_ba2), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a2), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a3), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a4), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a5), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a6), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a7), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a8), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a9), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a10), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a11), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a12), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a13), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a14), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_a15), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_odt), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d2), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d3), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d4), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d5), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d6), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d7), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d8), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d9), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d10), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d11), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d12), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d13), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d14), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_d15), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_dqm0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_dqm1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_dqs0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_dqsn0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_dqs1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_dqsn1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_vref), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_vtp), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_strben0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ddr_strben1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ain7), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ain6), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ain5), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ain4), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ain3), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ain2), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ain1), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(ain0), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(vrefp), MODE(7) | RXACTIVE | PULLUDDIS}, +	{OFFSET(vrefn), MODE(7) | RXACTIVE | PULLUDDIS},  	{-1},  }; diff --git a/board/siemens/pxm2/board.c b/board/siemens/pxm2/board.c index 2c1841f8a..0a25b4b40 100644 --- a/board/siemens/pxm2/board.c +++ b/board/siemens/pxm2/board.c @@ -58,19 +58,14 @@ struct ddr_data pxm2_ddr3_data = {  	.datawdsratio0 = 0,  	.datafwsratio0 = 0x8020080,  	.datawrsratio0 = 0x4010040, -	.datauserank0delay = 1, -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  struct cmd_control pxm2_ddr3_cmd_ctrl_data = {  	.cmd0csratio = 0x80, -	.cmd0dldiff = 0,  	.cmd0iclkout = 0,  	.cmd1csratio = 0x80, -	.cmd1dldiff = 0,  	.cmd1iclkout = 0,  	.cmd2csratio = 0x80, -	.cmd2dldiff = 0,  	.cmd2iclkout = 0,  }; @@ -413,8 +408,7 @@ static int conf_disp_pll(int m, int n)  static int board_video_init(void)  { -	/* set 300 MHz */ -	conf_disp_pll(25, 2); +	conf_disp_pll(24, 1);  	if (factory_dat.pxm50)  		da8xx_video_init(&lcd_panels[0], &lcd_cfg, lcd_cfg.bpp);  	else diff --git a/board/siemens/rut/board.c b/board/siemens/rut/board.c index 5de8fc6cb..77592dbba 100644 --- a/board/siemens/rut/board.c +++ b/board/siemens/rut/board.c @@ -63,19 +63,14 @@ struct ddr_data rut_ddr3_data = {  	.datawdsratio0 = 0x85,  	.datafwsratio0 = 0x100,  	.datawrsratio0 = 0xc1, -	.datauserank0delay = 1, -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  struct cmd_control rut_ddr3_cmd_ctrl_data = {  	.cmd0csratio = 0x40, -	.cmd0dldiff = 0,  	.cmd0iclkout = 1,  	.cmd1csratio = 0x40, -	.cmd1dldiff = 0,  	.cmd1iclkout = 1,  	.cmd2csratio = 0x40, -	.cmd2dldiff = 0,  	.cmd2iclkout = 1,  }; @@ -83,9 +78,48 @@ struct cmd_control rut_ddr3_cmd_ctrl_data = {  		   &rut_ddr3_cmd_ctrl_data, &rut_ddr3_emif_reg_data, 0);  } +static int request_and_pulse_reset(int gpio, const char *name) +{ +	int ret; +	const int delay_us = 2000; /* 2ms */ + +	ret = gpio_request(gpio, name); +	if (ret < 0) { +		printf("%s: Unable to request %s\n", __func__, name); +		goto err; +	} + +	ret = gpio_direction_output(gpio, 0); +	if (ret < 0) { +		printf("%s: Unable to set %s  as output\n", __func__, name); +		goto err_free_gpio; +	} + +	udelay(delay_us); + +	gpio_set_value(gpio, 1); + +	return 0; + +err_free_gpio: +	gpio_free(gpio); +err: +	return ret; +} + +#define GPIO_TO_PIN(bank, gpio)		(32 * (bank) + (gpio)) +#define ETH_PHY_RESET_GPIO		GPIO_TO_PIN(2, 18) +#define MAXTOUCH_RESET_GPIO		GPIO_TO_PIN(3, 18) +#define DISPLAY_RESET_GPIO		GPIO_TO_PIN(3, 19) + +#define REQUEST_AND_PULSE_RESET(N) \ +		request_and_pulse_reset(N, #N); +  static void spl_siemens_board_init(void)  { -	return; +	REQUEST_AND_PULSE_RESET(ETH_PHY_RESET_GPIO); +	REQUEST_AND_PULSE_RESET(MAXTOUCH_RESET_GPIO); +	REQUEST_AND_PULSE_RESET(DISPLAY_RESET_GPIO);  }  #endif /* if def CONFIG_SPL_BUILD */ @@ -336,7 +370,6 @@ int clk_get(int clk)  static int conf_disp_pll(int m, int n)  {  	struct cm_perpll *cmper = (struct cm_perpll *)CM_PER; -	struct cm_dpll *cmdpll = (struct cm_dpll *)CM_DPLL;  	struct dpll_params dpll_lcd = {m, n, -1, -1, -1, -1, -1};  #if defined(DISPL_PLL_SPREAD_SPECTRUM)  	struct cm_wkuppll *cmwkup = (struct cm_wkuppll *)CM_WKUP; @@ -353,8 +386,6 @@ static int conf_disp_pll(int m, int n)  		0  	};  	do_enable_clocks(clk_domains, clk_modules_explicit_en, 1); -	/* 0x44e0_0500 write lcdc pixel clock mux Linux hat hier 0 */ -	writel(0x0, &cmdpll->clklcdcpixelclk);  	do_setup_dpll(&dpll_lcd_regs, &dpll_lcd); @@ -380,10 +411,13 @@ static int enable_lcd(void)  {  	unsigned char buf[1]; +	set_gpio(BOARD_LCD_RESET, 0); +	mdelay(1);  	set_gpio(BOARD_LCD_RESET, 1); +	mdelay(1);  	/* spi lcd init */ -	kwh043st20_f01_spi_startup(1, 0, 5000000, SPI_MODE_3); +	kwh043st20_f01_spi_startup(1, 0, 5000000, SPI_MODE_0);  	/* backlight on */  	buf[0] = 0xf; @@ -418,7 +452,7 @@ static int board_video_init(void)  		printf("%s: %s not found, using default %s\n", __func__,  		       factory_dat.disp_name, lcd_panels[i].name);  	} -	conf_disp_pll(25, 2); +	conf_disp_pll(24, 1);  	da8xx_video_init(&lcd_panels[display], &lcd_cfgs[display],  			 lcd_cfgs[display].bpp); diff --git a/board/siemens/taurus/Makefile b/board/siemens/taurus/Makefile new file mode 100644 index 000000000..a26fb9214 --- /dev/null +++ b/board/siemens/taurus/Makefile @@ -0,0 +1,18 @@ +# +# Makefile for Siemens TAURUS (AT91SAM9G20) based board +# (C) Copyright 2013 Siemens AG +# +# Based on: +# U-Boot file: board/atmel/at91sam9260ek/Makefile +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# Stelian Pop <stelian@popies.net> +# Lead Tech Design <www.leadtechdesign.com> +# +# SPDX-License-Identifier:	GPL-2.0+ +# + +obj-y	+= taurus.o diff --git a/board/siemens/taurus/taurus.c b/board/siemens/taurus/taurus.c new file mode 100644 index 000000000..673b3029a --- /dev/null +++ b/board/siemens/taurus/taurus.c @@ -0,0 +1,160 @@ +/* + * Board functions for Siemens TAURUS (AT91SAM9G20) based boards + * (C) Copyright Siemens AG + * + * Based on: + * U-Boot file: board/atmel/at91sam9260ek/at91sam9260ek.c + * + * (C) Copyright 2007-2008 + * Stelian Pop <stelian@popies.net> + * Lead Tech Design <www.leadtechdesign.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/at91sam9260_matrix.h> +#include <asm/arch/at91sam9_smc.h> +#include <asm/arch/at91_common.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/at91_rstc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/at91sam9_sdramc.h> +#include <atmel_mci.h> + +#include <net.h> +#include <netdev.h> + +DECLARE_GLOBAL_DATA_PTR; + +#ifdef CONFIG_CMD_NAND +static void taurus_nand_hw_init(void) +{ +	struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; +	struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; +	unsigned long csa; + +	/* Assign CS3 to NAND/SmartMedia Interface */ +	csa = readl(&matrix->ebicsa); +	csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA; +	writel(csa, &matrix->ebicsa); + +	/* Configure SMC CS3 for NAND/SmartMedia */ +	writel(AT91_SMC_SETUP_NWE(2) | AT91_SMC_SETUP_NCS_WR(0) | +	       AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(0), +	       &smc->cs[3].setup); +	writel(AT91_SMC_PULSE_NWE(4) | AT91_SMC_PULSE_NCS_WR(3) | +	       AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(3), +	       &smc->cs[3].pulse); +	writel(AT91_SMC_CYCLE_NWE(7) | AT91_SMC_CYCLE_NRD(7), +	       &smc->cs[3].cycle); +	writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | +	       AT91_SMC_MODE_EXNW_DISABLE | +	       AT91_SMC_MODE_DBW_8 | +	       AT91_SMC_MODE_TDF_CYCLE(3), +	       &smc->cs[3].mode); + +	/* Configure RDY/BSY */ +	at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); + +	/* Enable NandFlash */ +	at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +} +#endif + +#ifdef CONFIG_MACB +static void taurus_macb_hw_init(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; + +	/* Enable EMAC clock */ +	writel(1 << ATMEL_ID_EMAC0, &pmc->pcer); + +	/* +	 * Disable pull-up on: +	 *	RXDV (PA17) => PHY normal mode (not Test mode) +	 *	ERX0 (PA14) => PHY ADDR0 +	 *	ERX1 (PA15) => PHY ADDR1 +	 *	ERX2 (PA25) => PHY ADDR2 +	 *	ERX3 (PA26) => PHY ADDR3 +	 *	ECRS (PA28) => PHY ADDR4  => PHYADDR = 0x0 +	 * +	 * PHY has internal pull-down +	 */ +	at91_set_pio_pullup(AT91_PIO_PORTA, 14, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 15, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 17, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 25, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 26, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 28, 0); + +	at91_phy_reset(); + +	at91_set_gpio_input(AT91_PIN_PA25, 1);   /* ERST tri-state */ + +	/* Re-enable pull-up */ +	at91_set_pio_pullup(AT91_PIO_PORTA, 14, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 15, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 17, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 25, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 26, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 28, 1); + +	/* Initialize EMAC=MACB hardware */ +	at91_macb_hw_init(); +} +#endif + +#ifdef CONFIG_GENERIC_ATMEL_MCI +int board_mmc_init(bd_t *bd) +{ +	at91_mci_hw_init(); + +	return atmel_mci_init((void *)ATMEL_BASE_MCI); +} +#endif + +int board_early_init_f(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; + +	/* Enable clocks for all PIOs */ +	writel((1 << ATMEL_ID_PIOA) | (1 << ATMEL_ID_PIOB) | +		(1 << ATMEL_ID_PIOC), +		&pmc->pcer); + +	return 0; +} + +int board_init(void) +{ +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + +	at91_seriald_hw_init(); +#ifdef CONFIG_CMD_NAND +	taurus_nand_hw_init(); +#endif +#ifdef CONFIG_MACB +	taurus_macb_hw_init(); +#endif + +	return 0; +} + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, +				    CONFIG_SYS_SDRAM_SIZE); +	return 0; +} + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; +#ifdef CONFIG_MACB +	rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, 0x00); +#endif +	return rc; +} diff --git a/board/taskit/stamp9g20/stamp9g20.c b/board/taskit/stamp9g20/stamp9g20.c index 704a63bad..27cdf77f0 100644 --- a/board/taskit/stamp9g20/stamp9g20.c +++ b/board/taskit/stamp9g20/stamp9g20.c @@ -19,7 +19,6 @@  #include <asm/arch/at91sam9_smc.h>  #include <asm/arch/at91_common.h>  #include <asm/arch/at91_pmc.h> -#include <asm/arch/at91_rstc.h>  #include <asm/arch/gpio.h>  #include <watchdog.h> @@ -67,8 +66,6 @@ static void stamp9G20_nand_hw_init(void)  static void stamp9G20_macb_hw_init(void)  {  	struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; -	struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; -	unsigned long erstl;  	/* Enable the PHY Chip via PA26 on the Stamp 2 Adaptor */  	at91_set_gpio_output(AT91_PIN_PA26, 0); @@ -91,33 +88,7 @@ static void stamp9G20_macb_hw_init(void)  		pin_to_mask(AT91_PIN_PA28),  		&pioa->pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | (AT91_RSTC_MR_ERSTL(13) & -				~AT91_RSTC_MR_URSTEN), &rstc->mr); -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end of hardware reset */ -	unsigned long start = get_timer(0); -	unsigned long timeout = 1000; /* 1000ms */ - -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) { - -		/* avoid shutdown by watchdog */ -		WATCHDOG_RESET(); -		mdelay(10); - -		/* timeout for not getting stuck in an endless loop */ -		if (get_timer(start) >= timeout) { -			puts("*** ERROR: Timeout waiting for PHY reset!\n"); -			break; -		}; -	}; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, -		&rstc->mr); +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(pin_to_mask(AT91_PIN_PA14) | diff --git a/board/ti/am335x/board.c b/board/ti/am335x/board.c index db225ce1d..33693e4ea 100644 --- a/board/ti/am335x/board.c +++ b/board/ti/am335x/board.c @@ -107,21 +107,16 @@ static const struct ddr_data ddr2_data = {  			  (MT47H128M16RT25E_PHY_WR_DATA<<20) |  			  (MT47H128M16RT25E_PHY_WR_DATA<<10) |  			  (MT47H128M16RT25E_PHY_WR_DATA<<0)), -	.datauserank0delay = MT47H128M16RT25E_PHY_RANK0_DELAY, -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  static const struct cmd_control ddr2_cmd_ctrl_data = {  	.cmd0csratio = MT47H128M16RT25E_RATIO, -	.cmd0dldiff = MT47H128M16RT25E_DLL_LOCK_DIFF,  	.cmd0iclkout = MT47H128M16RT25E_INVERT_CLKOUT,  	.cmd1csratio = MT47H128M16RT25E_RATIO, -	.cmd1dldiff = MT47H128M16RT25E_DLL_LOCK_DIFF,  	.cmd1iclkout = MT47H128M16RT25E_INVERT_CLKOUT,  	.cmd2csratio = MT47H128M16RT25E_RATIO, -	.cmd2dldiff = MT47H128M16RT25E_DLL_LOCK_DIFF,  	.cmd2iclkout = MT47H128M16RT25E_INVERT_CLKOUT,  }; @@ -139,7 +134,6 @@ static const struct ddr_data ddr3_data = {  	.datawdsratio0 = MT41J128MJT125_WR_DQS,  	.datafwsratio0 = MT41J128MJT125_PHY_FIFO_WE,  	.datawrsratio0 = MT41J128MJT125_PHY_WR_DATA, -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  static const struct ddr_data ddr3_beagleblack_data = { @@ -147,7 +141,6 @@ static const struct ddr_data ddr3_beagleblack_data = {  	.datawdsratio0 = MT41K256M16HA125E_WR_DQS,  	.datafwsratio0 = MT41K256M16HA125E_PHY_FIFO_WE,  	.datawrsratio0 = MT41K256M16HA125E_PHY_WR_DATA, -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  static const struct ddr_data ddr3_evm_data = { @@ -155,48 +148,38 @@ static const struct ddr_data ddr3_evm_data = {  	.datawdsratio0 = MT41J512M8RH125_WR_DQS,  	.datafwsratio0 = MT41J512M8RH125_PHY_FIFO_WE,  	.datawrsratio0 = MT41J512M8RH125_PHY_WR_DATA, -	.datadldiff0 = PHY_DLL_LOCK_DIFF,  };  static const struct cmd_control ddr3_cmd_ctrl_data = {  	.cmd0csratio = MT41J128MJT125_RATIO, -	.cmd0dldiff = MT41J128MJT125_DLL_LOCK_DIFF,  	.cmd0iclkout = MT41J128MJT125_INVERT_CLKOUT,  	.cmd1csratio = MT41J128MJT125_RATIO, -	.cmd1dldiff = MT41J128MJT125_DLL_LOCK_DIFF,  	.cmd1iclkout = MT41J128MJT125_INVERT_CLKOUT,  	.cmd2csratio = MT41J128MJT125_RATIO, -	.cmd2dldiff = MT41J128MJT125_DLL_LOCK_DIFF,  	.cmd2iclkout = MT41J128MJT125_INVERT_CLKOUT,  };  static const struct cmd_control ddr3_beagleblack_cmd_ctrl_data = {  	.cmd0csratio = MT41K256M16HA125E_RATIO, -	.cmd0dldiff = MT41K256M16HA125E_DLL_LOCK_DIFF,  	.cmd0iclkout = MT41K256M16HA125E_INVERT_CLKOUT,  	.cmd1csratio = MT41K256M16HA125E_RATIO, -	.cmd1dldiff = MT41K256M16HA125E_DLL_LOCK_DIFF,  	.cmd1iclkout = MT41K256M16HA125E_INVERT_CLKOUT,  	.cmd2csratio = MT41K256M16HA125E_RATIO, -	.cmd2dldiff = MT41K256M16HA125E_DLL_LOCK_DIFF,  	.cmd2iclkout = MT41K256M16HA125E_INVERT_CLKOUT,  };  static const struct cmd_control ddr3_evm_cmd_ctrl_data = {  	.cmd0csratio = MT41J512M8RH125_RATIO, -	.cmd0dldiff = MT41J512M8RH125_DLL_LOCK_DIFF,  	.cmd0iclkout = MT41J512M8RH125_INVERT_CLKOUT,  	.cmd1csratio = MT41J512M8RH125_RATIO, -	.cmd1dldiff = MT41J512M8RH125_DLL_LOCK_DIFF,  	.cmd1iclkout = MT41J512M8RH125_INVERT_CLKOUT,  	.cmd2csratio = MT41J512M8RH125_RATIO, -	.cmd2dldiff = MT41J512M8RH125_DLL_LOCK_DIFF,  	.cmd2iclkout = MT41J512M8RH125_INVERT_CLKOUT,  }; diff --git a/board/ti/am335x/u-boot.lds b/board/ti/am335x/u-boot.lds index e77a501f5..6a734b30a 100644 --- a/board/ti/am335x/u-boot.lds +++ b/board/ti/am335x/u-boot.lds @@ -108,10 +108,13 @@ SECTIONS  		KEEP(*(.__bss_end));  	} -	/DISCARD/ : { *(.dynsym) } -	/DISCARD/ : { *(.dynstr*) } -	/DISCARD/ : { *(.dynamic*) } -	/DISCARD/ : { *(.plt*) } -	/DISCARD/ : { *(.interp*) } -	/DISCARD/ : { *(.gnu*) } +	.dynsym _end : { *(.dynsym) } +	.dynbss : { *(.dynbss) } +	.dynstr : { *(.dynstr*) } +	.dynamic : { *(.dynamic*) } +	.hash : { *(.hash*) } +	.plt : { *(.plt*) } +	.interp : { *(.interp*) } +	.gnu : { *(.gnu*) } +	.ARM.exidx : { *(.ARM.exidx*) }  } diff --git a/board/ti/dra7xx/evm.c b/board/ti/dra7xx/evm.c index 9657c75f2..9ae88c57a 100644 --- a/board/ti/dra7xx/evm.c +++ b/board/ti/dra7xx/evm.c @@ -14,6 +14,7 @@  #include <palmas.h>  #include <asm/arch/sys_proto.h>  #include <asm/arch/mmc_host_def.h> +#include <asm/arch/sata.h>  #include "mux_data.h" @@ -77,6 +78,12 @@ int board_init(void)  	return 0;  } +int board_late_init(void) +{ +	omap_sata_init(); +	return 0; +} +  /**   * @brief misc_init_r - Configure EVM board specific configurations   * such as power configurations, ethernet initialization as phase2 of diff --git a/board/ti/omap5_uevm/evm.c b/board/ti/omap5_uevm/evm.c index bb3a699cf..af854dac1 100644 --- a/board/ti/omap5_uevm/evm.c +++ b/board/ti/omap5_uevm/evm.c @@ -20,6 +20,7 @@  #include <asm/arch/clock.h>  #include <asm/arch/ehci.h>  #include <asm/ehci-omap.h> +#include <asm/arch/sata.h>  #define DIE_ID_REG_BASE     (OMAP54XX_L4_CORE_BASE + 0x2000)  #define DIE_ID_REG_OFFSET	0x200 @@ -67,6 +68,12 @@ int board_init(void)  	return 0;  } +int board_late_init(void) +{ +	omap_sata_init(); +	return 0; +} +  int board_eth_init(bd_t *bis)  {  	return 0; diff --git a/board/ti/omap730p2/Makefile b/board/ti/omap730p2/Makefile deleted file mode 100644 index 8242f3d69..000000000 --- a/board/ti/omap730p2/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# -# (C) Copyright 2000-2006 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier:	GPL-2.0+ -# - -obj-y	:= omap730p2.o flash.o -obj-y	+= lowlevel_init.o diff --git a/board/ti/omap730p2/README.omap730p2 b/board/ti/omap730p2/README.omap730p2 deleted file mode 100644 index 7c7091612..000000000 --- a/board/ti/omap730p2/README.omap730p2 +++ /dev/null @@ -1,91 +0,0 @@ - -		     u-boot for the TI OMAP730 Perseus2 - -		      Dave Peverley, MPC-Data Limited -			 http://www.mpc-data.co.uk - - -Overview : - - As the OMAP730 is similar to the OMAP1610 in many ways, this port was based -on the u-boot port to the OMAP1610 Innovator. Supported features are : - -  - Serial terminal support -  - Onboard NOR Flash -  - Ethernet via the seperate debug board -  - Tested on Rev4 and Rev5 boards - - It has also been tested to work correctly when built with a 'standard' GCC -3.2.1 cross-compiler as well as Montavista Linux CEE 3.1's toolchain. - - -Hardware Configuration : - - The main dips on the P2 board should be set to 2,3,7 and 9 on with all -others off. On the debug board, dips 1 and 7 should be on with the rest off. -The serial console has been set up to run from the DB9 connector on the -P2 board at 115200 baud, 8 data bits, no stop bits, 1 parity bit. - - It should be noted that the P2 board has NOR flash that is addressable via -either CS0 or CS3. This mode can be changed via DIP9 on the P2 board. - - -Installing u-boot for the P2 : - - You can simply build u-boot for the Perseus by following the instructions -in the main readme file. The target configuration is "omap730p2_config". -Once u-boot has been built, you should strip the executable so it can be -loaded via CCS (which cant cope with the symbols in the ELF binary) : -  $ cp u-boot u-boot.out -  $ arm-linux-strip u-boot.out - - The method we've used for installing u-boot the first time on a P2 is -as follows : - -1) Configure TI Code Composer Studio to connect to the P2 board via JTAG -   as described in the Users Guide. - -2) Set up the P2 to boot from CS3, and connect with CCS. Reset the CPU -   and run the "init_mmu" GEL script. - -3) Use the "Load Program" option to send the u-boot.out file to the P2 and -   run. - - At this point, u-boot should run and you will see the boot menu on your -serial terminal. You can then load the u-boot image to memory : - -  # loadb 0x10000000 - - Send the "u-boot.bin" binary via the serial using Kermit. Once loaded -you can self-flash u-boot : - -  # protect off 1:0 -  # erase 1:0 -  # cp.b 0x10000000 0x0 0x20000 - - You should now be able to reset the board and run u-boot from flash. - - -Alternative flash option : - - Sometimes, if you've been silly, you can get the board into a state where -whats in flash has upset the board so much that you can no longer connect -to the P2 via JTAG. However, you can set DIP9 to off to swap the boot mode -of the P2 so that you boot from RAM instead of NOR flash. This moves NOR -flash up to 0x0C000000. You can build a special version of u-boot to -utilise this by the following config : - -  $ make omap730p2_cs0boot_config - - If you load this up via CCS it will detect flash at its alternate location -and allow you to programme your u-boot image (which, remember must be built -for CS3 boot!) Once you do this, you can revert to CS3 boot and it will work -fine again. - - -Errata : - -1) It's been observed that sometimes the tftp transfer of kernels to the -   board can have checksum errors or stall. This appears to be an issue -   with the lan91c96.c driver, and can normally be worked around by -   resetting the board and trying again. diff --git a/board/ti/omap730p2/config.mk b/board/ti/omap730p2/config.mk deleted file mode 100644 index 86188204e..000000000 --- a/board/ti/omap730p2/config.mk +++ /dev/null @@ -1,25 +0,0 @@ -# -# (C) Copyright 2002 -# Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> -# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch> -# -# (C) Copyright 2003 -# Texas Instruments, <www.ti.com> -# Kshitij Gupta <Kshitij@ti.com> -# -# TI Perseus 2 board with OMAP720 (ARM925EJS) cpu -# see http://www.ti.com/ for more information on Texas Instruments -# -# Innovator has 1 bank of 256 MB SDRAM -# Physical Address: -# 1000'0000 to 2000'0000 -# -# -# Linux-Kernel is expected to be at 1000'8000, entry 1000'8000 -# (mem base + reserved) -# -# we load ourself to 1108'0000 -# -# - -CONFIG_SYS_TEXT_BASE = 0x11080000 diff --git a/board/ti/omap730p2/flash.c b/board/ti/omap730p2/flash.c deleted file mode 100644 index 56f981c47..000000000 --- a/board/ti/omap730p2/flash.c +++ /dev/null @@ -1,463 +0,0 @@ -/* - * (C) Copyright 2001 - * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net - * - * (C) Copyright 2001 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * (C) Copyright 2003 - * Texas Instruments, <www.ti.com> - * Kshitij Gupta <Kshitij@ti.com> - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#include <common.h> -#include <linux/byteorder/swab.h> - -#define PHYS_FLASH_SECT_SIZE	0x00020000	/* 256 KB sectors (x2) */ -flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];	/* info for FLASH chips    */ - -/* Board support for 1 or 2 flash devices */ -#undef FLASH_PORT_WIDTH32 -#define FLASH_PORT_WIDTH16 - -#ifdef FLASH_PORT_WIDTH16 -#define FLASH_PORT_WIDTH		ushort -#define FLASH_PORT_WIDTHV		vu_short -#define SWAP(x)			__swab16(x) -#else -#define FLASH_PORT_WIDTH		ulong -#define FLASH_PORT_WIDTHV		vu_long -#define SWAP(x)			__swab32(x) -#endif - -#define FPW	FLASH_PORT_WIDTH -#define FPWV	FLASH_PORT_WIDTHV - -#define mb() __asm__ __volatile__ ("" : : : "memory") - - -/* Flash Organization Structure */ -typedef struct OrgDef { -	unsigned int sector_number; -	unsigned int sector_size; -} OrgDef; - - -/* Flash Organizations */ -OrgDef OrgIntel_28F256L18T[] = { -	{4, 32 * 1024},				/* 4 * 32kBytes sectors */ -	{255, 128 * 1024},			/* 255 * 128kBytes sectors */ -}; - - -/*----------------------------------------------------------------------- - * Functions - */ -unsigned long flash_init (void); -static ulong flash_get_size (FPW * addr, flash_info_t * info); -static int write_data (flash_info_t * info, ulong dest, FPW data); -static void flash_get_offsets (ulong base, flash_info_t * info); -void inline spin_wheel (void); -void flash_print_info (flash_info_t * info); -void flash_unprotect_sectors (FPWV * addr); -int flash_erase (flash_info_t * info, int s_first, int s_last); -int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt); - -/*----------------------------------------------------------------------- - */ - -unsigned long flash_init (void) -{ -	int i; -	ulong size = 0; -	for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) { -		switch (i) { -		case 0: -			flash_get_size ((FPW *) PHYS_FLASH_1, &flash_info[i]); -			flash_get_offsets (PHYS_FLASH_1, &flash_info[i]); -			break; -		default: -			panic ("configured too many flash banks!\n"); -			break; -		} -		size += flash_info[i].size; -	} - -	/* Protect monitor and environment sectors -	 */ -	flash_protect (FLAG_PROTECT_SET, -			CONFIG_SYS_FLASH_BASE, -			CONFIG_SYS_FLASH_BASE + monitor_flash_len - 1, &flash_info[0]); - -	flash_protect (FLAG_PROTECT_SET, -			CONFIG_ENV_ADDR, -			CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1, &flash_info[0]); - -	return size; -} - -/*----------------------------------------------------------------------- - */ -static void flash_get_offsets (ulong base, flash_info_t * info) -{ -	int i; - -	if (info->flash_id == FLASH_UNKNOWN) { -		return; -	} - -	if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) { -		for (i = 0; i < info->sector_count; i++) { -			if (i > 255) { -				info->start[i] = base + (i * 0x8000); -				info->protect[i] = 0; -			} else { -				info->start[i] = base + -						(i * PHYS_FLASH_SECT_SIZE); -				info->protect[i] = 0; -			} -		} -	} -} - -/*----------------------------------------------------------------------- - */ -void flash_print_info (flash_info_t * info) -{ -	int i; - -	if (info->flash_id == FLASH_UNKNOWN) { -		printf ("missing or unknown FLASH type\n"); -		return; -	} - -	switch (info->flash_id & FLASH_VENDMASK) { -	case FLASH_MAN_INTEL: -		printf ("INTEL "); -		break; -	default: -		printf ("Unknown Vendor "); -		break; -	} - -	switch (info->flash_id & FLASH_TYPEMASK) { -	case FLASH_28F256L18T: -		printf ("FLASH 28F256L18T\n"); -		break; -	default: -		printf ("Unknown Chip Type\n"); -		break; -	} - -	printf ("  Size: %ld MB in %d Sectors\n", -			info->size >> 20, info->sector_count); - -	printf ("  Sector Start Addresses:"); -	for (i = 0; i < info->sector_count; ++i) { -		if ((i % 5) == 0) -			printf ("\n   "); -		printf (" %08lX%s", -			info->start[i], info->protect[i] ? " (RO)" : "     "); -	} -	printf ("\n"); -	return; -} - -/* - * The following code cannot be run from FLASH! - */ -static ulong flash_get_size (FPW * addr, flash_info_t * info) -{ -	volatile FPW value; - -	/* Write auto select command: read Manufacturer ID */ -	addr[0x5555] = (FPW) 0x00AA00AA; -	addr[0x2AAA] = (FPW) 0x00550055; -	addr[0x5555] = (FPW) 0x00900090; - -	mb (); -	value = addr[0]; - -	switch (value) { - -	case (FPW) INTEL_MANUFACT: -		info->flash_id = FLASH_MAN_INTEL; -		break; - -	default: -		info->flash_id = FLASH_UNKNOWN; -		info->sector_count = 0; -		info->size = 0; -		addr[0] = (FPW) 0x00FF00FF;	/* restore read mode */ -		return (0);		/* no or unknown flash  */ -	} - -	mb (); -	value = addr[1];	/* device ID        */ -	switch (value) { - -	case (FPW) (INTEL_ID_28F256L18T): -		info->flash_id += FLASH_28F256L18T; -		info->sector_count = 259; -		info->size = 0x02000000; -		break;			/* => 32 MB     */ - -	default: -		info->flash_id = FLASH_UNKNOWN; -		break; -	} - -	if (info->sector_count > CONFIG_SYS_MAX_FLASH_SECT) { -		printf ("** ERROR: sector count %d > max (%d) **\n", -				info->sector_count, CONFIG_SYS_MAX_FLASH_SECT); -		info->sector_count = CONFIG_SYS_MAX_FLASH_SECT; -	} - -	addr[0] = (FPW) 0x00FF00FF;	/* restore read mode */ - -	return (info->size); -} - - -/* unprotects a sector for write and erase - * on some intel parts, this unprotects the entire chip, but it - * wont hurt to call this additional times per sector... - */ -void flash_unprotect_sectors (FPWV * addr) -{ -#define PD_FINTEL_WSMS_READY_MASK    0x0080 - -	*addr = (FPW) 0x00500050;	/* clear status register */ - -	/* this sends the clear lock bit command */ -	*addr = (FPW) 0x00600060; -	*addr = (FPW) 0x00D000D0; -} - - -/*----------------------------------------------------------------------- - */ - -int flash_erase (flash_info_t * info, int s_first, int s_last) -{ -	int flag, prot, sect; -	ulong type, start; -	int rcode = 0; - -	if ((s_first < 0) || (s_first > s_last)) { -		if (info->flash_id == FLASH_UNKNOWN) { -			printf ("- missing\n"); -		} else { -			printf ("- no sectors to erase\n"); -		} -		return 1; -	} - -	type = (info->flash_id & FLASH_VENDMASK); -	if ((type != FLASH_MAN_INTEL)) { -		printf ("Can't erase unknown flash type %08lx - aborted\n", -				info->flash_id); -		return 1; -	} - -	prot = 0; -	for (sect = s_first; sect <= s_last; ++sect) { -		if (info->protect[sect]) { -			prot++; -		} -	} - -	if (prot) { -		printf ("- Warning: %d protected sectors will not be erased!\n", -				prot); -	} else { -		printf ("\n"); -	} - -	/* Disable interrupts which might cause a timeout here */ -	flag = disable_interrupts (); - -	/* Start erase on unprotected sectors */ -	for (sect = s_first; sect <= s_last; sect++) { -		if (info->protect[sect] == 0) {	/* not protected */ -			FPWV *addr = (FPWV *) (info->start[sect]); -			FPW status; - -			printf ("Erasing sector %2d ... ", sect); - -			flash_unprotect_sectors (addr); - -			/* arm simple, non interrupt dependent timer */ -			start = get_timer(0); - -			*addr = (FPW) 0x00500050;/* clear status register */ -			*addr = (FPW) 0x00200020;/* erase setup */ -			*addr = (FPW) 0x00D000D0;/* erase confirm */ - -			while (((status = -				*addr) & (FPW) 0x00800080) != -				(FPW) 0x00800080) { -					if (get_timer(start) > -					CONFIG_SYS_FLASH_ERASE_TOUT) { -					printf ("Timeout\n"); -					/* suspend erase     */ -					*addr = (FPW) 0x00B000B0; -					/* reset to read mode */ -					*addr = (FPW) 0x00FF00FF; -					rcode = 1; -					break; -				} -			} - -			/* clear status register cmd.   */ -			*addr = (FPW) 0x00500050; -			*addr = (FPW) 0x00FF00FF;/* resest to read mode */ -			printf (" done\n"); -		} -	} - -	if (flag) -		enable_interrupts(); - -	return rcode; -} - -/*----------------------------------------------------------------------- - * Copy memory to flash, returns: - * 0 - OK - * 1 - write timeout - * 2 - Flash not erased - * 4 - Flash not identified - */ - -int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt) -{ -	ulong cp, wp; -	FPW data; -	int count, i, l, rc, port_width; - -	if (info->flash_id == FLASH_UNKNOWN) { -		return 4; -	} -/* get lower word aligned address */ -#ifdef FLASH_PORT_WIDTH16 -	wp = (addr & ~1); -	port_width = 2; -#else -	wp = (addr & ~3); -	port_width = 4; -#endif - -	/* -	 * handle unaligned start bytes -	 */ -	if ((l = addr - wp) != 0) { -		data = 0; -		for (i = 0, cp = wp; i < l; ++i, ++cp) { -			data = (data << 8) | (*(uchar *) cp); -		} -		for (; i < port_width && cnt > 0; ++i) { -			data = (data << 8) | *src++; -			--cnt; -			++cp; -		} -		for (; cnt == 0 && i < port_width; ++i, ++cp) { -			data = (data << 8) | (*(uchar *) cp); -		} - -		if ((rc = write_data (info, wp, SWAP (data))) != 0) { -			return (rc); -		} -		wp += port_width; -	} - -	/* -	 * handle word aligned part -	 */ -	count = 0; -	while (cnt >= port_width) { -		data = 0; -		for (i = 0; i < port_width; ++i) { -			data = (data << 8) | *src++; -		} -		if ((rc = write_data (info, wp, SWAP (data))) != 0) { -			return (rc); -		} -		wp += port_width; -		cnt -= port_width; -		if (count++ > 0x800) { -			spin_wheel (); -			count = 0; -		} -	} - -	if (cnt == 0) { -		return (0); -	} - -	/* -	 * handle unaligned tail bytes -	 */ -	data = 0; -	for (i = 0, cp = wp; i < port_width && cnt > 0; ++i, ++cp) { -		data = (data << 8) | *src++; -		--cnt; -	} -	for (; i < port_width; ++i, ++cp) { -		data = (data << 8) | (*(uchar *) cp); -	} - -	return (write_data (info, wp, SWAP (data))); -} - -/*----------------------------------------------------------------------- - * Write a word or halfword to Flash, returns: - * 0 - OK - * 1 - write timeout - * 2 - Flash not erased - */ -static int write_data (flash_info_t * info, ulong dest, FPW data) -{ -	FPWV *addr = (FPWV *) dest; -	ulong status; -	int flag, rc = 0; -	ulong start; - -	/* Check if Flash is (sufficiently) erased */ -	if ((*addr & data) != data) { -		printf ("not erased at %08lx (%x)\n", (ulong) addr, *addr); -		return (2); -	} -	flash_unprotect_sectors (addr); -	/* Disable interrupts which might cause a timeout here */ -	flag = disable_interrupts (); -	*addr = (FPW) 0x00400040;	/* write setup */ -	*addr = data; - -	/* arm simple, non interrupt dependent timer */ -	start = get_timer(0); - -	/* wait while polling the status register */ -	while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) { -		if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) { -			rc = 1; -			goto done; -		} -	} -done: -	*addr = (FPW)0x00FF00FF;	/* restore read mode */ -	if (flag) -		enable_interrupts(); -	return rc; -} - -void inline spin_wheel (void) -{ -	static int p = 0; -	static char w[] = "\\/-"; - -	printf ("\010%c", w[p]); -	(++p == 3) ? (p = 0) : 0; -} diff --git a/board/ti/omap730p2/lowlevel_init.S b/board/ti/omap730p2/lowlevel_init.S deleted file mode 100644 index 795c49537..000000000 --- a/board/ti/omap730p2/lowlevel_init.S +++ /dev/null @@ -1,379 +0,0 @@ -/* - * Board specific setup info - * - * (C) Copyright 2003-2004 - * - * Texas Instruments, <www.ti.com> - * Kshitij Gupta <Kshitij@ti.com> - * - * Modified for OMAP 1610 H2 board by Nishant Kamat, Jan 2004 - * - * Modified for OMAP730 P2 Board by Dave Peverley, MPC-Data Limited - * (http://www.mpc-data.co.uk) - * - * TODO : Tidy up and change to use system register defines - *        from omap730.h where possible. - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#include <config.h> -#include <version.h> - -#if defined(CONFIG_OMAP730) -#include <./configs/omap730.h> -#endif - -_TEXT_BASE: -	.word	CONFIG_SYS_TEXT_BASE	/* sdram load addr from config.mk */ - -.globl lowlevel_init -lowlevel_init: -	/* Save callers address in r11 - r11 must never be modified */ -	mov r11, lr - -	/*------------------------------------------------------* -	 *mask all IRQs by setting all bits in the INTMR default* -	 *------------------------------------------------------*/ -	mov	r1,	#0xffffffff -	ldr	r0,	=REG_IHL1_MIR -	str	r1,	[r0] -	ldr	r0,	=REG_IHL2_MIR -	str	r1,	[r0] - -	/*------------------------------------------------------* -	 * Set up ARM CLM registers (IDLECT1)                   * -	 *------------------------------------------------------*/ -	ldr	r0,	REG_ARM_IDLECT1 -	ldr	r1,	VAL_ARM_IDLECT1 -	str	r1,	[r0] - -	/*------------------------------------------------------* -	 * Set up ARM CLM registers (IDLECT2)		        * -	 *------------------------------------------------------*/ -	ldr	r0,	REG_ARM_IDLECT2 -	ldr	r1,	VAL_ARM_IDLECT2 -	str	r1,	[r0] - -	/*------------------------------------------------------* -	 * Set up ARM CLM registers (IDLECT3)		        * -	 *------------------------------------------------------*/ -	ldr	r0,	REG_ARM_IDLECT3 -	ldr	r1,	VAL_ARM_IDLECT3 -	str	r1,	[r0] - - -	mov	r1,	#0x01		/* PER_EN bit */ -	ldr	r0,	REG_ARM_RSTCT2 -	strh	r1,	[r0]		/* CLKM; Peripheral reset. */ - -	/* Set CLKM to Sync-Scalable	*/ -	/* I supposedly need to enable the dsp clock before switching */ -	mov	r1,	#0x1000 -	ldr	r0,	REG_ARM_SYSST -	strh	r1,	[r0] -	mov	r0,	#0x400 -1: -	subs	r0,	r0,	#0x1	/* wait for any bubbles to finish */ -	bne	1b -	ldr	r1,	VAL_ARM_CKCTL -	ldr	r0,	REG_ARM_CKCTL -	strh	r1,	[r0] - -	/* a few nops to let settle */ -	nop -	nop -	nop -	nop -	nop -	nop -	nop -	nop -	nop -	nop - -	/* setup DPLL 1 */ -	/* Ramp up the clock to 96Mhz */ -	ldr	r1,	VAL_DPLL1_CTL -	ldr	r0,	REG_DPLL1_CTL -	strh	r1,	[r0] -	ands	r1,	r1,	#0x10	/* Check if PLL is enabled. */ -	beq	lock_end	/* Do not look for lock if BYPASS selected */ -2: -	ldrh	r1,	[r0] -	ands	r1,	r1,	#0x01	/*	Check the LOCK bit.*/ -	beq 2b			/*	loop until bit goes hi. */ -lock_end: - -	/*------------------------------------------------------* -	 * Turn off the watchdog during init...			* -	 *------------------------------------------------------*/ -	ldr	r0,	REG_WATCHDOG -	ldr	r1,	WATCHDOG_VAL1 -	str	r1,	[r0] -	ldr	r1,	WATCHDOG_VAL2 -	str	r1,	[r0] -	ldr	r0,	REG_WSPRDOG -	ldr	r1,	WSPRDOG_VAL1 -	str	r1,	[r0] -	ldr	r0,	REG_WWPSDOG - -watch1Wait: -	ldr	r1,	[r0] -	tst	r1,	#0x10 -	bne	watch1Wait - -	ldr	r0,	REG_WSPRDOG -	ldr	r1,	WSPRDOG_VAL2 -	str	r1,	[r0] -	ldr	r0,	REG_WWPSDOG -watch2Wait: -	ldr	r1,	[r0] -	tst	r1,	#0x10 -	bne	watch2Wait - -	/* Set memory timings corresponding to the new clock speed */ - -	/* Check execution location to determine current execution location -	 * and branch to appropriate initialization code. -	 */ -	/* Compare physical SDRAM base & current execution location. */ -	and     r0, pc, #0xF0000000 -	/* Compare. */ -	cmp     r0, #0 -	/* Skip over EMIF-fast initialization if running from SDRAM. */ -	bne	skip_sdram - -	/* -	* Delay for SDRAM initialization. -	*/ -	mov	r3,	#0x1800		/* value should be checked */ -3: -	subs	r3,	r3,	#0x1	/* Decrement count */ -	bne	3b - -	ldr	r0,	REG_SDRAM_CONFIG -	ldr	r1,	SDRAM_CONFIG_VAL -	str	r1,	[r0] - -	ldr	r0,	REG_SDRAM_MRS_LEGACY -	ldr	r1,	SDRAM_MRS_VAL -	str	r1,	[r0] - -skip_sdram: - -common_tc: -	/* slow interface */ -	ldr	r1,	VAL_TC_EMIFS_CS0_CONFIG -	ldr	r0,	REG_TC_EMIFS_CS0_CONFIG -	str	r1,	[r0] /* Chip Select 0 */ - -	ldr	r1,	VAL_TC_EMIFS_CS1_CONFIG -	ldr	r0,	REG_TC_EMIFS_CS1_CONFIG -	str	r1,	[r0] /* Chip Select 1 */ -	ldr	r1,	VAL_TC_EMIFS_CS2_CONFIG -	ldr	r0,	REG_TC_EMIFS_CS2_CONFIG -	str	r1,	[r0] /* Chip Select 2 */ -	ldr	r1,	VAL_TC_EMIFS_CS3_CONFIG -	ldr	r0,	REG_TC_EMIFS_CS3_CONFIG -	str	r1,	[r0] /* Chip Select 3 */ - -	/* 48MHz clock request for UART1 */ -	ldr	r1,	PERSEUS2_CONFIG_BASE -	ldrh	r0,	[r1, #CONFIG_PCC_CONF] -	orr	r0,	r0, #CONF_MOD_UART1_CLK_MODE_R -	strh	r0,	[r1, #CONFIG_PCC_CONF] - -	/* Initialize public and private rheas -	 *  - set access factor 2 on both rhea / strobe -	 *  - disable write buffer on strb0, enable write buffer on strb1 -	 */ - -	ldr	R0,	REG_RHEA_PUB_CTL -	ldr	R1,	REG_RHEA_PRIV_CTL -	ldr	R2,	VAL_RHEA_CTL -	strh	R2,	[R0] -	strh	R2,	[R1] -	mov	R3,	#2          /* disable write buffer on strb0, enable write buffer on strb1 */ -	strh	R3,	[R0, #0x08]	/* arm rhea control reg */ -	strh	R3,	[R1, #0x08] - -	/* enable IRQ and FIQ */ - -	mrs	r4,	CPSR -	bic	r4,	r4, #IRQ_MASK -	bic	r4,	r4, #FIQ_MASK -	msr	CPSR,	r4 - -	/* set TAP CONF to TRI EMULATION */ - -	ldr	r1,	[r0, #CONFIG_MODE2] -	bic	r1,	r1, #0x18 -	orr	r1,	r1, #0x10 -	str	r1,	[r0, #CONFIG_MODE2] - -	/* set tdbgen to 1 */ - -	ldr	r0,	PERSEUS2_CONFIG_BASE -	ldr	r1,	[r0, #CONFIG_MODE1] -	mov	r2,	#0x10000 -	orr	r1,	r1, r2 -	str	r1,	[r0, #CONFIG_MODE1] - -#ifdef CONFIG_P2_OMAP1610 -	/* inserting additional 2 clock cycle hold time for LAN */ -	ldr     r0,     REG_TC_EMIFS_CS1_ADVANCED -	ldr	r1,     VAL_TC_EMIFS_CS1_ADVANCED -	str     r1,     [r0] -#endif -	/* Start MPU Timer 1 */ -	ldr	r0,	REG_MPU_LOAD_TIMER -	ldr	r1,	VAL_MPU_LOAD_TIMER -	str	r1,	[r0] - -	ldr	r0,	REG_MPU_CNTL_TIMER -	ldr	r1,	VAL_MPU_CNTL_TIMER -	str	r1,	[r0] - -	/* back to arch calling code */ -	mov	pc,	r11 - -	/* the literal pools origin */ -	.ltorg - -REG_TC_EMIFS_CONFIG:		/* 32 bits */ -	.word 0xfffecc0c -REG_TC_EMIFS_CS0_CONFIG:	/* 32 bits */ -	.word 0xfffecc10 -REG_TC_EMIFS_CS1_CONFIG:	/* 32 bits */ -	.word 0xfffecc14 -REG_TC_EMIFS_CS2_CONFIG:	/* 32 bits */ -	.word 0xfffecc18 -REG_TC_EMIFS_CS3_CONFIG:	/* 32 bits */ -	.word 0xfffecc1c - -#ifdef CONFIG_P2_OMAP730 -REG_TC_EMIFS_CS1_ADVANCED:	/* 32 bits */ -	.word 0xfffecc54 -#endif - -/* MPU clock/reset/power mode control registers */ -REG_ARM_CKCTL:			/* 16 bits */ -	.word 0xfffece00 - -REG_ARM_IDLECT3:		/* 16 bits */ -	.word 0xfffece24 -REG_ARM_IDLECT2:		/* 16 bits */ -	.word 0xfffece08 -REG_ARM_IDLECT1:		/* 16 bits */ -	.word 0xfffece04 - -REG_ARM_RSTCT2:			/* 16 bits */ -	.word 0xfffece14 -REG_ARM_SYSST:			/* 16 bits */ -	.word 0xfffece18 -/* DPLL control registers */ -REG_DPLL1_CTL:			/* 16 bits */ -	.word 0xfffecf00 - -/* Watch Dog register */ -/* secure watchdog stop */ -REG_WSPRDOG: -	.word 0xfffeb048 -/* watchdog write pending */ -REG_WWPSDOG: -	.word 0xfffeb034 - -WSPRDOG_VAL1: -	.word 0x0000aaaa -WSPRDOG_VAL2: -	.word 0x00005555 - -/* SDRAM config is: auto refresh enabled, 16 bit 4 bank, - counter @8192 rows, 10 ns, 8 burst */ -REG_SDRAM_CONFIG: -	.word 0xfffecc20 - -REG_SDRAM_MRS_LEGACY: -	.word 0xfffecc24 - -REG_WATCHDOG: -	.word 0xfffec808 - -REG_MPU_LOAD_TIMER: -	.word 0xfffec504 -REG_MPU_CNTL_TIMER: -	.word 0xfffec500 - -/* Public and private rhea bridge registers definition */ - -REG_RHEA_PUB_CTL: -	.word 0xFFFECA00 - -REG_RHEA_PRIV_CTL: -	.word 0xFFFED300 - -/* EMIFF SDRAM Configuration register -   - self refresh disable -   - auto refresh enabled -   - SDRAM type 64 Mb, 16 bits bus 4 banks -   - power down enabled -   - SDRAM clock disabled - */ -SDRAM_CONFIG_VAL: -	.word 0x0C017DF4 - -/* Burst full page length ; cas latency = 3 */ -SDRAM_MRS_VAL: -	.word 0x00000037 - -VAL_ARM_CKCTL: -	.word 0x6505 -VAL_DPLL1_CTL: -	.word 0x3412 - -#ifdef CONFIG_P2_OMAP730 -VAL_TC_EMIFS_CS0_CONFIG: -	.word 0x0000FFF3 -VAL_TC_EMIFS_CS1_CONFIG: -	.word 0x00004278 -VAL_TC_EMIFS_CS2_CONFIG: -	.word 0x00004278 -VAL_TC_EMIFS_CS3_CONFIG: -	.word 0x00004278 -VAL_TC_EMIFS_CS1_ADVANCED: -	.word 0x00000022 -#endif - -VAL_ARM_IDLECT1: -	.word 0x00000400 -VAL_ARM_IDLECT2: -	.word 0x00000886 -VAL_ARM_IDLECT3: -	.word 0x00000015 - -WATCHDOG_VAL1: -	.word 0x000000f5 -WATCHDOG_VAL2: -	.word 0x000000a0 - -VAL_MPU_LOAD_TIMER: -	.word 0xffffffff -VAL_MPU_CNTL_TIMER: -	.word 0xffffffa1 - -VAL_RHEA_CTL: -	.word			0xFF22 - -/* Config Register vals */ -PERSEUS2_CONFIG_BASE: -	.word			0xFFFE1000 - -.equ	CONFIG_PCC_CONF,	0xB4 -.equ	CONFIG_MODE1,		0x10 -.equ	CONFIG_MODE2,		0x14 -.equ	CONF_MOD_UART1_CLK_MODE_R,	0x0A - -/* misc values */ -.equ	IRQ_MASK,		0x80           /* IRQ mask value */ -.equ	FIQ_MASK,		0x40           /* FIQ mask value */ diff --git a/board/ti/omap730p2/omap730p2.c b/board/ti/omap730p2/omap730p2.c deleted file mode 100644 index 554019c20..000000000 --- a/board/ti/omap730p2/omap730p2.c +++ /dev/null @@ -1,255 +0,0 @@ -/* - * (C) Copyright 2002 - * Sysgo Real-Time Solutions, GmbH <www.elinos.com> - * Marius Groeger <mgroeger@sysgo.de> - * - * (C) Copyright 2002 - * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch> - * - * (C) Copyright 2003 - * Texas Instruments, <www.ti.com> - * Kshitij Gupta <Kshitij@ti.com> - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#include <common.h> -#include <netdev.h> -#if defined(CONFIG_OMAP730) -#include <./configs/omap730.h> -#endif - -DECLARE_GLOBAL_DATA_PTR; - -int test_boot_mode(void); -void spin_up_leds(void); -void flash__init (void); -void ether__init (void); -void set_muxconf_regs (void); -void peripheral_power_enable (void); - -#define FLASH_ON_CS0	1 -#define FLASH_ON_CS3	0 - -static inline void delay (unsigned long loops) -{ -	__asm__ volatile ("1:\n" -			  "subs %0, %1, #1\n" -			  "bne 1b":"=r" (loops):"0" (loops)); -} - -int test_boot_mode(void) -{ -	/* Check for CS0 and CS3 address decode swapping */ -	if (*((volatile int *)EMIFS_CONFIG) & 0x00000002) -		return(FLASH_ON_CS3); -	else -		return(FLASH_ON_CS0); -} - -/* Toggle backup LED indication */ -void toggle_backup_led(void) -{ -	static int  backupLEDState = 0;	 /* Init variable so that the LED will be ON the first time */ -	volatile unsigned int *IOConfReg; - - -	IOConfReg = (volatile unsigned int *) ((unsigned int) OMAP730_GPIO_BASE_5 + GPIO_DATA_OUTPUT); - -	if (backupLEDState != 0) { -		*IOConfReg &= (0xFFFFEFFF); -		backupLEDState = 0; -	} else { -		*IOConfReg |= (0x00001000); -		backupLEDState = 1; -	} -} - -/* - * Miscellaneous platform dependent initialisations - */ - -int board_init (void) -{ -	/* arch number of OMAP 730 P2 Board - Same as the Innovator! */ -	gd->bd->bi_arch_number = MACH_TYPE_OMAP_PERSEUS2; - -	/* adress of boot parameters */ -	gd->bd->bi_boot_params = 0x10000100; - -	/* Configure MUX settings */ -	set_muxconf_regs (); - -	peripheral_power_enable (); - -	/* Backup LED indication via GPIO_140 -> Red led if MUX correctly setup */ -	toggle_backup_led(); - -	/* Hold GSM in reset until needed */ -	*((volatile unsigned short *)M_CTL) &= ~1; - -	/* -	 *  CSx timings, GPIO Mux ... setup -	 */ - -	/* Flash: CS0 timings setup */ -	*((volatile unsigned int *) FLASH_CFG_0) = 0x0000fff3; -	*((volatile unsigned int *) FLASH_ACFG_0_1) = 0x00000088; - -	/* Ethernet support trough the debug board */ -	/* CS1 timings setup */ -	*((volatile unsigned int *) FLASH_CFG_1) = 0x0000fff3; -	*((volatile unsigned int *) FLASH_ACFG_0_1) = 0x00000000; - -	/* this speeds up your boot a quite a bit.  However to make it -	 *  work, you need make sure your kernel startup flush bug is fixed. -	 *  ... rkw ... -	 */ -	icache_enable (); - -	flash__init (); -	ether__init (); - -	return 0; -} - -/****************************** - Routine: - Description: -******************************/ -void flash__init (void) -{ -	unsigned int regval; - -	regval = *((volatile unsigned int *) EMIFS_CONFIG); -	/* Turn off write protection for flash devices. */ -	regval = regval | 0x0001; -	*((volatile unsigned int *) EMIFS_CONFIG) = regval; -} - -/************************************************************* - Routine:ether__init - Description: take the Ethernet controller out of reset and wait -			   for the EEPROM load to complete. -*************************************************************/ -void ether__init (void) -{ -#define LAN_RESET_REGISTER 0x0400001c - -	*((volatile unsigned short *) LAN_RESET_REGISTER) = 0x0000; -	do { -		*((volatile unsigned short *) LAN_RESET_REGISTER) = 0x0001; -		udelay (100); -	} while (*((volatile unsigned short *) LAN_RESET_REGISTER) != 0x0001); - -	do { -		*((volatile unsigned short *) LAN_RESET_REGISTER) = 0x0000; -		udelay (100); -	} while (*((volatile unsigned short *) LAN_RESET_REGISTER) != 0x0000); - -#define ETH_CONTROL_REG 0x0400030b - -	*((volatile unsigned char *) ETH_CONTROL_REG) &= ~0x01; -	udelay (100); -} - -/****************************** - Routine: - Description: -******************************/ -int dram_init (void) -{ -	gd->bd->bi_dram[0].start = PHYS_SDRAM_1; -	gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; - -	return 0; -} - -/****************************************************** - Routine: set_muxconf_regs - Description: Setting up the configuration Mux registers -			  specific to the hardware -*******************************************************/ -void set_muxconf_regs (void) -{ -	volatile unsigned int *MuxConfReg; -	/* set each registers to its reset value; */ - -	/* -	 *  Backup LED Indication -	 */ - -	/* Configure MUXed pin. Mode 6: GPIO_140 */ -	MuxConfReg = (volatile unsigned int *) (PERSEUS2_IO_CONF10); -	*MuxConfReg &= (0xFFFFFF1F);	     /* Clear D_MPU_LPG1 */ -	*MuxConfReg |= 0x000000C0;	     /* Set D_MPU_LPG1 to 0x6 */ - -	/* Configure GPIO_140 as output */ -	MuxConfReg = (volatile unsigned int *) ((unsigned int) OMAP730_GPIO_BASE_5 + GPIO_DIRECTION_CONTROL); -	*MuxConfReg &= (0xFFFFEFFF);	     /* Clear direction (output) for GPIO 140 */ - -	/* -	 * Configure GPIOs for battery charge & feedback -	 */ - -	/* Configure MUXed pin. Mode 6: GPIO_35 */ -	MuxConfReg = (volatile unsigned int *) (PERSEUS2_IO_CONF3); -	*MuxConfReg &= 0xFFFFFFF1;	     /* Clear M_CLK_OUT */ -	*MuxConfReg |= 0x0000000C;	     /* Set M_CLK_OUT = 0x6 (GPIOs) */ - -	/* Configure MUXed pin. Mode 6: GPIO_72,73,74 */ -	MuxConfReg = (volatile unsigned int *) (PERSEUS2_IO_CONF5); -	*MuxConfReg &= 0xFFFF1FFF;	     /* Clear D_DDR */ -	*MuxConfReg |= 0x0000C000;	     /* Set D_DDR = 0x6 (GPIOs) */ - -	MuxConfReg = (volatile unsigned int *) ((unsigned int) OMAP730_GPIO_BASE_3 + GPIO_DIRECTION_CONTROL); -	*MuxConfReg |= 0x00000100;	     /* Configure GPIO_72 as input */ -	*MuxConfReg &= 0xFFFFFDFF;	     /* Configure GPIO_73 as output	*/ - -	/* -	 * Allow battery charge -	 */ - -	MuxConfReg = (volatile unsigned int *) ((unsigned int) OMAP730_GPIO_BASE_3 + GPIO_DATA_OUTPUT); -	*MuxConfReg &= (0xFFFFFDFF);	     /* Clear GPIO_73 pin */ - -	/* -	 * Configure MPU_EXT_NIRQ IO in IO_CONF9 register, -	 * It is used as the Ethernet controller interrupt -	 */ -	MuxConfReg = (volatile unsigned int *) (PERSEUS2_IO_CONF9); -	*MuxConfReg &= 0x1FFFFFFF; -} - -/****************************************************** - Routine: peripheral_power_enable - Description: Enable the power for UART1 -*******************************************************/ -void peripheral_power_enable (void) -{ -	volatile unsigned int *MuxConfReg; - - -	/* Set up pins used by UART */ - -	/* Start UART clock (48MHz) */ -	MuxConfReg = (volatile unsigned int *) (PERSEUS_PCC_CONF_REG); -	*MuxConfReg &= (0xFFFFFFF7); -	*MuxConfReg |= (0x00000008); - -	/* Get the UART pin in mode0  */ -	MuxConfReg = (volatile unsigned int *) (PERSEUS2_IO_CONF3); -	*MuxConfReg &= (0xFF1FFFFF); -	*MuxConfReg &= (0xF1FFFFFF); -} - -#ifdef CONFIG_CMD_NET -int board_eth_init(bd_t *bis) -{ -	int rc = 0; -#ifdef CONFIG_LAN91C96 -	rc = lan91c96_initialize(0, CONFIG_LAN91C96_BASE); -#endif -	return rc; -} -#endif diff --git a/board/ti/panda/panda.c b/board/ti/panda/panda.c index c104024b1..cda09a912 100644 --- a/board/ti/panda/panda.c +++ b/board/ti/panda/panda.c @@ -123,6 +123,66 @@ int get_board_revision(void)  }  /** + * is_panda_es_rev_b3() - Detect if we are running on rev B3 of panda board ES + * + * + * Detect if we are running on B3 version of ES panda board, + * This can be done by reading the level of GPIO 171 and checking the + * processor revisions. + * GPIO171: 1 => Panda ES Rev B3 + * + * Return : return 1 if Panda ES Rev B3 , else return 0 + */ +u8 is_panda_es_rev_b3(void) +{ +        int processor_rev = omap_revision(); +        int ret = 0; + +        if ((processor_rev >= OMAP4460_ES1_0 && +             processor_rev <= OMAP4460_ES1_1)) { + +                /* Setup the mux for the common board ID pins (gpio 171) */ +                writew((IEN | M3), +			(*ctrl)->control_padconf_core_base + UNIPRO_TX0); + +                /* if processor_rev is panda ES and GPIO171 is 1,it is rev b3 */ +                ret = gpio_get_value(PANDA_BOARD_ID_2_GPIO); +        } +        return ret; +} + +#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS +/* + * emif_get_reg_dump() - emif_get_reg_dump strong function + * + * @emif_nr - emif base + * @regs - reg dump of timing values + * + * Strong function to override emif_get_reg_dump weak function in sdram_elpida.c + */ +void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs) +{ +	u32 omap4_rev = omap_revision(); + +	/* Same devices and geometry on both EMIFs */ +	if (omap4_rev == OMAP4430_ES1_0) +		*regs = &emif_regs_elpida_380_mhz_1cs; +	else if (omap4_rev == OMAP4430_ES2_0) +		*regs = &emif_regs_elpida_200_mhz_2cs; +	else if (omap4_rev == OMAP4430_ES2_3) +		*regs = &emif_regs_elpida_400_mhz_1cs; +	else if (omap4_rev < OMAP4470_ES1_0) { +		if(is_panda_es_rev_b3()) +			*regs = &emif_regs_elpida_400_mhz_1cs; +		else +			*regs = &emif_regs_elpida_400_mhz_2cs; +	} +	else +		*regs = &emif_regs_elpida_400_mhz_1cs; +} +#endif + +/**   * @brief misc_init_r - Configure Panda board specific configurations   * such as power configurations, ethernet initialization as phase2 of   * boot sequence diff --git a/board/ti/ti814x/evm.c b/board/ti/ti814x/evm.c index e406326a1..0b76a7790 100644 --- a/board/ti/ti814x/evm.c +++ b/board/ti/ti814x/evm.c @@ -33,15 +33,12 @@ static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;  #ifdef CONFIG_SPL_BUILD  static const struct cmd_control evm_ddr2_cctrl_data = {  	.cmd0csratio	= 0x80, -	.cmd0dldiff	= 0x04,  	.cmd0iclkout	= 0x00,  	.cmd1csratio	= 0x80, -	.cmd1dldiff	= 0x04,  	.cmd1iclkout	= 0x00,  	.cmd2csratio	= 0x80, -	.cmd2dldiff	= 0x04,  	.cmd2iclkout	= 0x00,  }; @@ -77,8 +74,6 @@ static const struct ddr_data evm_ddr2_data = {  	.datagiratio0		= ((0<<10) | (0<<0)),  	.datafwsratio0		= ((0x90<<10) | (0x90<<0)),  	.datawrsratio0		= ((0x50<<10) | (0x50<<0)), -	.datauserank0delay	= 1, -	.datadldiff0		= 0x4,  };  void set_uart_mux_conf(void) diff --git a/board/ti/ti816x/evm.c b/board/ti/ti816x/evm.c index 74d35e936..a53859e52 100644 --- a/board/ti/ti816x/evm.c +++ b/board/ti/ti816x/evm.c @@ -59,21 +59,16 @@ static struct ddr_data ddr2_data = {  	.datagiratio0		= ((0x0<<10) | (0x0<<0)),  	.datafwsratio0		= ((0x13A<<10) | (0x13A<<0)),  	.datawrsratio0		= ((0x8A<<10) | (0x8A<<0)), -	.datauserank0delay	= 0x1, -	.datadldiff0		= 0x0, /* depend on cpu rev, set later */  };  static struct cmd_control ddr2_ctrl = {  	.cmd0csratio	= 0x80, -	.cmd0dldiff	= 0x04, /* reset value is 0x4 */  	.cmd0iclkout	= 0x00,  	.cmd1csratio	= 0x80, -	.cmd1dldiff	= 0x04, /* reset value is 0x4 */  	.cmd1iclkout	= 0x00,  	.cmd2csratio	= 0x80, -	.cmd2dldiff	= 0x04, /* reset value is 0x4 */  	.cmd2iclkout	= 0x00,  }; @@ -150,21 +145,16 @@ static struct ddr_data ddr3_data = {  	.datagiratio0		= ((0x20<<10) | 0x20<<0),  	.datafwsratio0		= ((RD_DQS_GATE<<10) | (RD_DQS_GATE<<0)),  	.datawrsratio0		= (((WR_DQS+0x40)<<10) | ((WR_DQS+0x40)<<0)), -	.datauserank0delay	= 0x1, -	.datadldiff0		= 0x0, /* depend on cpu rev, set later */  };  static const struct cmd_control ddr3_ctrl = {  	.cmd0csratio	= 0x100, -	.cmd0dldiff	= 0x004, /* reset value is 0x4 */  	.cmd0iclkout	= 0x001,  	.cmd1csratio	= 0x100, -	.cmd1dldiff	= 0x004, /* reset value is 0x4 */  	.cmd1iclkout	= 0x001,  	.cmd2csratio	= 0x100, -	.cmd2dldiff	= 0x004, /* reset value is 0x4 */  	.cmd2iclkout	= 0x001,  }; @@ -198,11 +188,6 @@ void sdram_init(void)  	config_dmm(&evm_lisa_map_regs);  #ifdef CONFIG_TI816X_EVM_DDR2 -	ddr2_data.datadldiff0 = (get_cpu_rev() == 0x1 ? 0x0 : 0xF); -	ddr2_ctrl.cmd0dldiff = (get_cpu_rev() == 0x1 ? 0x0 : 0xF); -	ddr2_ctrl.cmd1dldiff = (get_cpu_rev() == 0x1 ? 0x0 : 0xF); -	ddr2_ctrl.cmd2dldiff = (get_cpu_rev() == 0x1 ? 0x0 : 0xF); -  	if (CONFIG_TI816X_USE_EMIF0) {  		ddr2_emif0_regs.emif_ddr_phy_ctlr_1 =  			(get_cpu_rev() == 0x1 ? 0x0000010B : 0x0000030B); @@ -217,8 +202,6 @@ void sdram_init(void)  #endif  #ifdef CONFIG_TI816X_EVM_DDR3 -	ddr3_data.datadldiff0 = (get_cpu_rev() == 0x1 ? 0x0 : 0xF); -  	if (CONFIG_TI816X_USE_EMIF0)  		config_ddr(0, 0, &ddr3_data, &ddr3_ctrl, &ddr3_emif0_regs, 0); diff --git a/board/vpac270/u-boot-spl.lds b/board/vpac270/u-boot-spl.lds index c9b50e9f4..02d107c4b 100644 --- a/board/vpac270/u-boot-spl.lds +++ b/board/vpac270/u-boot-spl.lds @@ -62,13 +62,13 @@ SECTIONS  		__bss_end = .;  	} -	/DISCARD/ : { *(.bss*) } -	/DISCARD/ : { *(.dynsym) } -	/DISCARD/ : { *(.dynstr*) } -	/DISCARD/ : { *(.dynsym*) } -	/DISCARD/ : { *(.dynamic*) } -	/DISCARD/ : { *(.hash*) } -	/DISCARD/ : { *(.plt*) } -	/DISCARD/ : { *(.interp*) } -	/DISCARD/ : { *(.gnu*) } +	.dynsym _end : { *(.dynsym) } +	.dynbss : { *(.dynbss) } +	.dynstr : { *(.dynstr*) } +	.dynamic : { *(.dynamic*) } +	.hash : { *(.hash*) } +	.plt : { *(.plt*) } +	.interp : { *(.interp*) } +	.gnu : { *(.gnu*) } +	.ARM.exidx : { *(.ARM.exidx*) }  } |