diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/bootcount/Makefile | 1 | ||||
| -rw-r--r-- | drivers/bootcount/bootcount_davinci.c | 13 | ||||
| -rw-r--r-- | drivers/mtd/nand/davinci_nand.c | 12 | ||||
| -rw-r--r-- | drivers/net/macb.c | 20 | ||||
| -rw-r--r-- | drivers/net/macb.h | 11 | ||||
| -rw-r--r-- | drivers/rtc/davinci.c | 8 | ||||
| -rw-r--r-- | drivers/usb/host/ohci-at91.c | 19 | ||||
| -rw-r--r-- | drivers/watchdog/imx_watchdog.c | 3 | 
8 files changed, 66 insertions, 21 deletions
| diff --git a/drivers/bootcount/Makefile b/drivers/bootcount/Makefile index 012acef9d..8256ed0f4 100644 --- a/drivers/bootcount/Makefile +++ b/drivers/bootcount/Makefile @@ -6,4 +6,5 @@ obj-y				+= bootcount.o  obj-$(CONFIG_AT91SAM9XE)	+= bootcount_at91.o  obj-$(CONFIG_BLACKFIN)		+= bootcount_blackfin.o  obj-$(CONFIG_SOC_DA8XX)		+= bootcount_davinci.o +obj-$(CONFIG_AM33XX)		+= bootcount_davinci.o  obj-$(CONFIG_BOOTCOUNT_RAM)	+= bootcount_ram.o diff --git a/drivers/bootcount/bootcount_davinci.c b/drivers/bootcount/bootcount_davinci.c index efa4d42cb..f0acfad80 100644 --- a/drivers/bootcount/bootcount_davinci.c +++ b/drivers/bootcount/bootcount_davinci.c @@ -6,8 +6,7 @@   */  #include <bootcount.h> -#include <asm/arch/da850_lowlevel.h> -#include <asm/arch/davinci_misc.h> +#include <asm/davinci_rtc.h>  void bootcount_store(ulong a)  { @@ -21,17 +20,19 @@ void bootcount_store(ulong a)  	 */  	writel(RTC_KICK0R_WE, ®->kick0r);  	writel(RTC_KICK1R_WE, ®->kick1r); -	raw_bootcount_store(®->scratch0, a); -	raw_bootcount_store(®->scratch1, BOOTCOUNT_MAGIC); +	raw_bootcount_store(®->scratch2, +			    (BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff));  }  ulong bootcount_load(void)  { +	unsigned long val;  	struct davinci_rtc *reg =  		(struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR; -	if (raw_bootcount_load(®->scratch1) != BOOTCOUNT_MAGIC) +	val = raw_bootcount_load(®->scratch2); +	if ((val & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000))  		return 0;  	else -		return raw_bootcount_load(®->scratch0); +		return val & 0x0000ffff;  } diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c index d8bb5d351..5b17d7be8 100644 --- a/drivers/mtd/nand/davinci_nand.c +++ b/drivers/mtd/nand/davinci_nand.c @@ -266,6 +266,17 @@ static int nand_davinci_correct_data(struct mtd_info *mtd, u_char *dat,  static struct nand_ecclayout nand_davinci_4bit_layout_oobfirst = {  #if defined(CONFIG_SYS_NAND_PAGE_2K)  	.eccbytes = 40, +#ifdef CONFIG_NAND_6BYTES_OOB_FREE_10BYTES_ECC +	.eccpos = { +		6,   7,  8,  9, 10,	11, 12, 13, 14, 15, +		22, 23, 24, 25, 26,	27, 28, 29, 30, 31, +		38, 39, 40, 41, 42,	43, 44, 45, 46, 47, +		54, 55, 56, 57, 58,	59, 60, 61, 62, 63, +	}, +	.oobfree = { +		{2, 4}, {16, 6}, {32, 6}, {48, 6}, +	}, +#else  	.eccpos = {  		24, 25, 26, 27, 28,  		29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -276,6 +287,7 @@ static struct nand_ecclayout nand_davinci_4bit_layout_oobfirst = {  	.oobfree = {  		{.offset = 2, .length = 22, },  	}, +#endif	/* #ifdef CONFIG_NAND_6BYTES_OOB_FREE_10BYTES_ECC */  #elif defined(CONFIG_SYS_NAND_PAGE_4K)  	.eccbytes = 80,  	.eccpos = { diff --git a/drivers/net/macb.c b/drivers/net/macb.c index bf3983a00..781a272cf 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -621,6 +621,24 @@ static u32 gem_mdc_clk_div(int id, struct macb_device *macb)  	return config;  } +/* + * Get the DMA bus width field of the network configuration register that we + * should program. We find the width from decoding the design configuration + * register to find the maximum supported data bus width. + */ +static u32 macb_dbw(struct macb_device *macb) +{ +	switch (GEM_BFEXT(DBWDEF, gem_readl(macb, DCFG1))) { +	case 4: +		return GEM_BF(DBW, GEM_DBW128); +	case 2: +		return GEM_BF(DBW, GEM_DBW64); +	case 1: +	default: +		return GEM_BF(DBW, GEM_DBW32); +	} +} +  int macb_eth_initialize(int id, void *regs, unsigned int phy_addr)  {  	struct macb_device *macb; @@ -665,7 +683,7 @@ int macb_eth_initialize(int id, void *regs, unsigned int phy_addr)  	 */  	if (macb_is_gem(macb)) {  		ncfgr = gem_mdc_clk_div(id, macb); -		ncfgr |= GEM_BF(DBW, 1); +		ncfgr |= macb_dbw(macb);  	} else {  		ncfgr = macb_mdc_clk_div(id, macb);  	} diff --git a/drivers/net/macb.h b/drivers/net/macb.h index de5214fe6..06f7c66df 100644 --- a/drivers/net/macb.h +++ b/drivers/net/macb.h @@ -58,6 +58,9 @@  #define MACB_WOL				0x00c4  #define MACB_MID				0x00fc +/* GEM specific register offsets */ +#define GEM_DCFG1				0x0280 +  /* Bitfields in NCR */  #define MACB_LB_OFFSET				0  #define MACB_LB_SIZE				1 @@ -242,6 +245,14 @@  #define MACB_IDNUM_SIZE				16  /* Bitfields in DCFG1 */ +#define GEM_DBWDEF_OFFSET			25 +#define GEM_DBWDEF_SIZE				3 + +/* constants for data bus width */ +#define GEM_DBW32				0 +#define GEM_DBW64				1 +#define GEM_DBW128				2 +  /* Constants for CLK */  #define MACB_CLK_DIV8				0  #define MACB_CLK_DIV16				1 diff --git a/drivers/rtc/davinci.c b/drivers/rtc/davinci.c index e60c0da64..f862e2f95 100644 --- a/drivers/rtc/davinci.c +++ b/drivers/rtc/davinci.c @@ -8,12 +8,12 @@  #include <command.h>  #include <rtc.h>  #include <asm/io.h> -#include <asm/arch/hardware.h> +#include <asm/davinci_rtc.h>  #if defined(CONFIG_CMD_DATE)  int rtc_get(struct rtc_time *tmp)  { -	struct davinci_rtc *rtc = davinci_rtc_base; +	struct davinci_rtc *rtc = (struct davinci_rtc *)DAVINCI_RTC_BASE;  	unsigned long sec, min, hour, mday, wday, mon_cent, year;  	unsigned long status; @@ -57,7 +57,7 @@ int rtc_get(struct rtc_time *tmp)  int rtc_set(struct rtc_time *tmp)  { -	struct davinci_rtc *rtc = davinci_rtc_base; +	struct davinci_rtc *rtc = (struct davinci_rtc *)DAVINCI_RTC_BASE;  	debug("Set DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",  		tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday, @@ -75,7 +75,7 @@ int rtc_set(struct rtc_time *tmp)  void rtc_reset(void)  { -	struct davinci_rtc *rtc = davinci_rtc_base; +	struct davinci_rtc *rtc = (struct davinci_rtc *)DAVINCI_RTC_BASE;  	/* run RTC counter */  	writel(0x01, &rtc->ctrl); diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index 9e90d5908..c24505e78 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -18,15 +18,15 @@ int usb_cpu_init(void)  {  	at91_pmc_t *pmc	= (at91_pmc_t *)ATMEL_BASE_PMC; -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ -    defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ -    defined(CONFIG_AT91SAM9261) +#ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB  	/* Enable PLLB */  	writel(get_pllb_init(), &pmc->pllbr);  	while ((readl(&pmc->sr) & AT91_PMC_LOCKB) != AT91_PMC_LOCKB)  		; -#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ -	defined(CONFIG_AT91SAM9X5) || defined(CONFIG_SAMA5D3) +#ifdef CONFIG_AT91SAM9N12 +	writel(AT91_PMC_USBS_USB_PLLB | AT91_PMC_USB_DIV_2, &pmc->usb); +#endif +#elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL)  	/* Enable UPLL */  	writel(readl(&pmc->uckr) | AT91_PMC_UPLLEN | AT91_PMC_BIASEN,  		&pmc->uckr); @@ -70,14 +70,15 @@ int usb_cpu_stop(void)  	writel(ATMEL_PMC_UHP, &pmc->scdr);  #endif -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ -    defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) +#ifdef CONFIG_USB_ATMEL_CLK_SEL_PLLB +#ifdef CONFIG_AT91SAM9N12 +	writel(0, &pmc->usb); +#endif  	/* Disable PLLB */  	writel(0, &pmc->pllbr);  	while ((readl(&pmc->sr) & AT91_PMC_LOCKB) != 0)  		; -#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ -	defined(CONFIG_AT91SAM9X5) || defined(CONFIG_SAMA5D3) +#elif defined(CONFIG_USB_ATMEL_CLK_SEL_UPLL)  	/* Disable UPLL */  	writel(readl(&pmc->uckr) & (~AT91_PMC_UPLLEN), &pmc->uckr);  	while ((readl(&pmc->sr) & AT91_PMC_LOCKU) == AT91_PMC_LOCKU) diff --git a/drivers/watchdog/imx_watchdog.c b/drivers/watchdog/imx_watchdog.c index 50e602af1..d5993b4d2 100644 --- a/drivers/watchdog/imx_watchdog.c +++ b/drivers/watchdog/imx_watchdog.c @@ -19,6 +19,7 @@ struct watchdog_regs {  #define WCR_WDBG	0x02  #define WCR_WDE		0x04	/* WDOG enable */  #define WCR_WDT		0x08 +#define WCR_SRS		0x10  #define WCR_WDW		0x80  #define SET_WCR_WT(x)	(x << 8) @@ -45,7 +46,7 @@ void hw_watchdog_init(void)  #define CONFIG_WATCHDOG_TIMEOUT_MSECS 128000  #endif  	timeout = (CONFIG_WATCHDOG_TIMEOUT_MSECS / 500) - 1; -	writew(WCR_WDZST | WCR_WDBG | WCR_WDE | WCR_WDT | +	writew(WCR_WDZST | WCR_WDBG | WCR_WDE | WCR_WDT | WCR_SRS |  		WCR_WDW | SET_WCR_WT(timeout), &wdog->wcr);  	hw_watchdog_reset();  } |