uboot-lantiq: update to v2013.10
Patches created from tree: git@github.com:danielschwierzeck/u-boot-lantiq.git v2013.10..u-boot-lantiq-v2013.10-openwrt4 Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> SVN-Revision: 40482
This commit is contained in:
		| @@ -8,7 +8,7 @@ | |||||||
| include $(TOPDIR)/rules.mk | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
| PKG_NAME:=u-boot | PKG_NAME:=u-boot | ||||||
| PKG_VERSION:=2013.01 | PKG_VERSION:=2013.10 | ||||||
| PKG_RELEASE:=1 | PKG_RELEASE:=1 | ||||||
|  |  | ||||||
| PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) | PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) | ||||||
| @@ -16,7 +16,7 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 | |||||||
| PKG_SOURCE_URL:= \ | PKG_SOURCE_URL:= \ | ||||||
| 	http://mirror2.openwrt.org/sources \ | 	http://mirror2.openwrt.org/sources \ | ||||||
| 	ftp://ftp.denx.de/pub/u-boot | 	ftp://ftp.denx.de/pub/u-boot | ||||||
| PKG_MD5SUM:=e58a8a7f78972248190d83de0dc362ce | PKG_MD5SUM:=a076a044b64371edc52f7e562b13f6b2 | ||||||
| PKG_TARGETS:=bin | PKG_TARGETS:=bin | ||||||
|  |  | ||||||
| PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) | PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								package/boot/uboot-lantiq/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								package/boot/uboot-lantiq/README
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | # How to refresh patches | ||||||
|  |  | ||||||
|  | $ git clone git@github.com:danielschwierzeck/u-boot-lantiq.git | ||||||
|  | $ mkdir -p $OPENWRT_ROOT/packages/boot/uboot-lantiq/patches | ||||||
|  | $ cd u-boot-lantiq.git | ||||||
|  | $ git format-patch -p -k --no-renames --no-binary -o $OPENWRT_ROOT/package/boot/uboot-lantiq/patches v2013.10..u-boot-lantiq-v2013.10-openwrtN | ||||||
| @@ -0,0 +1,175 @@ | |||||||
|  | From 909840ef844013379e5ec399c1e76c65d1a6eb1d Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sat, 12 Oct 2013 21:09:47 +0200 | ||||||
|  | Subject: sf: fix out-of-order calls for spi_claim_bus and spi_release_bus | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c | ||||||
|  | index 108665f..d34747b 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_ops.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_ops.c | ||||||
|  | @@ -132,12 +132,6 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, | ||||||
|  |  	if (buf == NULL) | ||||||
|  |  		timeout = SPI_FLASH_PAGE_ERASE_TIMEOUT; | ||||||
|  |   | ||||||
|  | -	ret = spi_claim_bus(flash->spi); | ||||||
|  | -	if (ret) { | ||||||
|  | -		debug("SF: unable to claim SPI bus\n"); | ||||||
|  | -		return ret; | ||||||
|  | -	} | ||||||
|  | - | ||||||
|  |  	ret = spi_flash_cmd_write_enable(flash); | ||||||
|  |  	if (ret < 0) { | ||||||
|  |  		debug("SF: enabling write failed\n"); | ||||||
|  | @@ -158,8 +152,6 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, | ||||||
|  |  		return ret; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	spi_release_bus(spi); | ||||||
|  | - | ||||||
|  |  	return ret; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -175,12 +167,18 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len) | ||||||
|  |  		return -1; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +	ret = spi_claim_bus(flash->spi); | ||||||
|  | +	if (ret) { | ||||||
|  | +		debug("SF: unable to claim SPI bus\n"); | ||||||
|  | +		return ret; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	cmd[0] = flash->erase_cmd; | ||||||
|  |  	while (len) { | ||||||
|  |  #ifdef CONFIG_SPI_FLASH_BAR | ||||||
|  |  		ret = spi_flash_bank(flash, offset); | ||||||
|  |  		if (ret < 0) | ||||||
|  | -			return ret; | ||||||
|  | +			goto done; | ||||||
|  |  #endif | ||||||
|  |  		spi_flash_addr(offset, cmd); | ||||||
|  |   | ||||||
|  | @@ -190,13 +188,16 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len) | ||||||
|  |  		ret = spi_flash_write_common(flash, cmd, sizeof(cmd), NULL, 0); | ||||||
|  |  		if (ret < 0) { | ||||||
|  |  			debug("SF: erase failed\n"); | ||||||
|  | -			break; | ||||||
|  | +			goto done; | ||||||
|  |  		} | ||||||
|  |   | ||||||
|  |  		offset += erase_size; | ||||||
|  |  		len -= erase_size; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +done: | ||||||
|  | +	spi_release_bus(flash->spi); | ||||||
|  | + | ||||||
|  |  	return ret; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -208,6 +209,12 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  	u8 cmd[4]; | ||||||
|  |  	int ret = -1; | ||||||
|  |   | ||||||
|  | +	ret = spi_claim_bus(flash->spi); | ||||||
|  | +	if (ret) { | ||||||
|  | +		debug("SF: unable to claim SPI bus\n"); | ||||||
|  | +		return ret; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	page_size = flash->page_size; | ||||||
|  |   | ||||||
|  |  	cmd[0] = CMD_PAGE_PROGRAM; | ||||||
|  | @@ -215,7 +222,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  #ifdef CONFIG_SPI_FLASH_BAR | ||||||
|  |  		ret = spi_flash_bank(flash, offset); | ||||||
|  |  		if (ret < 0) | ||||||
|  | -			return ret; | ||||||
|  | +			goto done; | ||||||
|  |  #endif | ||||||
|  |  		byte_addr = offset % page_size; | ||||||
|  |  		chunk_len = min(len - actual, page_size - byte_addr); | ||||||
|  | @@ -232,12 +239,15 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  					buf + actual, chunk_len); | ||||||
|  |  		if (ret < 0) { | ||||||
|  |  			debug("SF: write failed\n"); | ||||||
|  | -			break; | ||||||
|  | +			goto done; | ||||||
|  |  		} | ||||||
|  |   | ||||||
|  |  		offset += chunk_len; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +done: | ||||||
|  | +	spi_release_bus(flash->spi); | ||||||
|  | + | ||||||
|  |  	return ret; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -247,20 +257,12 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd, | ||||||
|  |  	struct spi_slave *spi = flash->spi; | ||||||
|  |  	int ret; | ||||||
|  |   | ||||||
|  | -	ret = spi_claim_bus(flash->spi); | ||||||
|  | -	if (ret) { | ||||||
|  | -		debug("SF: unable to claim SPI bus\n"); | ||||||
|  | -		return ret; | ||||||
|  | -	} | ||||||
|  | - | ||||||
|  |  	ret = spi_flash_cmd_read(spi, cmd, cmd_len, data, data_len); | ||||||
|  |  	if (ret < 0) { | ||||||
|  |  		debug("SF: read cmd failed\n"); | ||||||
|  |  		return ret; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	spi_release_bus(spi); | ||||||
|  | - | ||||||
|  |  	return ret; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -271,6 +273,12 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  	u32 remain_len, read_len; | ||||||
|  |  	int ret = -1; | ||||||
|  |   | ||||||
|  | +	ret = spi_claim_bus(flash->spi); | ||||||
|  | +	if (ret) { | ||||||
|  | +		debug("SF: unable to claim SPI bus\n"); | ||||||
|  | +		return ret; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	/* Handle memory-mapped SPI */ | ||||||
|  |  	if (flash->memory_map) { | ||||||
|  |  		spi_xfer(flash->spi, 0, NULL, NULL, SPI_XFER_MMAP); | ||||||
|  | @@ -289,7 +297,7 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  		ret = spi_flash_cmd_bankaddr_write(flash, bank_sel); | ||||||
|  |  		if (ret) { | ||||||
|  |  			debug("SF: fail to set bank%d\n", bank_sel); | ||||||
|  | -			return ret; | ||||||
|  | +			goto done; | ||||||
|  |  		} | ||||||
|  |  #endif | ||||||
|  |  		remain_len = (SPI_FLASH_16MB_BOUN * (bank_sel + 1)) - offset; | ||||||
|  | @@ -304,7 +312,7 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  							data, read_len); | ||||||
|  |  		if (ret < 0) { | ||||||
|  |  			debug("SF: read failed\n"); | ||||||
|  | -			break; | ||||||
|  | +			goto done; | ||||||
|  |  		} | ||||||
|  |   | ||||||
|  |  		offset += read_len; | ||||||
|  | @@ -312,6 +320,9 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  		data += read_len; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +done: | ||||||
|  | +	spi_release_bus(flash->spi); | ||||||
|  | + | ||||||
|  |  	return ret; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,54 @@ | |||||||
|  | From bb7df8c6ff30be3786483767d3afb0e77a69a640 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sat, 12 Oct 2013 21:21:18 +0200 | ||||||
|  | Subject: sf: consistently use debug() for warning/error messages | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c | ||||||
|  | index 5eb8ffe..04356f1 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_probe.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_probe.c | ||||||
|  | @@ -176,8 +176,8 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi, | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	if (i == ARRAY_SIZE(spi_flash_params_table)) { | ||||||
|  | -		printf("SF: Unsupported flash IDs: "); | ||||||
|  | -		printf("manuf %02x, jedec %04x, ext_jedec %04x\n", | ||||||
|  | +		debug("SF: Unsupported flash IDs: "); | ||||||
|  | +		debug("manuf %02x, jedec %04x, ext_jedec %04x\n", | ||||||
|  |  		       idcode[0], jedec, ext_jedec); | ||||||
|  |  		return NULL; | ||||||
|  |  	} | ||||||
|  | @@ -296,7 +296,7 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, | ||||||
|  |  	/* Setup spi_slave */ | ||||||
|  |  	spi = spi_setup_slave(bus, cs, max_hz, spi_mode); | ||||||
|  |  	if (!spi) { | ||||||
|  | -		printf("SF: Failed to set up slave\n"); | ||||||
|  | +		debug("SF: Failed to set up slave\n"); | ||||||
|  |  		return NULL; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | @@ -310,7 +310,7 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, | ||||||
|  |  	/* Read the ID codes */ | ||||||
|  |  	ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode)); | ||||||
|  |  	if (ret) { | ||||||
|  | -		printf("SF: Failed to get idcodes\n"); | ||||||
|  | +		debug("SF: Failed to get idcodes\n"); | ||||||
|  |  		goto err_read_id; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | @@ -341,8 +341,8 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, | ||||||
|  |  #endif | ||||||
|  |  #ifndef CONFIG_SPI_FLASH_BAR | ||||||
|  |  	if (flash->size > SPI_FLASH_16MB_BOUN) { | ||||||
|  | -		puts("SF: Warning - Only lower 16MiB accessible,"); | ||||||
|  | -		puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); | ||||||
|  | +		debug("SF: Warning - Only lower 16MiB accessible,"); | ||||||
|  | +		debug(" Full access #define CONFIG_SPI_FLASH_BAR\n"); | ||||||
|  |  	} | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,46 +0,0 @@ | |||||||
| From 60e8a35f0efa5a7e5d797a3f239971c84061ef11 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Tue, 6 Nov 2012 21:39:47 +0100 |  | ||||||
| Subject: sf: handle CONFIG_MANUAL_RELOC |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/spi_flash.c |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash.c |  | ||||||
| @@ -293,7 +293,7 @@ int spi_flash_cmd_write_status(struct sp |  | ||||||
|   */ |  | ||||||
|  #define IDCODE_CONT_LEN 0 |  | ||||||
|  #define IDCODE_PART_LEN 5 |  | ||||||
| -static const struct { |  | ||||||
| +static struct { |  | ||||||
|  	const u8 shift; |  | ||||||
|  	const u8 idcode; |  | ||||||
|  	struct spi_flash *(*probe) (struct spi_slave *spi, u8 *idcode); |  | ||||||
| @@ -335,6 +335,10 @@ static const struct { |  | ||||||
|  }; |  | ||||||
|  #define IDCODE_LEN (IDCODE_CONT_LEN + IDCODE_PART_LEN) |  | ||||||
|   |  | ||||||
| +#ifdef CONFIG_NEEDS_MANUAL_RELOC |  | ||||||
| +DECLARE_GLOBAL_DATA_PTR; |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
|  struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, |  | ||||||
|  		unsigned int max_hz, unsigned int spi_mode) |  | ||||||
|  { |  | ||||||
| @@ -342,6 +346,16 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|  	struct spi_flash *flash = NULL; |  | ||||||
|  	int ret, i, shift; |  | ||||||
|  	u8 idcode[IDCODE_LEN], *idp; |  | ||||||
| +#ifdef CONFIG_NEEDS_MANUAL_RELOC |  | ||||||
| +	static int relocated; |  | ||||||
| + |  | ||||||
| +	if (!relocated) { |  | ||||||
| +		for (i = 0; i < ARRAY_SIZE(flashes); i++) |  | ||||||
| +			flashes[i].probe += gd->reloc_off; |  | ||||||
| + |  | ||||||
| +		relocated = 1; |  | ||||||
| +	} |  | ||||||
| +#endif |  | ||||||
|   |  | ||||||
|  	spi = spi_setup_slave(bus, cs, max_hz, spi_mode); |  | ||||||
|  	if (!spi) { |  | ||||||
| @@ -1,719 +0,0 @@ | |||||||
| From 73d127565b5a4b19bcaacabc505689ee039f16fd Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Sun, 11 Nov 2012 03:11:38 +0100 |  | ||||||
| Subject: sf: factor out malloc from SPI flash drivers |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/atmel.c |  | ||||||
| +++ b/drivers/mtd/spi/atmel.c |  | ||||||
| @@ -40,18 +40,6 @@ struct atmel_spi_flash_params { |  | ||||||
|  	const char	*name; |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| -/* spi_flash needs to be first so upper layers can free() it */ |  | ||||||
| -struct atmel_spi_flash { |  | ||||||
| -	struct spi_flash flash; |  | ||||||
| -	const struct atmel_spi_flash_params *params; |  | ||||||
| -}; |  | ||||||
| - |  | ||||||
| -static inline struct atmel_spi_flash * |  | ||||||
| -to_atmel_spi_flash(struct spi_flash *flash) |  | ||||||
| -{ |  | ||||||
| -	return container_of(flash, struct atmel_spi_flash, flash); |  | ||||||
| -} |  | ||||||
| - |  | ||||||
|  static const struct atmel_spi_flash_params atmel_spi_flash_table[] = { |  | ||||||
|  	{ |  | ||||||
|  		.idcode1		= 0x22, |  | ||||||
| @@ -156,7 +144,8 @@ static int at45_wait_ready(struct spi_fl |  | ||||||
|   * Assemble the address part of a command for AT45 devices in |  | ||||||
|   * non-power-of-two page size mode. |  | ||||||
|   */ |  | ||||||
| -static void at45_build_address(struct atmel_spi_flash *asf, u8 *cmd, u32 offset) |  | ||||||
| +static void at45_build_address(const struct atmel_spi_flash_params *params, |  | ||||||
| +				u8 *cmd, u32 offset) |  | ||||||
|  { |  | ||||||
|  	unsigned long page_addr; |  | ||||||
|  	unsigned long byte_addr; |  | ||||||
| @@ -167,7 +156,7 @@ static void at45_build_address(struct at |  | ||||||
|  	 * The "extra" space per page is the power-of-two page size |  | ||||||
|  	 * divided by 32. |  | ||||||
|  	 */ |  | ||||||
| -	page_shift = asf->params->l2_page_size; |  | ||||||
| +	page_shift = params->l2_page_size; |  | ||||||
|  	page_size = (1 << page_shift) + (1 << (page_shift - 5)); |  | ||||||
|  	page_shift++; |  | ||||||
|  	page_addr = offset / page_size; |  | ||||||
| @@ -181,11 +170,11 @@ static void at45_build_address(struct at |  | ||||||
|  static int dataflash_read_fast_at45(struct spi_flash *flash, |  | ||||||
|  		u32 offset, size_t len, void *buf) |  | ||||||
|  { |  | ||||||
| -	struct atmel_spi_flash *asf = to_atmel_spi_flash(flash); |  | ||||||
| +	const struct atmel_spi_flash_params *params = flash->priv; |  | ||||||
|  	u8 cmd[5]; |  | ||||||
|   |  | ||||||
|  	cmd[0] = CMD_READ_ARRAY_FAST; |  | ||||||
| -	at45_build_address(asf, cmd + 1, offset); |  | ||||||
| +	at45_build_address(params, cmd + 1, offset); |  | ||||||
|  	cmd[4] = 0x00; |  | ||||||
|   |  | ||||||
|  	return spi_flash_read_common(flash, cmd, sizeof(cmd), buf, len); |  | ||||||
| @@ -197,7 +186,7 @@ static int dataflash_read_fast_at45(stru |  | ||||||
|  static int dataflash_write_p2(struct spi_flash *flash, |  | ||||||
|  		u32 offset, size_t len, const void *buf) |  | ||||||
|  { |  | ||||||
| -	struct atmel_spi_flash *asf = to_atmel_spi_flash(flash); |  | ||||||
| +	const struct atmel_spi_flash_params *params = flash->priv; |  | ||||||
|  	unsigned long page_size; |  | ||||||
|  	u32 addr = offset; |  | ||||||
|  	size_t chunk_len; |  | ||||||
| @@ -211,7 +200,7 @@ static int dataflash_write_p2(struct spi |  | ||||||
|  	 * the other is being programmed into main memory. |  | ||||||
|  	 */ |  | ||||||
|   |  | ||||||
| -	page_size = (1 << asf->params->l2_page_size); |  | ||||||
| +	page_size = (1 << params->l2_page_size); |  | ||||||
|   |  | ||||||
|  	ret = spi_claim_bus(flash->spi); |  | ||||||
|  	if (ret) { |  | ||||||
| @@ -263,7 +252,7 @@ out: |  | ||||||
|  static int dataflash_write_at45(struct spi_flash *flash, |  | ||||||
|  		u32 offset, size_t len, const void *buf) |  | ||||||
|  { |  | ||||||
| -	struct atmel_spi_flash *asf = to_atmel_spi_flash(flash); |  | ||||||
| +	const struct atmel_spi_flash_params *params = flash->priv; |  | ||||||
|  	unsigned long page_addr; |  | ||||||
|  	unsigned long byte_addr; |  | ||||||
|  	unsigned long page_size; |  | ||||||
| @@ -279,7 +268,7 @@ static int dataflash_write_at45(struct s |  | ||||||
|  	 * the other is being programmed into main memory. |  | ||||||
|  	 */ |  | ||||||
|   |  | ||||||
| -	page_shift = asf->params->l2_page_size; |  | ||||||
| +	page_shift = params->l2_page_size; |  | ||||||
|  	page_size = (1 << page_shift) + (1 << (page_shift - 5)); |  | ||||||
|  	page_shift++; |  | ||||||
|  	page_addr = offset / page_size; |  | ||||||
| @@ -338,7 +327,7 @@ out: |  | ||||||
|   */ |  | ||||||
|  static int dataflash_erase_p2(struct spi_flash *flash, u32 offset, size_t len) |  | ||||||
|  { |  | ||||||
| -	struct atmel_spi_flash *asf = to_atmel_spi_flash(flash); |  | ||||||
| +	const struct atmel_spi_flash_params *params = flash->priv; |  | ||||||
|  	unsigned long page_size; |  | ||||||
|   |  | ||||||
|  	size_t actual; |  | ||||||
| @@ -351,7 +340,7 @@ static int dataflash_erase_p2(struct spi |  | ||||||
|  	 * when possible. |  | ||||||
|  	 */ |  | ||||||
|   |  | ||||||
| -	page_size = (1 << asf->params->l2_page_size); |  | ||||||
| +	page_size = (1 << params->l2_page_size); |  | ||||||
|   |  | ||||||
|  	if (offset % page_size || len % page_size) { |  | ||||||
|  		debug("SF: Erase offset/length not multiple of page size\n"); |  | ||||||
| @@ -397,7 +386,7 @@ out: |  | ||||||
|   |  | ||||||
|  static int dataflash_erase_at45(struct spi_flash *flash, u32 offset, size_t len) |  | ||||||
|  { |  | ||||||
| -	struct atmel_spi_flash *asf = to_atmel_spi_flash(flash); |  | ||||||
| +	const struct atmel_spi_flash_params *params = flash->priv; |  | ||||||
|  	unsigned long page_addr; |  | ||||||
|  	unsigned long page_size; |  | ||||||
|  	unsigned int page_shift; |  | ||||||
| @@ -411,7 +400,7 @@ static int dataflash_erase_at45(struct s |  | ||||||
|  	 * when possible. |  | ||||||
|  	 */ |  | ||||||
|   |  | ||||||
| -	page_shift = asf->params->l2_page_size; |  | ||||||
| +	page_shift = params->l2_page_size; |  | ||||||
|  	page_size = (1 << page_shift) + (1 << (page_shift - 5)); |  | ||||||
|  	page_shift++; |  | ||||||
|  	page_addr = offset / page_size; |  | ||||||
| @@ -458,12 +447,12 @@ out: |  | ||||||
|  	return ret; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| -struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode) |  | ||||||
| +int spi_flash_probe_atmel(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct atmel_spi_flash_params *params; |  | ||||||
| +	struct spi_slave *spi = flash->spi; |  | ||||||
|  	unsigned page_size; |  | ||||||
|  	unsigned int family; |  | ||||||
| -	struct atmel_spi_flash *asf; |  | ||||||
|  	unsigned int i; |  | ||||||
|  	int ret; |  | ||||||
|  	u8 status; |  | ||||||
| @@ -477,18 +466,11 @@ struct spi_flash *spi_flash_probe_atmel( |  | ||||||
|  	if (i == ARRAY_SIZE(atmel_spi_flash_table)) { |  | ||||||
|  		debug("SF: Unsupported DataFlash ID %02x\n", |  | ||||||
|  				idcode[1]); |  | ||||||
| -		return NULL; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
| -	asf = malloc(sizeof(struct atmel_spi_flash)); |  | ||||||
| -	if (!asf) { |  | ||||||
| -		debug("SF: Failed to allocate memory\n"); |  | ||||||
| -		return NULL; |  | ||||||
| +		return 0; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	asf->params = params; |  | ||||||
| -	asf->flash.spi = spi; |  | ||||||
| -	asf->flash.name = params->name; |  | ||||||
| +	flash->priv = (void *)params; |  | ||||||
| +	flash->name = params->name; |  | ||||||
|   |  | ||||||
|  	/* Assuming power-of-two page size initially. */ |  | ||||||
|  	page_size = 1 << params->l2_page_size; |  | ||||||
| @@ -503,48 +485,44 @@ struct spi_flash *spi_flash_probe_atmel( |  | ||||||
|  		 */ |  | ||||||
|  		ret = spi_flash_cmd(spi, CMD_AT45_READ_STATUS, &status, 1); |  | ||||||
|  		if (ret) |  | ||||||
| -			goto err; |  | ||||||
| +			return -1; |  | ||||||
|   |  | ||||||
|  		debug("SF: AT45 status register: %02x\n", status); |  | ||||||
|   |  | ||||||
|  		if (!(status & AT45_STATUS_P2_PAGE_SIZE)) { |  | ||||||
| -			asf->flash.read = dataflash_read_fast_at45; |  | ||||||
| -			asf->flash.write = dataflash_write_at45; |  | ||||||
| -			asf->flash.erase = dataflash_erase_at45; |  | ||||||
| +			flash->read = dataflash_read_fast_at45; |  | ||||||
| +			flash->write = dataflash_write_at45; |  | ||||||
| +			flash->erase = dataflash_erase_at45; |  | ||||||
|  			page_size += 1 << (params->l2_page_size - 5); |  | ||||||
|  		} else { |  | ||||||
| -			asf->flash.read = spi_flash_cmd_read_fast; |  | ||||||
| -			asf->flash.write = dataflash_write_p2; |  | ||||||
| -			asf->flash.erase = dataflash_erase_p2; |  | ||||||
| +			flash->read = spi_flash_cmd_read_fast; |  | ||||||
| +			flash->write = dataflash_write_p2; |  | ||||||
| +			flash->erase = dataflash_erase_p2; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| -		asf->flash.page_size = page_size; |  | ||||||
| -		asf->flash.sector_size = page_size; |  | ||||||
| +		flash->page_size = page_size; |  | ||||||
| +		flash->sector_size = page_size; |  | ||||||
|  		break; |  | ||||||
|   |  | ||||||
|  	case DF_FAMILY_AT26F: |  | ||||||
|  	case DF_FAMILY_AT26DF: |  | ||||||
| -		asf->flash.read = spi_flash_cmd_read_fast; |  | ||||||
| -		asf->flash.write = spi_flash_cmd_write_multi; |  | ||||||
| -		asf->flash.erase = spi_flash_cmd_erase; |  | ||||||
| -		asf->flash.page_size = page_size; |  | ||||||
| -		asf->flash.sector_size = 4096; |  | ||||||
| +		flash->read = spi_flash_cmd_read_fast; |  | ||||||
| +		flash->write = spi_flash_cmd_write_multi; |  | ||||||
| +		flash->erase = spi_flash_cmd_erase; |  | ||||||
| +		flash->page_size = page_size; |  | ||||||
| +		flash->sector_size = 4096; |  | ||||||
|  		/* clear SPRL# bit for locked flash */ |  | ||||||
| -		spi_flash_cmd_write_status(&asf->flash, 0); |  | ||||||
| +		spi_flash_cmd_write_status(flash, 0); |  | ||||||
|  		break; |  | ||||||
|   |  | ||||||
|  	default: |  | ||||||
|  		debug("SF: Unsupported DataFlash family %u\n", family); |  | ||||||
| -		goto err; |  | ||||||
| +		return -1; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	asf->flash.size = page_size * params->pages_per_block |  | ||||||
| +	flash->size = page_size * params->pages_per_block |  | ||||||
|  				* params->blocks_per_sector |  | ||||||
|  				* params->nr_sectors; |  | ||||||
|   |  | ||||||
| -	return &asf->flash; |  | ||||||
| - |  | ||||||
| -err: |  | ||||||
| -	free(asf); |  | ||||||
| -	return NULL; |  | ||||||
| +	return 1; |  | ||||||
|  } |  | ||||||
| --- a/drivers/mtd/spi/eon.c |  | ||||||
| +++ b/drivers/mtd/spi/eon.c |  | ||||||
| @@ -29,10 +29,9 @@ static const struct eon_spi_flash_params |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| -struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode) |  | ||||||
| +int spi_flash_probe_eon(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct eon_spi_flash_params *params; |  | ||||||
| -	struct spi_flash *flash; |  | ||||||
|  	unsigned int i; |  | ||||||
|   |  | ||||||
|  	for (i = 0; i < ARRAY_SIZE(eon_spi_flash_table); ++i) { |  | ||||||
| @@ -43,16 +42,10 @@ struct spi_flash *spi_flash_probe_eon(st |  | ||||||
|   |  | ||||||
|  	if (i == ARRAY_SIZE(eon_spi_flash_table)) { |  | ||||||
|  		debug("SF: Unsupported EON ID %02x\n", idcode[1]); |  | ||||||
| -		return NULL; |  | ||||||
| +		return 0; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	flash = malloc(sizeof(*flash)); |  | ||||||
| -	if (!flash) { |  | ||||||
| -		debug("SF: Failed to allocate memory\n"); |  | ||||||
| -		return NULL; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
| -	flash->spi = spi; |  | ||||||
| +	flash->priv = (void *)params; |  | ||||||
|  	flash->name = params->name; |  | ||||||
|   |  | ||||||
|  	flash->write = spi_flash_cmd_write_multi; |  | ||||||
| @@ -63,5 +56,5 @@ struct spi_flash *spi_flash_probe_eon(st |  | ||||||
|  	flash->size = 256 * 16 |  | ||||||
|  	    * params->nr_sectors; |  | ||||||
|   |  | ||||||
| -	return flash; |  | ||||||
| +	return 1; |  | ||||||
|  } |  | ||||||
| --- a/drivers/mtd/spi/macronix.c |  | ||||||
| +++ b/drivers/mtd/spi/macronix.c |  | ||||||
| @@ -79,10 +79,9 @@ static const struct macronix_spi_flash_p |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| -struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode) |  | ||||||
| +int spi_flash_probe_macronix(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct macronix_spi_flash_params *params; |  | ||||||
| -	struct spi_flash *flash; |  | ||||||
|  	unsigned int i; |  | ||||||
|  	u16 id = idcode[2] | idcode[1] << 8; |  | ||||||
|   |  | ||||||
| @@ -94,16 +93,10 @@ struct spi_flash *spi_flash_probe_macron |  | ||||||
|   |  | ||||||
|  	if (i == ARRAY_SIZE(macronix_spi_flash_table)) { |  | ||||||
|  		debug("SF: Unsupported Macronix ID %04x\n", id); |  | ||||||
| -		return NULL; |  | ||||||
| +		return 0; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	flash = malloc(sizeof(*flash)); |  | ||||||
| -	if (!flash) { |  | ||||||
| -		debug("SF: Failed to allocate memory\n"); |  | ||||||
| -		return NULL; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
| -	flash->spi = spi; |  | ||||||
| +	flash->priv = (void *)params; |  | ||||||
|  	flash->name = params->name; |  | ||||||
|   |  | ||||||
|  	flash->write = spi_flash_cmd_write_multi; |  | ||||||
| @@ -116,5 +109,5 @@ struct spi_flash *spi_flash_probe_macron |  | ||||||
|  	/* Clear BP# bits for read-only flash */ |  | ||||||
|  	spi_flash_cmd_write_status(flash, 0); |  | ||||||
|   |  | ||||||
| -	return flash; |  | ||||||
| +	return 1; |  | ||||||
|  } |  | ||||||
| --- a/drivers/mtd/spi/ramtron.c |  | ||||||
| +++ b/drivers/mtd/spi/ramtron.c |  | ||||||
| @@ -69,17 +69,6 @@ struct ramtron_spi_fram_params { |  | ||||||
|  	const char *name;	/* name for display and/or matching */ |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| -struct ramtron_spi_fram { |  | ||||||
| -	struct spi_flash flash; |  | ||||||
| -	const struct ramtron_spi_fram_params *params; |  | ||||||
| -}; |  | ||||||
| - |  | ||||||
| -static inline struct ramtron_spi_fram *to_ramtron_spi_fram(struct spi_flash |  | ||||||
| -							     *flash) |  | ||||||
| -{ |  | ||||||
| -	return container_of(flash, struct ramtron_spi_fram, flash); |  | ||||||
| -} |  | ||||||
| - |  | ||||||
|  /* |  | ||||||
|   * table describing supported FRAM chips: |  | ||||||
|   * chips without RDID command must have the values 0xff for id1 and id2 |  | ||||||
| @@ -155,18 +144,18 @@ static const struct ramtron_spi_fram_par |  | ||||||
|  static int ramtron_common(struct spi_flash *flash, |  | ||||||
|  		u32 offset, size_t len, void *buf, u8 command) |  | ||||||
|  { |  | ||||||
| -	struct ramtron_spi_fram *sn = to_ramtron_spi_fram(flash); |  | ||||||
| +	const struct ramtron_spi_fram_params *params = flash->priv; |  | ||||||
|  	u8 cmd[4]; |  | ||||||
|  	int cmd_len; |  | ||||||
|  	int ret; |  | ||||||
|   |  | ||||||
| -	if (sn->params->addr_len == 3 && sn->params->merge_cmd == 0) { |  | ||||||
| +	if (params->addr_len == 3 && params->merge_cmd == 0) { |  | ||||||
|  		cmd[0] = command; |  | ||||||
|  		cmd[1] = offset >> 16; |  | ||||||
|  		cmd[2] = offset >> 8; |  | ||||||
|  		cmd[3] = offset; |  | ||||||
|  		cmd_len = 4; |  | ||||||
| -	} else if (sn->params->addr_len == 2 && sn->params->merge_cmd == 0) { |  | ||||||
| +	} else if (params->addr_len == 2 && params->merge_cmd == 0) { |  | ||||||
|  		cmd[0] = command; |  | ||||||
|  		cmd[1] = offset >> 8; |  | ||||||
|  		cmd[2] = offset; |  | ||||||
| @@ -230,10 +219,9 @@ static int ramtron_erase(struct spi_flas |  | ||||||
|   * nore: we are called here with idcode pointing to the first non-0x7f byte |  | ||||||
|   * already! |  | ||||||
|   */ |  | ||||||
| -struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode) |  | ||||||
| +int spi_fram_probe_ramtron(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct ramtron_spi_fram_params *params; |  | ||||||
| -	struct ramtron_spi_fram *sn; |  | ||||||
|  	unsigned int i; |  | ||||||
|  #ifdef CONFIG_SPI_FRAM_RAMTRON_NON_JEDEC |  | ||||||
|  	int ret; |  | ||||||
| @@ -259,11 +247,11 @@ struct spi_flash *spi_fram_probe_ramtron |  | ||||||
|  		 */ |  | ||||||
|  		ret = spi_flash_cmd(spi, CMD_READ_STATUS, &sr, 1); |  | ||||||
|  		if (ret) |  | ||||||
| -			return NULL; |  | ||||||
| +			return 0; |  | ||||||
|   |  | ||||||
|  		/* Bits 5,4,0 are fixed 0 for all devices */ |  | ||||||
|  		if ((sr & 0x31) != 0x00) |  | ||||||
| -			return NULL; |  | ||||||
| +			return 0; |  | ||||||
|  		/* now find the device */ |  | ||||||
|  		for (i = 0; i < ARRAY_SIZE(ramtron_spi_fram_table); i++) { |  | ||||||
|  			params = &ramtron_spi_fram_table[i]; |  | ||||||
| @@ -281,23 +269,16 @@ struct spi_flash *spi_fram_probe_ramtron |  | ||||||
|  	/* arriving here means no method has found a device we can handle */ |  | ||||||
|  	debug("SF/ramtron: unsupported device id0=%02x id1=%02x id2=%02x\n", |  | ||||||
|  		idcode[0], idcode[1], idcode[2]); |  | ||||||
| -	return NULL; |  | ||||||
| +	return 0; |  | ||||||
|   |  | ||||||
|  found: |  | ||||||
| -	sn = malloc(sizeof(*sn)); |  | ||||||
| -	if (!sn) { |  | ||||||
| -		debug("SF: Failed to allocate memory\n"); |  | ||||||
| -		return NULL; |  | ||||||
| -	} |  | ||||||
| +	flash->priv = (void *)params; |  | ||||||
| +	flash->name = params->name; |  | ||||||
|   |  | ||||||
| -	sn->params = params; |  | ||||||
| -	sn->flash.spi = spi; |  | ||||||
| -	sn->flash.name = params->name; |  | ||||||
| - |  | ||||||
| -	sn->flash.write = ramtron_write; |  | ||||||
| -	sn->flash.read = ramtron_read; |  | ||||||
| -	sn->flash.erase = ramtron_erase; |  | ||||||
| -	sn->flash.size = params->size; |  | ||||||
| +	flash->write = ramtron_write; |  | ||||||
| +	flash->read = ramtron_read; |  | ||||||
| +	flash->erase = ramtron_erase; |  | ||||||
| +	flash->size = params->size; |  | ||||||
|   |  | ||||||
| -	return &sn->flash; |  | ||||||
| +	return 1; |  | ||||||
|  } |  | ||||||
| --- a/drivers/mtd/spi/spansion.c |  | ||||||
| +++ b/drivers/mtd/spi/spansion.c |  | ||||||
| @@ -105,10 +105,9 @@ static const struct spansion_spi_flash_p |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| -struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode) |  | ||||||
| +int spi_flash_probe_spansion(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct spansion_spi_flash_params *params; |  | ||||||
| -	struct spi_flash *flash; |  | ||||||
|  	unsigned int i; |  | ||||||
|  	unsigned short jedec, ext_jedec; |  | ||||||
|   |  | ||||||
| @@ -125,16 +124,10 @@ struct spi_flash *spi_flash_probe_spansi |  | ||||||
|   |  | ||||||
|  	if (i == ARRAY_SIZE(spansion_spi_flash_table)) { |  | ||||||
|  		debug("SF: Unsupported SPANSION ID %04x %04x\n", jedec, ext_jedec); |  | ||||||
| -		return NULL; |  | ||||||
| +		return 0; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	flash = malloc(sizeof(*flash)); |  | ||||||
| -	if (!flash) { |  | ||||||
| -		debug("SF: Failed to allocate memory\n"); |  | ||||||
| -		return NULL; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
| -	flash->spi = spi; |  | ||||||
| +	flash->priv = (void *)params; |  | ||||||
|  	flash->name = params->name; |  | ||||||
|   |  | ||||||
|  	flash->write = spi_flash_cmd_write_multi; |  | ||||||
| @@ -144,5 +137,5 @@ struct spi_flash *spi_flash_probe_spansi |  | ||||||
|  	flash->sector_size = 256 * params->pages_per_sector; |  | ||||||
|  	flash->size = flash->sector_size * params->nr_sectors; |  | ||||||
|   |  | ||||||
| -	return flash; |  | ||||||
| +	return 1; |  | ||||||
|  } |  | ||||||
| --- a/drivers/mtd/spi/spi_flash.c |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash.c |  | ||||||
| @@ -296,7 +296,7 @@ int spi_flash_cmd_write_status(struct sp |  | ||||||
|  static struct { |  | ||||||
|  	const u8 shift; |  | ||||||
|  	const u8 idcode; |  | ||||||
| -	struct spi_flash *(*probe) (struct spi_slave *spi, u8 *idcode); |  | ||||||
| +	int (*probe) (struct spi_flash *flash, u8 *idcode); |  | ||||||
|  } flashes[] = { |  | ||||||
|  	/* Keep it sorted by define name */ |  | ||||||
|  #ifdef CONFIG_SPI_FLASH_ATMEL |  | ||||||
| @@ -343,7 +343,7 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|  		unsigned int max_hz, unsigned int spi_mode) |  | ||||||
|  { |  | ||||||
|  	struct spi_slave *spi; |  | ||||||
| -	struct spi_flash *flash = NULL; |  | ||||||
| +	struct spi_flash *flash; |  | ||||||
|  	int ret, i, shift; |  | ||||||
|  	u8 idcode[IDCODE_LEN], *idp; |  | ||||||
|  #ifdef CONFIG_NEEDS_MANUAL_RELOC |  | ||||||
| @@ -379,6 +379,15 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|  	print_buffer(0, idcode, 1, sizeof(idcode), 0); |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| +	flash = malloc(sizeof(*flash)); |  | ||||||
| +	if (!flash) { |  | ||||||
| +		debug("SF: failed to alloc memory\n"); |  | ||||||
| +		goto err_malloc; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	memset(flash, 0, sizeof(*flash)); |  | ||||||
| +	flash->spi = spi; |  | ||||||
| + |  | ||||||
|  	/* count the number of continuation bytes */ |  | ||||||
|  	for (shift = 0, idp = idcode; |  | ||||||
|  	     shift < IDCODE_CONT_LEN && *idp == 0x7f; |  | ||||||
| @@ -389,12 +398,12 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|  	for (i = 0; i < ARRAY_SIZE(flashes); ++i) |  | ||||||
|  		if (flashes[i].shift == shift && flashes[i].idcode == *idp) { |  | ||||||
|  			/* we have a match, call probe */ |  | ||||||
| -			flash = flashes[i].probe(spi, idp); |  | ||||||
| -			if (flash) |  | ||||||
| +			ret = flashes[i].probe(flash, idp); |  | ||||||
| +			if (ret) |  | ||||||
|  				break; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| -	if (!flash) { |  | ||||||
| +	if (ret <= 0) { |  | ||||||
|  		printf("SF: Unsupported manufacturer %02x\n", *idp); |  | ||||||
|  		goto err_manufacturer_probe; |  | ||||||
|  	} |  | ||||||
| @@ -408,6 +417,8 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|  	return flash; |  | ||||||
|   |  | ||||||
|  err_manufacturer_probe: |  | ||||||
| +	free(flash); |  | ||||||
| +err_malloc: |  | ||||||
|  err_read_id: |  | ||||||
|  	spi_release_bus(spi); |  | ||||||
|  err_claim_bus: |  | ||||||
| --- a/drivers/mtd/spi/spi_flash_internal.h |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash_internal.h |  | ||||||
| @@ -98,11 +98,11 @@ int spi_flash_cmd_wait_ready(struct spi_ |  | ||||||
|  int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len); |  | ||||||
|   |  | ||||||
|  /* Manufacturer-specific probe functions */ |  | ||||||
| -struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode); |  | ||||||
| -struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode); |  | ||||||
| -struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode); |  | ||||||
| -struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode); |  | ||||||
| -struct spi_flash *spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode); |  | ||||||
| -struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 *idcode); |  | ||||||
| -struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode); |  | ||||||
| -struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode); |  | ||||||
| +int spi_flash_probe_spansion(struct spi_flash *flash, u8 *idcode); |  | ||||||
| +int spi_flash_probe_atmel(struct spi_flash *flash, u8 *idcode); |  | ||||||
| +int spi_flash_probe_eon(struct spi_flash *flash, u8 *idcode); |  | ||||||
| +int spi_flash_probe_macronix(struct spi_flash *flash, u8 *idcode); |  | ||||||
| +int spi_flash_probe_sst(struct spi_flash *flash, u8 *idcode); |  | ||||||
| +int spi_flash_probe_stmicro(struct spi_flash *flash, u8 *idcode); |  | ||||||
| +int spi_flash_probe_winbond(struct spi_flash *flash, u8 *idcode); |  | ||||||
| +int spi_fram_probe_ramtron(struct spi_flash *flash, u8 *idcode); |  | ||||||
| --- a/drivers/mtd/spi/sst.c |  | ||||||
| +++ b/drivers/mtd/spi/sst.c |  | ||||||
| @@ -39,11 +39,6 @@ struct sst_spi_flash_params { |  | ||||||
|  	const char *name; |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| -struct sst_spi_flash { |  | ||||||
| -	struct spi_flash flash; |  | ||||||
| -	const struct sst_spi_flash_params *params; |  | ||||||
| -}; |  | ||||||
| - |  | ||||||
|  static const struct sst_spi_flash_params sst_spi_flash_table[] = { |  | ||||||
|  	{ |  | ||||||
|  		.idcode1 = 0x8d, |  | ||||||
| @@ -185,11 +180,9 @@ sst_write_wp(struct spi_flash *flash, u3 |  | ||||||
|  	return ret; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| -struct spi_flash * |  | ||||||
| -spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode) |  | ||||||
| +int spi_flash_probe_sst(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct sst_spi_flash_params *params; |  | ||||||
| -	struct sst_spi_flash *stm; |  | ||||||
|  	size_t i; |  | ||||||
|   |  | ||||||
|  	for (i = 0; i < ARRAY_SIZE(sst_spi_flash_table); ++i) { |  | ||||||
| @@ -200,31 +193,24 @@ spi_flash_probe_sst(struct spi_slave *sp |  | ||||||
|   |  | ||||||
|  	if (i == ARRAY_SIZE(sst_spi_flash_table)) { |  | ||||||
|  		debug("SF: Unsupported SST ID %02x\n", idcode[1]); |  | ||||||
| -		return NULL; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
| -	stm = malloc(sizeof(*stm)); |  | ||||||
| -	if (!stm) { |  | ||||||
| -		debug("SF: Failed to allocate memory\n"); |  | ||||||
| -		return NULL; |  | ||||||
| +		return 0; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	stm->params = params; |  | ||||||
| -	stm->flash.spi = spi; |  | ||||||
| -	stm->flash.name = params->name; |  | ||||||
| +	flash->priv = (void *)params; |  | ||||||
| +	flash->name = params->name; |  | ||||||
|   |  | ||||||
| -	if (stm->params->flags & SST_FEAT_WP) |  | ||||||
| -		stm->flash.write = sst_write_wp; |  | ||||||
| +	if (params->flags & SST_FEAT_WP) |  | ||||||
| +		flash->write = sst_write_wp; |  | ||||||
|  	else |  | ||||||
| -		stm->flash.write = spi_flash_cmd_write_multi; |  | ||||||
| -	stm->flash.erase = spi_flash_cmd_erase; |  | ||||||
| -	stm->flash.read = spi_flash_cmd_read_fast; |  | ||||||
| -	stm->flash.page_size = 256; |  | ||||||
| -	stm->flash.sector_size = 4096; |  | ||||||
| -	stm->flash.size = stm->flash.sector_size * params->nr_sectors; |  | ||||||
| +		flash->write = spi_flash_cmd_write_multi; |  | ||||||
| +	flash->erase = spi_flash_cmd_erase; |  | ||||||
| +	flash->read = spi_flash_cmd_read_fast; |  | ||||||
| +	flash->page_size = 256; |  | ||||||
| +	flash->sector_size = 4096; |  | ||||||
| +	flash->size = flash->sector_size * params->nr_sectors; |  | ||||||
|   |  | ||||||
|  	/* Flash powers up read-only, so clear BP# bits */ |  | ||||||
| -	spi_flash_cmd_write_status(&stm->flash, 0); |  | ||||||
| +	spi_flash_cmd_write_status(flash, 0); |  | ||||||
|   |  | ||||||
| -	return &stm->flash; |  | ||||||
| +	return 1; |  | ||||||
|  } |  | ||||||
| --- a/drivers/mtd/spi/stmicro.c |  | ||||||
| +++ b/drivers/mtd/spi/stmicro.c |  | ||||||
| @@ -112,10 +112,10 @@ static const struct stmicro_spi_flash_pa |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| -struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode) |  | ||||||
| +int spi_flash_probe_stmicro(struct spi_flash *flash, u8 * idcode) |  | ||||||
|  { |  | ||||||
|  	const struct stmicro_spi_flash_params *params; |  | ||||||
| -	struct spi_flash *flash; |  | ||||||
| +	struct spi_slave *spi = flash->spi; |  | ||||||
|  	unsigned int i; |  | ||||||
|  	u16 id; |  | ||||||
|   |  | ||||||
| @@ -123,13 +123,13 @@ struct spi_flash *spi_flash_probe_stmicr |  | ||||||
|  		i = spi_flash_cmd(spi, CMD_M25PXX_RES, |  | ||||||
|  				  idcode, 4); |  | ||||||
|  		if (i) |  | ||||||
| -			return NULL; |  | ||||||
| +			return 0; |  | ||||||
|  		if ((idcode[3] & 0xf0) == 0x10) { |  | ||||||
|  			idcode[0] = 0x20; |  | ||||||
|  			idcode[1] = 0x20; |  | ||||||
|  			idcode[2] = idcode[3] + 1; |  | ||||||
|  		} else |  | ||||||
| -			return NULL; |  | ||||||
| +			return 0; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	id = ((idcode[1] << 8) | idcode[2]); |  | ||||||
| @@ -143,16 +143,10 @@ struct spi_flash *spi_flash_probe_stmicr |  | ||||||
|   |  | ||||||
|  	if (i == ARRAY_SIZE(stmicro_spi_flash_table)) { |  | ||||||
|  		debug("SF: Unsupported STMicro ID %04x\n", id); |  | ||||||
| -		return NULL; |  | ||||||
| +		return 0; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	flash = malloc(sizeof(*flash)); |  | ||||||
| -	if (!flash) { |  | ||||||
| -		debug("SF: Failed to allocate memory\n"); |  | ||||||
| -		return NULL; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
| -	flash->spi = spi; |  | ||||||
| +	flash->priv = (void *)params; |  | ||||||
|  	flash->name = params->name; |  | ||||||
|   |  | ||||||
|  	flash->write = spi_flash_cmd_write_multi; |  | ||||||
| @@ -162,5 +156,5 @@ struct spi_flash *spi_flash_probe_stmicr |  | ||||||
|  	flash->sector_size = 256 * params->pages_per_sector; |  | ||||||
|  	flash->size = flash->sector_size * params->nr_sectors; |  | ||||||
|   |  | ||||||
| -	return flash; |  | ||||||
| +	return 1; |  | ||||||
|  } |  | ||||||
| --- a/drivers/mtd/spi/winbond.c |  | ||||||
| +++ b/drivers/mtd/spi/winbond.c |  | ||||||
| @@ -69,10 +69,9 @@ static const struct winbond_spi_flash_pa |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| -struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode) |  | ||||||
| +int spi_flash_probe_winbond(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct winbond_spi_flash_params *params; |  | ||||||
| -	struct spi_flash *flash; |  | ||||||
|  	unsigned int i; |  | ||||||
|   |  | ||||||
|  	for (i = 0; i < ARRAY_SIZE(winbond_spi_flash_table); i++) { |  | ||||||
| @@ -84,16 +83,10 @@ struct spi_flash *spi_flash_probe_winbon |  | ||||||
|  	if (i == ARRAY_SIZE(winbond_spi_flash_table)) { |  | ||||||
|  		debug("SF: Unsupported Winbond ID %02x%02x\n", |  | ||||||
|  				idcode[1], idcode[2]); |  | ||||||
| -		return NULL; |  | ||||||
| +		return 0; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	flash = malloc(sizeof(*flash)); |  | ||||||
| -	if (!flash) { |  | ||||||
| -		debug("SF: Failed to allocate memory\n"); |  | ||||||
| -		return NULL; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
| -	flash->spi = spi; |  | ||||||
| +	flash->priv = (void *)params; |  | ||||||
|  	flash->name = params->name; |  | ||||||
|   |  | ||||||
|  	flash->write = spi_flash_cmd_write_multi; |  | ||||||
| @@ -103,5 +96,5 @@ struct spi_flash *spi_flash_probe_winbon |  | ||||||
|  	flash->sector_size = 4096; |  | ||||||
|  	flash->size = 4096 * 16 * params->nr_blocks; |  | ||||||
|   |  | ||||||
| -	return flash; |  | ||||||
| +	return 1; |  | ||||||
|  } |  | ||||||
| --- a/include/spi_flash.h |  | ||||||
| +++ b/include/spi_flash.h |  | ||||||
| @@ -31,6 +31,7 @@ struct spi_flash { |  | ||||||
|  	struct spi_slave *spi; |  | ||||||
|   |  | ||||||
|  	const char	*name; |  | ||||||
| +	void		*priv; |  | ||||||
|   |  | ||||||
|  	/* Total flash size */ |  | ||||||
|  	u32		size; |  | ||||||
| @@ -0,0 +1,115 @@ | |||||||
|  | From 36b7400465fe2339f1c78274b3fd258ade3a4c00 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sat, 12 Oct 2013 21:30:07 +0200 | ||||||
|  | Subject: sf: move malloc of spi_flash to spi_flash_probe() | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c | ||||||
|  | index 04356f1..2bba10c 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_probe.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_probe.c | ||||||
|  | @@ -153,11 +153,10 @@ static const struct spi_flash_params spi_flash_params_table[] = { | ||||||
|  |  	 */ | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | -static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi, | ||||||
|  | +static int spi_flash_validate_params(struct spi_flash *flash, | ||||||
|  |  		u8 *idcode) | ||||||
|  |  { | ||||||
|  |  	const struct spi_flash_params *params; | ||||||
|  | -	struct spi_flash *flash; | ||||||
|  |  	int i; | ||||||
|  |  	u16 jedec = idcode[1] << 8 | idcode[2]; | ||||||
|  |  	u16 ext_jedec = idcode[3] << 8 | idcode[4]; | ||||||
|  | @@ -179,20 +178,12 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi, | ||||||
|  |  		debug("SF: Unsupported flash IDs: "); | ||||||
|  |  		debug("manuf %02x, jedec %04x, ext_jedec %04x\n", | ||||||
|  |  		       idcode[0], jedec, ext_jedec); | ||||||
|  | -		return NULL; | ||||||
|  | -	} | ||||||
|  | - | ||||||
|  | -	flash = malloc(sizeof(*flash)); | ||||||
|  | -	if (!flash) { | ||||||
|  | -		debug("SF: Failed to allocate spi_flash\n"); | ||||||
|  | -		return NULL; | ||||||
|  | +		return -1; | ||||||
|  |  	} | ||||||
|  | -	memset(flash, '\0', sizeof(*flash)); | ||||||
|  |   | ||||||
|  |  	/* Assign spi data */ | ||||||
|  | -	flash->spi = spi; | ||||||
|  |  	flash->name = params->name; | ||||||
|  | -	flash->memory_map = spi->memory_map; | ||||||
|  | +	flash->memory_map = flash->spi->memory_map; | ||||||
|  |   | ||||||
|  |  	/* Assign spi_flash ops */ | ||||||
|  |  	flash->write = spi_flash_cmd_write_ops; | ||||||
|  | @@ -239,7 +230,7 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi, | ||||||
|  |  		if (spi_flash_read_common(flash, &flash->bank_read_cmd, 1, | ||||||
|  |  					  &curr_bank, 1)) { | ||||||
|  |  			debug("SF: fail to read bank addr register\n"); | ||||||
|  | -			return NULL; | ||||||
|  | +			return -1; | ||||||
|  |  		} | ||||||
|  |  		flash->bank_curr = curr_bank; | ||||||
|  |  	} else { | ||||||
|  | @@ -254,7 +245,7 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi, | ||||||
|  |  		spi_flash_cmd_write_status(flash, 0); | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | -	return flash; | ||||||
|  | +	return 0; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  #ifdef CONFIG_OF_CONTROL | ||||||
|  | @@ -289,15 +280,22 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, | ||||||
|  |  		unsigned int max_hz, unsigned int spi_mode) | ||||||
|  |  { | ||||||
|  |  	struct spi_slave *spi; | ||||||
|  | -	struct spi_flash *flash = NULL; | ||||||
|  | +	struct spi_flash *flash; | ||||||
|  |  	u8 idcode[5]; | ||||||
|  |  	int ret; | ||||||
|  |   | ||||||
|  | +	flash = malloc(sizeof(*flash)); | ||||||
|  | +	if (!flash) { | ||||||
|  | +		debug("SF: Failed to allocate spi_flash\n"); | ||||||
|  | +		return NULL; | ||||||
|  | +	} | ||||||
|  | +	memset(flash, 0, sizeof(*flash)); | ||||||
|  | + | ||||||
|  |  	/* Setup spi_slave */ | ||||||
|  |  	spi = spi_setup_slave(bus, cs, max_hz, spi_mode); | ||||||
|  |  	if (!spi) { | ||||||
|  |  		debug("SF: Failed to set up slave\n"); | ||||||
|  | -		return NULL; | ||||||
|  | +		goto err_setup; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	/* Claim spi bus */ | ||||||
|  | @@ -320,8 +318,9 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  |  	/* Validate params from spi_flash_params table */ | ||||||
|  | -	flash = spi_flash_validate_params(spi, idcode); | ||||||
|  | -	if (!flash) | ||||||
|  | +	flash->spi = spi; | ||||||
|  | +	ret = spi_flash_validate_params(flash, idcode); | ||||||
|  | +	if (ret) | ||||||
|  |  		goto err_read_id; | ||||||
|  |   | ||||||
|  |  #ifdef CONFIG_OF_CONTROL | ||||||
|  | @@ -355,6 +354,9 @@ err_read_id: | ||||||
|  |  	spi_release_bus(spi); | ||||||
|  |  err_claim_bus: | ||||||
|  |  	spi_free_slave(spi); | ||||||
|  | +err_setup: | ||||||
|  | +	free(flash); | ||||||
|  | + | ||||||
|  |  	return NULL; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,131 +0,0 @@ | |||||||
| From f9ab44c271fbd82a5702b6ba067fa90e33a30089 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 15:29:27 +0100 |  | ||||||
| Subject: sf: add malloc-free probe functions dedicated for SPL |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/spi_flash.c |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash.c |  | ||||||
| @@ -339,11 +339,11 @@ static struct { |  | ||||||
|  DECLARE_GLOBAL_DATA_PTR; |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| -struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, |  | ||||||
| -		unsigned int max_hz, unsigned int spi_mode) |  | ||||||
| +int spi_flash_probe_spl(struct spi_flash *flash, unsigned int bus, |  | ||||||
| +			unsigned int cs, unsigned int max_hz, |  | ||||||
| +			unsigned int spi_mode) |  | ||||||
|  { |  | ||||||
|  	struct spi_slave *spi; |  | ||||||
| -	struct spi_flash *flash; |  | ||||||
|  	int ret, i, shift; |  | ||||||
|  	u8 idcode[IDCODE_LEN], *idp; |  | ||||||
|  #ifdef CONFIG_NEEDS_MANUAL_RELOC |  | ||||||
| @@ -359,8 +359,8 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|   |  | ||||||
|  	spi = spi_setup_slave(bus, cs, max_hz, spi_mode); |  | ||||||
|  	if (!spi) { |  | ||||||
| -		printf("SF: Failed to set up slave\n"); |  | ||||||
| -		return NULL; |  | ||||||
| +		debug("SF: Failed to set up slave\n"); |  | ||||||
| +		return -1; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	ret = spi_claim_bus(spi); |  | ||||||
| @@ -379,13 +379,6 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|  	print_buffer(0, idcode, 1, sizeof(idcode), 0); |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| -	flash = malloc(sizeof(*flash)); |  | ||||||
| -	if (!flash) { |  | ||||||
| -		debug("SF: failed to alloc memory\n"); |  | ||||||
| -		goto err_malloc; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
| -	memset(flash, 0, sizeof(*flash)); |  | ||||||
|  	flash->spi = spi; |  | ||||||
|   |  | ||||||
|  	/* count the number of continuation bytes */ |  | ||||||
| @@ -404,30 +397,58 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
|  	if (ret <= 0) { |  | ||||||
| -		printf("SF: Unsupported manufacturer %02x\n", *idp); |  | ||||||
| +		debug("SF: Unsupported manufacturer %02x\n", *idp); |  | ||||||
|  		goto err_manufacturer_probe; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	printf("SF: Detected %s with page size ", flash->name); |  | ||||||
| -	print_size(flash->sector_size, ", total "); |  | ||||||
| -	print_size(flash->size, "\n"); |  | ||||||
| - |  | ||||||
|  	spi_release_bus(spi); |  | ||||||
|   |  | ||||||
| -	return flash; |  | ||||||
| +	return 0; |  | ||||||
|   |  | ||||||
|  err_manufacturer_probe: |  | ||||||
| -	free(flash); |  | ||||||
| -err_malloc: |  | ||||||
|  err_read_id: |  | ||||||
|  	spi_release_bus(spi); |  | ||||||
|  err_claim_bus: |  | ||||||
|  	spi_free_slave(spi); |  | ||||||
| + |  | ||||||
| +	return ret; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, |  | ||||||
| +		unsigned int max_hz, unsigned int spi_mode) |  | ||||||
| +{ |  | ||||||
| +	struct spi_flash *flash; |  | ||||||
| +	int ret; |  | ||||||
| + |  | ||||||
| +	flash = malloc(sizeof(*flash)); |  | ||||||
| +	if (!flash) { |  | ||||||
| +		debug("SF: Failed to malloc spi_flash\n"); |  | ||||||
| +		return NULL; |  | ||||||
| +	} |  | ||||||
| +	memset(flash, 0, sizeof(*flash)); |  | ||||||
| + |  | ||||||
| +	ret = spi_flash_probe_spl(flash, bus, cs, max_hz, spi_mode); |  | ||||||
| +	if (ret) |  | ||||||
| +		goto err_probe; |  | ||||||
| + |  | ||||||
| +	printf("SF:    %s, page size ", flash->name); |  | ||||||
| +	print_size(flash->sector_size, ", total "); |  | ||||||
| +	print_size(flash->size, "\n"); |  | ||||||
| + |  | ||||||
| +	return flash; |  | ||||||
| + |  | ||||||
| +err_probe: |  | ||||||
| +	free(flash); |  | ||||||
|  	return NULL; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| -void spi_flash_free(struct spi_flash *flash) |  | ||||||
| +void spi_flash_free_spl(struct spi_flash *flash) |  | ||||||
|  { |  | ||||||
|  	spi_free_slave(flash->spi); |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +void spi_flash_free(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	spi_flash_free_spl(flash); |  | ||||||
|  	free(flash); |  | ||||||
|  } |  | ||||||
| --- a/include/spi_flash.h |  | ||||||
| +++ b/include/spi_flash.h |  | ||||||
| @@ -52,6 +52,11 @@ struct spi_flash *spi_flash_probe(unsign |  | ||||||
|  		unsigned int max_hz, unsigned int spi_mode); |  | ||||||
|  void spi_flash_free(struct spi_flash *flash); |  | ||||||
|   |  | ||||||
| +int spi_flash_probe_spl(struct spi_flash *flash, unsigned int bus, |  | ||||||
| +			unsigned int cs, unsigned int max_hz, |  | ||||||
| +			unsigned int spi_mode); |  | ||||||
| +void spi_flash_free_spl(struct spi_flash *flash); |  | ||||||
| + |  | ||||||
|  static inline int spi_flash_read(struct spi_flash *flash, u32 offset, |  | ||||||
|  		size_t len, void *buf) |  | ||||||
|  { |  | ||||||
| @@ -0,0 +1,87 @@ | |||||||
|  | From da11da943487e2f724f25d409bcaa1f099637c0b Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sun, 13 Oct 2013 14:56:45 +0200 | ||||||
|  | Subject: sf: add slim probe funtions for SPL | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c | ||||||
|  | index 2bba10c..380aa09 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_probe.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_probe.c | ||||||
|  | @@ -365,3 +365,58 @@ void spi_flash_free(struct spi_flash *flash) | ||||||
|  |  	spi_free_slave(flash->spi); | ||||||
|  |  	free(flash); | ||||||
|  |  } | ||||||
|  | + | ||||||
|  | +#ifdef CONFIG_SPI_SPL_SIMPLE | ||||||
|  | +int spl_spi_flash_probe(struct spi_flash *flash) | ||||||
|  | +{ | ||||||
|  | +	struct spi_slave *spi; | ||||||
|  | +	u8 idcode[5]; | ||||||
|  | +	int ret; | ||||||
|  | + | ||||||
|  | +	/* Setup spi_slave */ | ||||||
|  | +	spi = spi_setup_slave(CONFIG_SPL_SPI_BUS, CONFIG_SPL_SPI_CS, | ||||||
|  | +		CONFIG_SPL_SPI_MAX_HZ, CONFIG_SPL_SPI_MODE); | ||||||
|  | +	if (!spi) { | ||||||
|  | +		debug("SF: Failed to set up slave\n"); | ||||||
|  | +		return -1; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	/* Claim spi bus */ | ||||||
|  | +	ret = spi_claim_bus(spi); | ||||||
|  | +	if (ret) { | ||||||
|  | +		debug("SF: Failed to claim SPI bus: %d\n", ret); | ||||||
|  | +		goto err_claim_bus; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	/* Read the ID codes */ | ||||||
|  | +	ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode)); | ||||||
|  | +	if (ret) { | ||||||
|  | +		debug("SF: Failed to get idcodes\n"); | ||||||
|  | +		goto err_read_id; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	/* Validate params from spi_flash_params table */ | ||||||
|  | +	flash->spi = spi; | ||||||
|  | +	ret = spi_flash_validate_params(flash, idcode); | ||||||
|  | +	if (ret) | ||||||
|  | +		goto err_read_id; | ||||||
|  | + | ||||||
|  | +	/* Release spi bus */ | ||||||
|  | +	spi_release_bus(spi); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | + | ||||||
|  | +err_read_id: | ||||||
|  | +	spi_release_bus(spi); | ||||||
|  | +err_claim_bus: | ||||||
|  | +	spi_free_slave(spi); | ||||||
|  | +	flash->spi = NULL; | ||||||
|  | + | ||||||
|  | +	return ret; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +void spl_spi_flash_free(struct spi_flash *flash) | ||||||
|  | +{ | ||||||
|  | +	spi_free_slave(flash->spi); | ||||||
|  | +} | ||||||
|  | +#endif | ||||||
|  | diff --git a/include/spi_flash.h b/include/spi_flash.h | ||||||
|  | index 25ca8f1..411dd1b 100644 | ||||||
|  | --- a/include/spi_flash.h | ||||||
|  | +++ b/include/spi_flash.h | ||||||
|  | @@ -69,6 +69,9 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, | ||||||
|  |  		unsigned int max_hz, unsigned int spi_mode); | ||||||
|  |  void spi_flash_free(struct spi_flash *flash); | ||||||
|  |   | ||||||
|  | +int spl_spi_flash_probe(struct spi_flash *flash); | ||||||
|  | +void spl_spi_flash_free(struct spi_flash *flash); | ||||||
|  | + | ||||||
|  |  static inline int spi_flash_read(struct spi_flash *flash, u32 offset, | ||||||
|  |  		size_t len, void *buf) | ||||||
|  |  { | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,107 +0,0 @@ | |||||||
| From acb2721e1cd2e7488a7b08a4ed590177369a1689 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Tue, 6 Nov 2012 19:10:40 +0100 |  | ||||||
| Subject: sf: factor out the flash address calculation |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/spi_flash.c |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash.c |  | ||||||
| @@ -15,12 +15,22 @@ |  | ||||||
|   |  | ||||||
|  #include "spi_flash_internal.h" |  | ||||||
|   |  | ||||||
| -static void spi_flash_addr(u32 addr, u8 *cmd) |  | ||||||
| +static void spi_flash_addr(struct spi_flash *flash, u32 addr, u8 *cmd, u8 *cmd_len) |  | ||||||
|  { |  | ||||||
|  	/* cmd[0] is actual command */ |  | ||||||
|  	cmd[1] = addr >> 16; |  | ||||||
|  	cmd[2] = addr >> 8; |  | ||||||
|  	cmd[3] = addr >> 0; |  | ||||||
| +	*cmd_len = 4; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +static void spi_flash_page_addr(struct spi_flash *flash, u32 page_addr, u32 byte_addr, u8 *cmd, u8 *cmd_len) |  | ||||||
| +{ |  | ||||||
| +	/* cmd[0] is actual command */ |  | ||||||
| +	cmd[1] = page_addr >> 8; |  | ||||||
| +	cmd[2] = page_addr >> 0; |  | ||||||
| +	cmd[3] = byte_addr; |  | ||||||
| +	*cmd_len = 4; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  static int spi_flash_read_write(struct spi_slave *spi, |  | ||||||
| @@ -71,7 +81,7 @@ int spi_flash_cmd_write_multi(struct spi |  | ||||||
|  	unsigned long page_addr, byte_addr, page_size; |  | ||||||
|  	size_t chunk_len, actual; |  | ||||||
|  	int ret; |  | ||||||
| -	u8 cmd[4]; |  | ||||||
| +	u8 cmd[4], cmd_len; |  | ||||||
|   |  | ||||||
|  	page_size = flash->page_size; |  | ||||||
|  	page_addr = offset / page_size; |  | ||||||
| @@ -87,9 +97,7 @@ int spi_flash_cmd_write_multi(struct spi |  | ||||||
|  	for (actual = 0; actual < len; actual += chunk_len) { |  | ||||||
|  		chunk_len = min(len - actual, page_size - byte_addr); |  | ||||||
|   |  | ||||||
| -		cmd[1] = page_addr >> 8; |  | ||||||
| -		cmd[2] = page_addr; |  | ||||||
| -		cmd[3] = byte_addr; |  | ||||||
| +		spi_flash_page_addr(flash, page_addr, byte_addr, cmd, &cmd_len); |  | ||||||
|   |  | ||||||
|  		debug("PP: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x } chunk_len = %zu\n", |  | ||||||
|  		      buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], chunk_len); |  | ||||||
| @@ -100,7 +108,7 @@ int spi_flash_cmd_write_multi(struct spi |  | ||||||
|  			break; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| -		ret = spi_flash_cmd_write(flash->spi, cmd, 4, |  | ||||||
| +		ret = spi_flash_cmd_write(flash->spi, cmd, cmd_len, |  | ||||||
|  					  buf + actual, chunk_len); |  | ||||||
|  		if (ret < 0) { |  | ||||||
|  			debug("SF: write failed\n"); |  | ||||||
| @@ -138,13 +146,13 @@ int spi_flash_read_common(struct spi_fla |  | ||||||
|  int spi_flash_cmd_read_fast(struct spi_flash *flash, u32 offset, |  | ||||||
|  		size_t len, void *data) |  | ||||||
|  { |  | ||||||
| -	u8 cmd[5]; |  | ||||||
| +	u8 cmd[5], cmd_len; |  | ||||||
|   |  | ||||||
|  	cmd[0] = CMD_READ_ARRAY_FAST; |  | ||||||
| -	spi_flash_addr(offset, cmd); |  | ||||||
| -	cmd[4] = 0x00; |  | ||||||
| +	spi_flash_addr(flash, offset, cmd, &cmd_len); |  | ||||||
| +	cmd[cmd_len] = 0x00; |  | ||||||
|   |  | ||||||
| -	return spi_flash_read_common(flash, cmd, sizeof(cmd), data, len); |  | ||||||
| +	return spi_flash_read_common(flash, cmd, cmd_len + 1, data, len); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  int spi_flash_cmd_poll_bit(struct spi_flash *flash, unsigned long timeout, |  | ||||||
| @@ -194,7 +202,7 @@ int spi_flash_cmd_erase(struct spi_flash |  | ||||||
|  { |  | ||||||
|  	u32 start, end, erase_size; |  | ||||||
|  	int ret; |  | ||||||
| -	u8 cmd[4]; |  | ||||||
| +	u8 cmd[4], cmd_len; |  | ||||||
|   |  | ||||||
|  	erase_size = flash->sector_size; |  | ||||||
|  	if (offset % erase_size || len % erase_size) { |  | ||||||
| @@ -216,7 +224,7 @@ int spi_flash_cmd_erase(struct spi_flash |  | ||||||
|  	end = start + len; |  | ||||||
|   |  | ||||||
|  	while (offset < end) { |  | ||||||
| -		spi_flash_addr(offset, cmd); |  | ||||||
| +		spi_flash_addr(flash, offset, cmd, &cmd_len); |  | ||||||
|  		offset += erase_size; |  | ||||||
|   |  | ||||||
|  		debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], |  | ||||||
| @@ -226,7 +234,7 @@ int spi_flash_cmd_erase(struct spi_flash |  | ||||||
|  		if (ret) |  | ||||||
|  			goto out; |  | ||||||
|   |  | ||||||
| -		ret = spi_flash_cmd_write(flash->spi, cmd, sizeof(cmd), NULL, 0); |  | ||||||
| +		ret = spi_flash_cmd_write(flash->spi, cmd, cmd_len, NULL, 0); |  | ||||||
|  		if (ret) |  | ||||||
|  			goto out; |  | ||||||
|   |  | ||||||
| @@ -0,0 +1,143 @@ | |||||||
|  | From 6fb5f86b094756d94de8abe7425e3d290ff22dd2 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sun, 13 Oct 2013 15:09:28 +0200 | ||||||
|  | Subject: sf: make calculatiom of address bytes completely configurable | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c | ||||||
|  | index d34747b..207adf5 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_ops.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_ops.c | ||||||
|  | @@ -15,12 +15,17 @@ | ||||||
|  |   | ||||||
|  |  #include "sf_internal.h" | ||||||
|  |   | ||||||
|  | -static void spi_flash_addr(u32 addr, u8 *cmd) | ||||||
|  | +static void spi_flash_addr(const struct spi_flash *flash, u32 addr, u8 *cmd) | ||||||
|  |  { | ||||||
|  |  	/* cmd[0] is actual command */ | ||||||
|  | -	cmd[1] = addr >> 16; | ||||||
|  | -	cmd[2] = addr >> 8; | ||||||
|  | -	cmd[3] = addr >> 0; | ||||||
|  | +	cmd[1] = addr >> (flash->addr_width * 8 - 8); | ||||||
|  | +	cmd[2] = addr >> (flash->addr_width * 8 - 16); | ||||||
|  | +	cmd[3] = addr >> (flash->addr_width * 8 - 24); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int spi_flash_cmdsz(const struct spi_flash *flash) | ||||||
|  | +{ | ||||||
|  | +	return 1 + flash->addr_width; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  int spi_flash_cmd_write_status(struct spi_flash *flash, u8 sr) | ||||||
|  | @@ -158,7 +163,7 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, | ||||||
|  |  int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len) | ||||||
|  |  { | ||||||
|  |  	u32 erase_size; | ||||||
|  | -	u8 cmd[4]; | ||||||
|  | +	u8 cmd[4], cmd_len; | ||||||
|  |  	int ret = -1; | ||||||
|  |   | ||||||
|  |  	erase_size = flash->erase_size; | ||||||
|  | @@ -180,12 +185,13 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len) | ||||||
|  |  		if (ret < 0) | ||||||
|  |  			goto done; | ||||||
|  |  #endif | ||||||
|  | -		spi_flash_addr(offset, cmd); | ||||||
|  | +		spi_flash_addr(flash, offset, cmd); | ||||||
|  | +		cmd_len = spi_flash_cmdsz(flash); | ||||||
|  |   | ||||||
|  |  		debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], | ||||||
|  |  		      cmd[2], cmd[3], offset); | ||||||
|  |   | ||||||
|  | -		ret = spi_flash_write_common(flash, cmd, sizeof(cmd), NULL, 0); | ||||||
|  | +		ret = spi_flash_write_common(flash, cmd, cmd_len, NULL, 0); | ||||||
|  |  		if (ret < 0) { | ||||||
|  |  			debug("SF: erase failed\n"); | ||||||
|  |  			goto done; | ||||||
|  | @@ -206,7 +212,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  { | ||||||
|  |  	unsigned long byte_addr, page_size; | ||||||
|  |  	size_t chunk_len, actual; | ||||||
|  | -	u8 cmd[4]; | ||||||
|  | +	u8 cmd[4], cmd_len; | ||||||
|  |  	int ret = -1; | ||||||
|  |   | ||||||
|  |  	ret = spi_claim_bus(flash->spi); | ||||||
|  | @@ -230,12 +236,13 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  		if (flash->spi->max_write_size) | ||||||
|  |  			chunk_len = min(chunk_len, flash->spi->max_write_size); | ||||||
|  |   | ||||||
|  | -		spi_flash_addr(offset, cmd); | ||||||
|  | +		spi_flash_addr(flash, offset, cmd); | ||||||
|  | +		cmd_len = spi_flash_cmdsz(flash); | ||||||
|  |   | ||||||
|  |  		debug("PP: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x } chunk_len = %zu\n", | ||||||
|  |  		      buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], chunk_len); | ||||||
|  |   | ||||||
|  | -		ret = spi_flash_write_common(flash, cmd, sizeof(cmd), | ||||||
|  | +		ret = spi_flash_write_common(flash, cmd, cmd_len, | ||||||
|  |  					buf + actual, chunk_len); | ||||||
|  |  		if (ret < 0) { | ||||||
|  |  			debug("SF: write failed\n"); | ||||||
|  | @@ -269,7 +276,7 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd, | ||||||
|  |  int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  		size_t len, void *data) | ||||||
|  |  { | ||||||
|  | -	u8 cmd[5], bank_sel = 0; | ||||||
|  | +	u8 cmd[5], cmd_len, bank_sel = 0; | ||||||
|  |  	u32 remain_len, read_len; | ||||||
|  |  	int ret = -1; | ||||||
|  |   | ||||||
|  | @@ -288,7 +295,6 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	cmd[0] = CMD_READ_ARRAY_FAST; | ||||||
|  | -	cmd[4] = 0x00; | ||||||
|  |   | ||||||
|  |  	while (len) { | ||||||
|  |  #ifdef CONFIG_SPI_FLASH_BAR | ||||||
|  | @@ -306,9 +312,11 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  		else | ||||||
|  |  			read_len = remain_len; | ||||||
|  |   | ||||||
|  | -		spi_flash_addr(offset, cmd); | ||||||
|  | +		spi_flash_addr(flash, offset, cmd); | ||||||
|  | +		cmd_len = spi_flash_cmdsz(flash); | ||||||
|  | +		cmd[cmd_len] = 0x00; | ||||||
|  |   | ||||||
|  | -		ret = spi_flash_read_common(flash, cmd, sizeof(cmd), | ||||||
|  | +		ret = spi_flash_read_common(flash, cmd, cmd_len + 1, | ||||||
|  |  							data, read_len); | ||||||
|  |  		if (ret < 0) { | ||||||
|  |  			debug("SF: read failed\n"); | ||||||
|  | diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c | ||||||
|  | index 380aa09..84289db 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_probe.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_probe.c | ||||||
|  | @@ -218,6 +218,9 @@ static int spi_flash_validate_params(struct spi_flash *flash, | ||||||
|  |  		flash->poll_cmd = CMD_FLAG_STATUS; | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | +	/* Configure default 3-byte addressing */ | ||||||
|  | +	flash->addr_width = 3; | ||||||
|  | + | ||||||
|  |  	/* Configure the BAR - discover bank cmds and read current bank */ | ||||||
|  |  #ifdef CONFIG_SPI_FLASH_BAR | ||||||
|  |  	u8 curr_bank = 0; | ||||||
|  | diff --git a/include/spi_flash.h b/include/spi_flash.h | ||||||
|  | index 411dd1b..cc9398b 100644 | ||||||
|  | --- a/include/spi_flash.h | ||||||
|  | +++ b/include/spi_flash.h | ||||||
|  | @@ -57,6 +57,7 @@ struct spi_flash { | ||||||
|  |  #endif | ||||||
|  |  	u8 poll_cmd; | ||||||
|  |  	u8 erase_cmd; | ||||||
|  | +	u8 addr_width; | ||||||
|  |   | ||||||
|  |  	void *memory_map; | ||||||
|  |  	int (*read)(struct spi_flash *flash, u32 offset, size_t len, void *buf); | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,161 +0,0 @@ | |||||||
| From fb9ed0ef6f0ba6b6535c64dcfcf45c161723e56f Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Tue, 6 Nov 2012 19:31:38 +0100 |  | ||||||
| Subject: sf: add generic support for 4-byte address mode |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/spi_flash.c |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash.c |  | ||||||
| @@ -18,19 +18,35 @@ |  | ||||||
|  static void spi_flash_addr(struct spi_flash *flash, u32 addr, u8 *cmd, u8 *cmd_len) |  | ||||||
|  { |  | ||||||
|  	/* cmd[0] is actual command */ |  | ||||||
| -	cmd[1] = addr >> 16; |  | ||||||
| -	cmd[2] = addr >> 8; |  | ||||||
| -	cmd[3] = addr >> 0; |  | ||||||
| -	*cmd_len = 4; |  | ||||||
| +	if (spi_flash_use_4byte_mode(flash)) { |  | ||||||
| +		cmd[1] = addr >> 24; |  | ||||||
| +		cmd[2] = addr >> 16; |  | ||||||
| +		cmd[3] = addr >> 8; |  | ||||||
| +		cmd[4] = addr >> 0; |  | ||||||
| +		*cmd_len = 5; |  | ||||||
| +	} else { |  | ||||||
| +		cmd[1] = addr >> 16; |  | ||||||
| +		cmd[2] = addr >> 8; |  | ||||||
| +		cmd[3] = addr >> 0; |  | ||||||
| +		*cmd_len = 4; |  | ||||||
| +	} |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  static void spi_flash_page_addr(struct spi_flash *flash, u32 page_addr, u32 byte_addr, u8 *cmd, u8 *cmd_len) |  | ||||||
|  { |  | ||||||
|  	/* cmd[0] is actual command */ |  | ||||||
| -	cmd[1] = page_addr >> 8; |  | ||||||
| -	cmd[2] = page_addr >> 0; |  | ||||||
| -	cmd[3] = byte_addr; |  | ||||||
| -	*cmd_len = 4; |  | ||||||
| +	if (spi_flash_use_4byte_mode(flash)) { |  | ||||||
| +		cmd[1] = page_addr >> 16; |  | ||||||
| +		cmd[2] = page_addr >> 8; |  | ||||||
| +		cmd[3] = page_addr >> 0; |  | ||||||
| +		cmd[4] = byte_addr; |  | ||||||
| +		*cmd_len = 5; |  | ||||||
| +	} else { |  | ||||||
| +		cmd[1] = page_addr >> 8; |  | ||||||
| +		cmd[2] = page_addr >> 0; |  | ||||||
| +		cmd[3] = byte_addr; |  | ||||||
| +		*cmd_len = 4; |  | ||||||
| +	} |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  static int spi_flash_read_write(struct spi_slave *spi, |  | ||||||
| @@ -81,7 +97,7 @@ int spi_flash_cmd_write_multi(struct spi |  | ||||||
|  	unsigned long page_addr, byte_addr, page_size; |  | ||||||
|  	size_t chunk_len, actual; |  | ||||||
|  	int ret; |  | ||||||
| -	u8 cmd[4], cmd_len; |  | ||||||
| +	u8 cmd[5], cmd_len; |  | ||||||
|   |  | ||||||
|  	page_size = flash->page_size; |  | ||||||
|  	page_addr = offset / page_size; |  | ||||||
| @@ -99,8 +115,8 @@ int spi_flash_cmd_write_multi(struct spi |  | ||||||
|   |  | ||||||
|  		spi_flash_page_addr(flash, page_addr, byte_addr, cmd, &cmd_len); |  | ||||||
|   |  | ||||||
| -		debug("PP: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x } chunk_len = %zu\n", |  | ||||||
| -		      buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], chunk_len); |  | ||||||
| +		debug("PP: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x%02x } chunk_len = %zu\n", |  | ||||||
| +		      buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], chunk_len); |  | ||||||
|   |  | ||||||
|  		ret = spi_flash_cmd_write_enable(flash); |  | ||||||
|  		if (ret < 0) { |  | ||||||
| @@ -146,7 +162,7 @@ int spi_flash_read_common(struct spi_fla |  | ||||||
|  int spi_flash_cmd_read_fast(struct spi_flash *flash, u32 offset, |  | ||||||
|  		size_t len, void *data) |  | ||||||
|  { |  | ||||||
| -	u8 cmd[5], cmd_len; |  | ||||||
| +	u8 cmd[6], cmd_len; |  | ||||||
|   |  | ||||||
|  	cmd[0] = CMD_READ_ARRAY_FAST; |  | ||||||
|  	spi_flash_addr(flash, offset, cmd, &cmd_len); |  | ||||||
| @@ -202,7 +218,7 @@ int spi_flash_cmd_erase(struct spi_flash |  | ||||||
|  { |  | ||||||
|  	u32 start, end, erase_size; |  | ||||||
|  	int ret; |  | ||||||
| -	u8 cmd[4], cmd_len; |  | ||||||
| +	u8 cmd[5], cmd_len; |  | ||||||
|   |  | ||||||
|  	erase_size = flash->sector_size; |  | ||||||
|  	if (offset % erase_size || len % erase_size) { |  | ||||||
| @@ -227,8 +243,8 @@ int spi_flash_cmd_erase(struct spi_flash |  | ||||||
|  		spi_flash_addr(flash, offset, cmd, &cmd_len); |  | ||||||
|  		offset += erase_size; |  | ||||||
|   |  | ||||||
| -		debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], |  | ||||||
| -		      cmd[2], cmd[3], offset); |  | ||||||
| +		debug("SF: erase %2x %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], |  | ||||||
| +		      cmd[2], cmd[3], cmd[4], offset); |  | ||||||
|   |  | ||||||
|  		ret = spi_flash_cmd_write_enable(flash); |  | ||||||
|  		if (ret) |  | ||||||
| @@ -409,6 +425,12 @@ int spi_flash_probe_spl(struct spi_flash |  | ||||||
|  		goto err_manufacturer_probe; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| +	ret = spi_flash_set_4byte_mode(flash); |  | ||||||
| +	if (ret) { |  | ||||||
| +		debug("SF: Failed to enable 4 byte mode: %d\n", ret); |  | ||||||
| +		goto err_manufacturer_probe; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
|  	spi_release_bus(spi); |  | ||||||
|   |  | ||||||
|  	return 0; |  | ||||||
| --- a/drivers/mtd/spi/spi_flash_internal.h |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash_internal.h |  | ||||||
| @@ -97,6 +97,31 @@ int spi_flash_cmd_wait_ready(struct spi_ |  | ||||||
|  /* Erase sectors. */ |  | ||||||
|  int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len); |  | ||||||
|   |  | ||||||
| +#ifdef CONFIG_SPI_FLASH_4BYTE_MODE |  | ||||||
| +static inline int spi_flash_use_4byte_mode(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	return NULL != flash->set_4byte_mode; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +static inline int spi_flash_set_4byte_mode(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	if (spi_flash_use_4byte_mode(flash)) |  | ||||||
| +		return flash->set_4byte_mode(flash); |  | ||||||
| + |  | ||||||
| +	return 0; |  | ||||||
| +} |  | ||||||
| +#else |  | ||||||
| +static inline int spi_flash_use_4byte_mode(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	return 0; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +static inline int spi_flash_set_4byte_mode(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	return 0; |  | ||||||
| +} |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
|  /* Manufacturer-specific probe functions */ |  | ||||||
|  int spi_flash_probe_spansion(struct spi_flash *flash, u8 *idcode); |  | ||||||
|  int spi_flash_probe_atmel(struct spi_flash *flash, u8 *idcode); |  | ||||||
| --- a/include/spi_flash.h |  | ||||||
| +++ b/include/spi_flash.h |  | ||||||
| @@ -46,6 +46,9 @@ struct spi_flash { |  | ||||||
|  				size_t len, const void *buf); |  | ||||||
|  	int		(*erase)(struct spi_flash *flash, u32 offset, |  | ||||||
|  				size_t len); |  | ||||||
| +#ifdef CONFIG_SPI_FLASH_4BYTE_MODE |  | ||||||
| +	int		(*set_4byte_mode)(struct spi_flash *flash); |  | ||||||
| +#endif |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, |  | ||||||
| @@ -0,0 +1,169 @@ | |||||||
|  | From 3af3addee645bd81537be1ddee49969f8dfc64ee Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sun, 13 Oct 2013 15:24:56 +0200 | ||||||
|  | Subject: sf: add support for 4-byte addressing | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h | ||||||
|  | index 732ddf8..c5e8eb1 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_internal.h | ||||||
|  | +++ b/drivers/mtd/spi/sf_internal.h | ||||||
|  | @@ -38,12 +38,14 @@ | ||||||
|  |  #define CMD_READ_ID			0x9f | ||||||
|  |   | ||||||
|  |  /* Bank addr access commands */ | ||||||
|  | -#ifdef CONFIG_SPI_FLASH_BAR | ||||||
|  | -# define CMD_BANKADDR_BRWR		0x17 | ||||||
|  | -# define CMD_BANKADDR_BRRD		0x16 | ||||||
|  | -# define CMD_EXTNADDR_WREAR		0xC5 | ||||||
|  | -# define CMD_EXTNADDR_RDEAR		0xC8 | ||||||
|  | -#endif | ||||||
|  | +#define CMD_BANKADDR_BRWR		0x17 | ||||||
|  | +#define CMD_BANKADDR_BRRD		0x16 | ||||||
|  | +#define CMD_EXTNADDR_WREAR		0xC5 | ||||||
|  | +#define CMD_EXTNADDR_RDEAR		0xC8 | ||||||
|  | + | ||||||
|  | +/* Macronix style 4-byte addressing */ | ||||||
|  | +#define CMD_EN4B			0xb7 | ||||||
|  | +#define CMD_EX4B			0xe9 | ||||||
|  |   | ||||||
|  |  /* Common status */ | ||||||
|  |  #define STATUS_WIP			0x01 | ||||||
|  | diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c | ||||||
|  | index 207adf5..1d072f8 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_ops.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_ops.c | ||||||
|  | @@ -21,6 +21,7 @@ static void spi_flash_addr(const struct spi_flash *flash, u32 addr, u8 *cmd) | ||||||
|  |  	cmd[1] = addr >> (flash->addr_width * 8 - 8); | ||||||
|  |  	cmd[2] = addr >> (flash->addr_width * 8 - 16); | ||||||
|  |  	cmd[3] = addr >> (flash->addr_width * 8 - 24); | ||||||
|  | +	cmd[4] = addr >> (flash->addr_width * 8 - 32); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static int spi_flash_cmdsz(const struct spi_flash *flash) | ||||||
|  | @@ -163,7 +164,7 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, | ||||||
|  |  int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len) | ||||||
|  |  { | ||||||
|  |  	u32 erase_size; | ||||||
|  | -	u8 cmd[4], cmd_len; | ||||||
|  | +	u8 cmd[5], cmd_len; | ||||||
|  |  	int ret = -1; | ||||||
|  |   | ||||||
|  |  	erase_size = flash->erase_size; | ||||||
|  | @@ -188,8 +189,8 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len) | ||||||
|  |  		spi_flash_addr(flash, offset, cmd); | ||||||
|  |  		cmd_len = spi_flash_cmdsz(flash); | ||||||
|  |   | ||||||
|  | -		debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], | ||||||
|  | -		      cmd[2], cmd[3], offset); | ||||||
|  | +		debug("SF: erase %2x %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], | ||||||
|  | +		      cmd[2], cmd[3], cmd[4], offset); | ||||||
|  |   | ||||||
|  |  		ret = spi_flash_write_common(flash, cmd, cmd_len, NULL, 0); | ||||||
|  |  		if (ret < 0) { | ||||||
|  | @@ -212,7 +213,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  { | ||||||
|  |  	unsigned long byte_addr, page_size; | ||||||
|  |  	size_t chunk_len, actual; | ||||||
|  | -	u8 cmd[4], cmd_len; | ||||||
|  | +	u8 cmd[5], cmd_len; | ||||||
|  |  	int ret = -1; | ||||||
|  |   | ||||||
|  |  	ret = spi_claim_bus(flash->spi); | ||||||
|  | @@ -239,8 +240,8 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  		spi_flash_addr(flash, offset, cmd); | ||||||
|  |  		cmd_len = spi_flash_cmdsz(flash); | ||||||
|  |   | ||||||
|  | -		debug("PP: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x } chunk_len = %zu\n", | ||||||
|  | -		      buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], chunk_len); | ||||||
|  | +		debug("PP: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x%02x } chunk_len = %zu\n", | ||||||
|  | +		      buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], chunk_len); | ||||||
|  |   | ||||||
|  |  		ret = spi_flash_write_common(flash, cmd, cmd_len, | ||||||
|  |  					buf + actual, chunk_len); | ||||||
|  | @@ -276,9 +277,13 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd, | ||||||
|  |  int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  		size_t len, void *data) | ||||||
|  |  { | ||||||
|  | -	u8 cmd[5], cmd_len, bank_sel = 0; | ||||||
|  | -	u32 remain_len, read_len; | ||||||
|  | +	u8 cmd[6], cmd_len; | ||||||
|  | +	u32 read_len; | ||||||
|  |  	int ret = -1; | ||||||
|  | +#ifdef CONFIG_SPI_FLASH_BAR | ||||||
|  | +	u8 bank_sel = 0; | ||||||
|  | +	u32 remain_len; | ||||||
|  | +#endif | ||||||
|  |   | ||||||
|  |  	ret = spi_claim_bus(flash->spi); | ||||||
|  |  	if (ret) { | ||||||
|  | @@ -305,12 +310,15 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, | ||||||
|  |  			debug("SF: fail to set bank%d\n", bank_sel); | ||||||
|  |  			goto done; | ||||||
|  |  		} | ||||||
|  | -#endif | ||||||
|  | + | ||||||
|  |  		remain_len = (SPI_FLASH_16MB_BOUN * (bank_sel + 1)) - offset; | ||||||
|  |  		if (len < remain_len) | ||||||
|  |  			read_len = len; | ||||||
|  |  		else | ||||||
|  |  			read_len = remain_len; | ||||||
|  | +#else | ||||||
|  | +		read_len = len; | ||||||
|  | +#endif | ||||||
|  |   | ||||||
|  |  		spi_flash_addr(flash, offset, cmd); | ||||||
|  |  		cmd_len = spi_flash_cmdsz(flash); | ||||||
|  | diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c | ||||||
|  | index 84289db..ac44287 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_probe.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_probe.c | ||||||
|  | @@ -153,6 +153,25 @@ static const struct spi_flash_params spi_flash_params_table[] = { | ||||||
|  |  	 */ | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +int spi_flash_4byte_set(struct spi_flash *flash, u8 idcode0, int enable) | ||||||
|  | +{ | ||||||
|  | +	u8 cmd, bankaddr; | ||||||
|  | + | ||||||
|  | +	switch (idcode0) { | ||||||
|  | +	case 0xc2: | ||||||
|  | +	case 0xef: | ||||||
|  | +	case 0x1c: | ||||||
|  | +		/* Macronix style */ | ||||||
|  | +		cmd = enable ? CMD_EN4B : CMD_EX4B; | ||||||
|  | +		return spi_flash_cmd(flash->spi, cmd, NULL, 0); | ||||||
|  | +	default: | ||||||
|  | +		/* Spansion style */ | ||||||
|  | +		cmd = CMD_BANKADDR_BRWR; | ||||||
|  | +		bankaddr = enable << 7; | ||||||
|  | +		return spi_flash_cmd_write(flash->spi, &cmd, 1, &bankaddr, 1); | ||||||
|  | +	} | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  static int spi_flash_validate_params(struct spi_flash *flash, | ||||||
|  |  		u8 *idcode) | ||||||
|  |  { | ||||||
|  | @@ -218,8 +237,18 @@ static int spi_flash_validate_params(struct spi_flash *flash, | ||||||
|  |  		flash->poll_cmd = CMD_FLAG_STATUS; | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | +#ifndef CONFIG_SPI_FLASH_BAR | ||||||
|  | +	/* enable 4-byte addressing if the device exceeds 16MiB */ | ||||||
|  | +	if (flash->size > SPI_FLASH_16MB_BOUN) { | ||||||
|  | +		flash->addr_width = 4; | ||||||
|  | +		spi_flash_4byte_set(flash, idcode[0], 1); | ||||||
|  | +	} else { | ||||||
|  | +		flash->addr_width = 3; | ||||||
|  | +	} | ||||||
|  | +#else | ||||||
|  |  	/* Configure default 3-byte addressing */ | ||||||
|  |  	flash->addr_width = 3; | ||||||
|  | +#endif | ||||||
|  |   | ||||||
|  |  	/* Configure the BAR - discover bank cmds and read current bank */ | ||||||
|  |  #ifdef CONFIG_SPI_FLASH_BAR | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,22 @@ | |||||||
|  | From d5aa0d4117a439803a3d074d2745372036d2a1eb Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sun, 13 Oct 2013 15:35:34 +0200 | ||||||
|  | Subject: sf: add support for EN25QH256 | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c | ||||||
|  | index ac44287..7e87021 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_probe.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_probe.c | ||||||
|  | @@ -53,6 +53,7 @@ static const struct spi_flash_params spi_flash_params_table[] = { | ||||||
|  |  	{"EN25Q64",	   0x1c3017, 0x0,	64 * 1024,   128,	       SECT_4K}, | ||||||
|  |  	{"EN25Q128B",	   0x1c3018, 0x0,       64 * 1024,   256,	             0}, | ||||||
|  |  	{"EN25S64",	   0x1c3817, 0x0,	64 * 1024,   128,		     0}, | ||||||
|  | +	{"EN25QH256",	   0x1c7019, 0x0,	64 * 1024,   512,		     0}, | ||||||
|  |  #endif | ||||||
|  |  #ifdef CONFIG_SPI_FLASH_GIGADEVICE	/* GIGADEVICE */ | ||||||
|  |  	{"GD25Q64B",	   0xc84017, 0x0,	64 * 1024,   128,	       SECT_4K}, | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,45 +0,0 @@ | |||||||
| From d32f45357f0475a2f810752eeb9412fe692e1c0a Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 14:09:21 +0100 |  | ||||||
| Subject: sf: eon: use 16 bit ID for comparison |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/eon.c |  | ||||||
| +++ b/drivers/mtd/spi/eon.c |  | ||||||
| @@ -11,19 +11,19 @@ |  | ||||||
|  #include "spi_flash_internal.h" |  | ||||||
|   |  | ||||||
|  struct eon_spi_flash_params { |  | ||||||
| -	u8 idcode1; |  | ||||||
| +	u16 idcode; |  | ||||||
|  	u16 nr_sectors; |  | ||||||
|  	const char *name; |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  static const struct eon_spi_flash_params eon_spi_flash_table[] = { |  | ||||||
|  	{ |  | ||||||
| -		.idcode1 = 0x16, |  | ||||||
| +		.idcode = 0x3016, |  | ||||||
|  		.nr_sectors = 1024, |  | ||||||
|  		.name = "EN25Q32B", |  | ||||||
|  	}, |  | ||||||
|  	{ |  | ||||||
| -		.idcode1 = 0x18, |  | ||||||
| +		.idcode = 0x3018, |  | ||||||
|  		.nr_sectors = 4096, |  | ||||||
|  		.name = "EN25Q128", |  | ||||||
|  	}, |  | ||||||
| @@ -33,10 +33,11 @@ int spi_flash_probe_eon(struct spi_flash |  | ||||||
|  { |  | ||||||
|  	const struct eon_spi_flash_params *params; |  | ||||||
|  	unsigned int i; |  | ||||||
| +	u16 id = idcode[2] | idcode[1] << 8; |  | ||||||
|   |  | ||||||
|  	for (i = 0; i < ARRAY_SIZE(eon_spi_flash_table); ++i) { |  | ||||||
|  		params = &eon_spi_flash_table[i]; |  | ||||||
| -		if (params->idcode1 == idcode[2]) |  | ||||||
| +		if (params->idcode == id) |  | ||||||
|  			break; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| @@ -1,43 +0,0 @@ | |||||||
| From 37254e3284f61ea495f73a78b7c8efae983781e2 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 14:10:07 +0100 |  | ||||||
| Subject: sf: eon: add support for 4-byte address mode |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/eon.c |  | ||||||
| +++ b/drivers/mtd/spi/eon.c |  | ||||||
| @@ -10,6 +10,8 @@ |  | ||||||
|   |  | ||||||
|  #include "spi_flash_internal.h" |  | ||||||
|   |  | ||||||
| +#define EN25XX_EN4B		0xb7	/* Enter 4-byte mode */ |  | ||||||
| + |  | ||||||
|  struct eon_spi_flash_params { |  | ||||||
|  	u16 idcode; |  | ||||||
|  	u16 nr_sectors; |  | ||||||
| @@ -29,6 +31,13 @@ static const struct eon_spi_flash_params |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static __maybe_unused int eon_set_4byte_mode(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	struct spi_slave *spi = flash->spi; |  | ||||||
| + |  | ||||||
| +	return spi_flash_cmd(spi, EN25XX_EN4B, NULL, 0); |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  int spi_flash_probe_eon(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct eon_spi_flash_params *params; |  | ||||||
| @@ -57,5 +66,10 @@ int spi_flash_probe_eon(struct spi_flash |  | ||||||
|  	flash->size = 256 * 16 |  | ||||||
|  	    * params->nr_sectors; |  | ||||||
|   |  | ||||||
| +#ifdef CONFIG_SPI_FLASH_4BYTE_MODE |  | ||||||
| +	if (flash->size > (1 << 24)) |  | ||||||
| +		flash->set_4byte_mode = eon_set_4byte_mode; |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
|  	return 1; |  | ||||||
|  } |  | ||||||
| @@ -0,0 +1,26 @@ | |||||||
|  | From 5a6d8045190c887c7f65e65fb1bfc8854774c458 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sun, 13 Oct 2013 15:40:07 +0200 | ||||||
|  | Subject: sf: fix sector layout of S25FL256S_256K and S25FL512S_256K | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c | ||||||
|  | index 7e87021..1fc224e 100644 | ||||||
|  | --- a/drivers/mtd/spi/sf_probe.c | ||||||
|  | +++ b/drivers/mtd/spi/sf_probe.c | ||||||
|  | @@ -80,9 +80,9 @@ static const struct spi_flash_params spi_flash_params_table[] = { | ||||||
|  |  	{"S25FL032P",	   0x010215, 0x4d00,    64 * 1024,    64,	             0}, | ||||||
|  |  	{"S25FL064P",	   0x010216, 0x4d00,    64 * 1024,   128,	             0}, | ||||||
|  |  	{"S25FL128S_64K",  0x012018, 0x4d01,    64 * 1024,   256,		     0}, | ||||||
|  | -	{"S25FL256S_256K", 0x010219, 0x4d00,    64 * 1024,   512,	             0}, | ||||||
|  | +	{"S25FL256S_256K", 0x010219, 0x4d00,   256 * 1024,   128,	             0}, | ||||||
|  |  	{"S25FL256S_64K",  0x010219, 0x4d01,    64 * 1024,   512,	             0}, | ||||||
|  | -	{"S25FL512S_256K", 0x010220, 0x4d00,    64 * 1024,  1024,	             0}, | ||||||
|  | +	{"S25FL512S_256K", 0x010220, 0x4d00,   256 * 1024,   256,	             0}, | ||||||
|  |  	{"S25FL512S_64K",  0x010220, 0x4d01,    64 * 1024,  1024,	             0}, | ||||||
|  |  #endif | ||||||
|  |  #ifdef CONFIG_SPI_FLASH_STMICRO		/* STMICRO */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| From d8b1597130d228bc7e2bafd0c8d097529018c833 Mon Sep 17 00:00:00 2001 | From 0dff8c753c8929a478357abb38db0d1c1a60ec94 Mon Sep 17 00:00:00 2001 | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| Date: Wed, 29 Aug 2012 22:08:15 +0200 | Date: Wed, 29 Aug 2012 22:08:15 +0200 | ||||||
| Subject: net: switchlib: add framework for ethernet switch drivers | Subject: net: switchlib: add framework for ethernet switch drivers | ||||||
| @@ -10,9 +10,11 @@ setup code for switch devices across different boards. | |||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| Cc: Joe Hershberger <joe.hershberger@gmail.com> | Cc: Joe Hershberger <joe.hershberger@gmail.com> | ||||||
| 
 | 
 | ||||||
|  | diff --git a/Makefile b/Makefile
 | ||||||
|  | index dc04179..6ee9a3c 100644
 | ||||||
| --- a/Makefile
 | --- a/Makefile
 | ||||||
| +++ b/Makefile
 | +++ b/Makefile
 | ||||||
| @@ -291,6 +291,7 @@ LIBS-y += drivers/mtd/ubi/libubi.o
 | @@ -280,6 +280,7 @@ LIBS-y += drivers/mtd/ubi/libubi.o
 | ||||||
|  LIBS-y += drivers/mtd/spi/libspi_flash.o |  LIBS-y += drivers/mtd/spi/libspi_flash.o | ||||||
|  LIBS-y += drivers/net/libnet.o |  LIBS-y += drivers/net/libnet.o | ||||||
|  LIBS-y += drivers/net/phy/libphy.o |  LIBS-y += drivers/net/phy/libphy.o | ||||||
| @@ -20,15 +22,17 @@ Cc: Joe Hershberger <joe.hershberger@gmail.com> | |||||||
|  LIBS-y += drivers/pci/libpci.o |  LIBS-y += drivers/pci/libpci.o | ||||||
|  LIBS-y += drivers/pcmcia/libpcmcia.o |  LIBS-y += drivers/pcmcia/libpcmcia.o | ||||||
|  LIBS-y += drivers/power/libpower.o \ |  LIBS-y += drivers/power/libpower.o \ | ||||||
|  | diff --git a/drivers/net/switch/Makefile b/drivers/net/switch/Makefile
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..31719d8
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/drivers/net/switch/Makefile
 | +++ b/drivers/net/switch/Makefile
 | ||||||
| @@ -0,0 +1,31 @@
 | @@ -0,0 +1,30 @@
 | ||||||
| +#
 |  | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 | +#
 | ||||||
| +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | ||||||
| +# Copyright (C) 2011-2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | ||||||
|  | +#
 | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| +#
 | +#
 | ||||||
| +
 | +
 | ||||||
| +include $(TOPDIR)/config.mk
 | +include $(TOPDIR)/config.mk
 | ||||||
| @@ -54,14 +58,16 @@ Cc: Joe Hershberger <joe.hershberger@gmail.com> | |||||||
| +sinclude $(obj).depend
 | +sinclude $(obj).depend
 | ||||||
| +
 | +
 | ||||||
| +#########################################################################
 | +#########################################################################
 | ||||||
|  | diff --git a/drivers/net/switch/switch.c b/drivers/net/switch/switch.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..0e1d6b7
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/drivers/net/switch/switch.c
 | +++ b/drivers/net/switch/switch.c
 | ||||||
| @@ -0,0 +1,63 @@
 | @@ -0,0 +1,62 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (C) 2011-2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | ||||||
| + *
 | + *
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#include <common.h>
 | +#include <common.h>
 | ||||||
| @@ -120,14 +126,17 @@ Cc: Joe Hershberger <joe.hershberger@gmail.com> | |||||||
| +
 | +
 | ||||||
| +	return NULL;
 | +	return NULL;
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/include/switch.h b/include/switch.h
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..4a7ae63
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/include/switch.h
 | +++ b/include/switch.h
 | ||||||
| @@ -0,0 +1,95 @@
 | @@ -0,0 +1,102 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * This file is released under the terms of GPL v2 and any later version.
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 | + * See the file COPYING in the root directory of the source tree for details.
 | ||||||
| + *
 | + *
 | ||||||
| + * Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#ifndef __SWITCH_H
 | +#ifndef __SWITCH_H
 | ||||||
| @@ -203,7 +212,14 @@ Cc: Joe Hershberger <joe.hershberger@gmail.com> | |||||||
| + * Probe the available switch chips and connect the found one
 | + * Probe the available switch chips and connect the found one
 | ||||||
| + * with the given MII bus
 | + * with the given MII bus
 | ||||||
| + */
 | + */
 | ||||||
|  | +#ifdef CONFIG_SWITCH_MULTI
 | ||||||
| +extern struct switch_device *switch_connect(struct mii_dev *bus);
 | +extern struct switch_device *switch_connect(struct mii_dev *bus);
 | ||||||
|  | +#else
 | ||||||
|  | +static inline struct switch_device *switch_connect(struct mii_dev *bus)
 | ||||||
|  | +{
 | ||||||
|  | +	return NULL;
 | ||||||
|  | +}
 | ||||||
|  | +#endif
 | ||||||
| +
 | +
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Setup the given switch device
 | + * Setup the given switch device
 | ||||||
| @@ -218,9 +234,11 @@ Cc: Joe Hershberger <joe.hershberger@gmail.com> | |||||||
| +
 | +
 | ||||||
| +#endif /* __SWITCH_H */
 | +#endif /* __SWITCH_H */
 | ||||||
| +
 | +
 | ||||||
|  | diff --git a/net/eth.c b/net/eth.c
 | ||||||
|  | index c96e767..03ecc1c 100644
 | ||||||
| --- a/net/eth.c
 | --- a/net/eth.c
 | ||||||
| +++ b/net/eth.c
 | +++ b/net/eth.c
 | ||||||
| @@ -26,6 +26,7 @@
 | @@ -10,6 +10,7 @@
 | ||||||
|  #include <net.h> |  #include <net.h> | ||||||
|  #include <miiphy.h> |  #include <miiphy.h> | ||||||
|  #include <phy.h> |  #include <phy.h> | ||||||
| @@ -228,7 +246,7 @@ Cc: Joe Hershberger <joe.hershberger@gmail.com> | |||||||
|   |   | ||||||
|  void eth_parse_enetaddr(const char *addr, uchar *enetaddr) |  void eth_parse_enetaddr(const char *addr, uchar *enetaddr) | ||||||
|  { |  { | ||||||
| @@ -303,6 +304,8 @@ int eth_initialize(bd_t *bis)
 | @@ -287,6 +288,8 @@ int eth_initialize(bd_t *bis)
 | ||||||
|  	phy_init(); |  	phy_init(); | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @@ -237,3 +255,6 @@ Cc: Joe Hershberger <joe.hershberger@gmail.com> | |||||||
|  	eth_env_init(bis); |  	eth_env_init(bis); | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.2 | ||||||
|  | 
 | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| From e510be1145796cd44cf5800e187a94ad7c19e764 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 14:10:34 +0100 |  | ||||||
| Subject: sf: eon: add support for EN25QH256 |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/eon.c |  | ||||||
| +++ b/drivers/mtd/spi/eon.c |  | ||||||
| @@ -29,6 +29,11 @@ static const struct eon_spi_flash_params |  | ||||||
|  		.nr_sectors = 4096, |  | ||||||
|  		.name = "EN25Q128", |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.idcode = 0x7019, |  | ||||||
| +		.nr_sectors = 8192, |  | ||||||
| +		.name = "EN25QH256", |  | ||||||
| +	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  static __maybe_unused int eon_set_4byte_mode(struct spi_flash *flash) |  | ||||||
| @@ -1,13 +1,15 @@ | |||||||
| From b8c666eda693906488637c414db9db35b6760e4a Mon Sep 17 00:00:00 2001 | From e2c59cedebf72e4a002134a2932f722b508a5448 Mon Sep 17 00:00:00 2001 | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| Date: Wed, 29 Aug 2012 22:08:15 +0200 | Date: Wed, 29 Aug 2012 22:08:15 +0200 | ||||||
| Subject: net: switchlib: add driver for Lantiq PSB697X switch family | Subject: net: switchlib: add driver for Lantiq PSB697X switch family | ||||||
| 
 | 
 | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| 
 | 
 | ||||||
|  | diff --git a/drivers/net/switch/Makefile b/drivers/net/switch/Makefile
 | ||||||
|  | index 31719d8..a426774 100644
 | ||||||
| --- a/drivers/net/switch/Makefile
 | --- a/drivers/net/switch/Makefile
 | ||||||
| +++ b/drivers/net/switch/Makefile
 | +++ b/drivers/net/switch/Makefile
 | ||||||
| @@ -11,6 +11,7 @@ include $(TOPDIR)/config.mk
 | @@ -10,6 +10,7 @@ include $(TOPDIR)/config.mk
 | ||||||
|  LIB	:= $(obj)libswitch.o |  LIB	:= $(obj)libswitch.o | ||||||
|   |   | ||||||
|  COBJS-$(CONFIG_SWITCH_MULTI) += switch.o |  COBJS-$(CONFIG_SWITCH_MULTI) += switch.o | ||||||
| @@ -15,14 +17,16 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|   |   | ||||||
|  COBJS	:= $(COBJS-y) |  COBJS	:= $(COBJS-y) | ||||||
|  SRCS	:= $(COBJS:.o=.c) |  SRCS	:= $(COBJS:.o=.c) | ||||||
|  | diff --git a/drivers/net/switch/psb697x.c b/drivers/net/switch/psb697x.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..cb6c391
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/drivers/net/switch/psb697x.c
 | +++ b/drivers/net/switch/psb697x.c
 | ||||||
| @@ -0,0 +1,119 @@
 | @@ -0,0 +1,118 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (C) 2011-2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | ||||||
| + *
 | + *
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#include <common.h>
 | +#include <common.h>
 | ||||||
| @@ -137,9 +141,11 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +
 | +
 | ||||||
| +	switch_driver_register(&psb697x_drv);
 | +	switch_driver_register(&psb697x_drv);
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/drivers/net/switch/switch.c b/drivers/net/switch/switch.c
 | ||||||
|  | index 0e1d6b7..3d02610 100644
 | ||||||
| --- a/drivers/net/switch/switch.c
 | --- a/drivers/net/switch/switch.c
 | ||||||
| +++ b/drivers/net/switch/switch.c
 | +++ b/drivers/net/switch/switch.c
 | ||||||
| @@ -18,6 +18,10 @@ void switch_init(void)
 | @@ -17,6 +17,10 @@ void switch_init(void)
 | ||||||
|  	INIT_LIST_HEAD(&switch_drivers); |  	INIT_LIST_HEAD(&switch_drivers); | ||||||
|  	INIT_LIST_HEAD(&switch_devices); |  	INIT_LIST_HEAD(&switch_devices); | ||||||
|   |   | ||||||
| @@ -150,9 +156,11 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|  	board_switch_init(); |  	board_switch_init(); | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  | diff --git a/include/switch.h b/include/switch.h
 | ||||||
|  | index 4a7ae63..fd3cdbd 100644
 | ||||||
| --- a/include/switch.h
 | --- a/include/switch.h
 | ||||||
| +++ b/include/switch.h
 | +++ b/include/switch.h
 | ||||||
| @@ -90,6 +90,7 @@ static inline void switch_setup(struct s
 | @@ -97,6 +97,7 @@ static inline void switch_setup(struct switch_device *dev)
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  /* Init functions for supported Switch drivers */ |  /* Init functions for supported Switch drivers */ | ||||||
| @@ -160,3 +168,6 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|   |   | ||||||
|  #endif /* __SWITCH_H */ |  #endif /* __SWITCH_H */ | ||||||
|   |   | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.2 | ||||||
|  | 
 | ||||||
| @@ -1,30 +0,0 @@ | |||||||
| From 81a8e9e192d53ce8b5cafd47190d6c6826519d09 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 14:58:59 +0100 |  | ||||||
| Subject: sf: spansion: fix device IDs and sector architecture for S25FL256S |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/spansion.c |  | ||||||
| +++ b/drivers/mtd/spi/spansion.c |  | ||||||
| @@ -97,11 +97,18 @@ static const struct spansion_spi_flash_p |  | ||||||
|  		.name = "S25FL129P_64K", |  | ||||||
|  	}, |  | ||||||
|  	{ |  | ||||||
| -		.idcode1 = 0x2019, |  | ||||||
| +		.idcode1 = 0x0219, |  | ||||||
|  		.idcode2 = 0x4d01, |  | ||||||
|  		.pages_per_sector = 256, |  | ||||||
|  		.nr_sectors = 512, |  | ||||||
| -		.name = "S25FL256S", |  | ||||||
| +		.name = "S25FL256S_64K", |  | ||||||
| +	}, |  | ||||||
| +	{ |  | ||||||
| +		.idcode1 = 0x0219, |  | ||||||
| +		.idcode2 = 0x4d00, |  | ||||||
| +		.pages_per_sector = 1024, |  | ||||||
| +		.nr_sectors = 128, |  | ||||||
| +		.name = "S25FL256S_256K", |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| @@ -1,13 +1,15 @@ | |||||||
| From fcbbb1beb2ae862f5c703c5719ed0e155cbbf82f Mon Sep 17 00:00:00 2001 | From c291443dc97dadcf0c6afd04688a7d9f79a221b5 Mon Sep 17 00:00:00 2001 | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| Date: Wed, 29 Aug 2012 22:08:16 +0200 | Date: Wed, 29 Aug 2012 22:08:16 +0200 | ||||||
| Subject: net: switchlib: add driver for Lantiq ADM6996I switch family | Subject: net: switchlib: add driver for Lantiq ADM6996I switch family | ||||||
| 
 | 
 | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| 
 | 
 | ||||||
|  | diff --git a/drivers/net/switch/Makefile b/drivers/net/switch/Makefile
 | ||||||
|  | index a426774..6b7eeb9 100644
 | ||||||
| --- a/drivers/net/switch/Makefile
 | --- a/drivers/net/switch/Makefile
 | ||||||
| +++ b/drivers/net/switch/Makefile
 | +++ b/drivers/net/switch/Makefile
 | ||||||
| @@ -12,6 +12,7 @@ LIB	:= $(obj)libswitch.o
 | @@ -11,6 +11,7 @@ LIB	:= $(obj)libswitch.o
 | ||||||
|   |   | ||||||
|  COBJS-$(CONFIG_SWITCH_MULTI) += switch.o |  COBJS-$(CONFIG_SWITCH_MULTI) += switch.o | ||||||
|  COBJS-$(CONFIG_SWITCH_PSB697X) += psb697x.o |  COBJS-$(CONFIG_SWITCH_PSB697X) += psb697x.o | ||||||
| @@ -15,14 +17,16 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|   |   | ||||||
|  COBJS	:= $(COBJS-y) |  COBJS	:= $(COBJS-y) | ||||||
|  SRCS	:= $(COBJS:.o=.c) |  SRCS	:= $(COBJS:.o=.c) | ||||||
|  | diff --git a/drivers/net/switch/adm6996i.c b/drivers/net/switch/adm6996i.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..46fcdc9
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/drivers/net/switch/adm6996i.c
 | +++ b/drivers/net/switch/adm6996i.c
 | ||||||
| @@ -0,0 +1,116 @@
 | @@ -0,0 +1,115 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (C) 2011-2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | ||||||
| + *
 | + *
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#include <common.h>
 | +#include <common.h>
 | ||||||
| @@ -134,9 +138,11 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +
 | +
 | ||||||
| +	switch_driver_register(&adm6996i_drv);
 | +	switch_driver_register(&adm6996i_drv);
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/drivers/net/switch/switch.c b/drivers/net/switch/switch.c
 | ||||||
|  | index 3d02610..ea3fe9c 100644
 | ||||||
| --- a/drivers/net/switch/switch.c
 | --- a/drivers/net/switch/switch.c
 | ||||||
| +++ b/drivers/net/switch/switch.c
 | +++ b/drivers/net/switch/switch.c
 | ||||||
| @@ -21,6 +21,9 @@ void switch_init(void)
 | @@ -20,6 +20,9 @@ void switch_init(void)
 | ||||||
|  #if defined(CONFIG_SWITCH_PSB697X) |  #if defined(CONFIG_SWITCH_PSB697X) | ||||||
|  	switch_psb697x_init(); |  	switch_psb697x_init(); | ||||||
|  #endif |  #endif | ||||||
| @@ -146,9 +152,11 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|   |   | ||||||
|  	board_switch_init(); |  	board_switch_init(); | ||||||
|  } |  } | ||||||
|  | diff --git a/include/switch.h b/include/switch.h
 | ||||||
|  | index fd3cdbd..4b46df0 100644
 | ||||||
| --- a/include/switch.h
 | --- a/include/switch.h
 | ||||||
| +++ b/include/switch.h
 | +++ b/include/switch.h
 | ||||||
| @@ -91,6 +91,7 @@ static inline void switch_setup(struct s
 | @@ -98,6 +98,7 @@ static inline void switch_setup(struct switch_device *dev)
 | ||||||
|   |   | ||||||
|  /* Init functions for supported Switch drivers */ |  /* Init functions for supported Switch drivers */ | ||||||
|  extern void switch_psb697x_init(void); |  extern void switch_psb697x_init(void); | ||||||
| @@ -156,3 +164,6 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|   |   | ||||||
|  #endif /* __SWITCH_H */ |  #endif /* __SWITCH_H */ | ||||||
|   |   | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.2 | ||||||
|  | 
 | ||||||
| @@ -1,55 +0,0 @@ | |||||||
| From 0add8e5c60961d2b99174610df8d3d9d6d192b74 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 14:16:11 +0100 |  | ||||||
| Subject: sf: spansion: add support for 4-byte address mode |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/spansion.c |  | ||||||
| +++ b/drivers/mtd/spi/spansion.c |  | ||||||
| @@ -31,6 +31,10 @@ |  | ||||||
|   |  | ||||||
|  #include "spi_flash_internal.h" |  | ||||||
|   |  | ||||||
| +#define S25FLXX_BRRD		0x16		/* Read Bank Register */ |  | ||||||
| +#define S25FLXX_BRWR		0x17		/* Write Bank Register */ |  | ||||||
| +#define S25FLXX_BAR_EXTADD	(1 << 7)	/* Extended address enable */ |  | ||||||
| + |  | ||||||
|  struct spansion_spi_flash_params { |  | ||||||
|  	u16 idcode1; |  | ||||||
|  	u16 idcode2; |  | ||||||
| @@ -112,6 +116,23 @@ static const struct spansion_spi_flash_p |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static __maybe_unused int spansion_set_4byte_mode(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	struct spi_slave *spi = flash->spi; |  | ||||||
| +	u8 bar, cmd; |  | ||||||
| +	int err; |  | ||||||
| + |  | ||||||
| +	cmd = S25FLXX_BRRD; |  | ||||||
| +	err = spi_flash_cmd(spi, cmd, &bar, 1); |  | ||||||
| +	if (err) |  | ||||||
| +		return err; |  | ||||||
| + |  | ||||||
| +	bar |= S25FLXX_BAR_EXTADD; |  | ||||||
| +	cmd = S25FLXX_BRWR; |  | ||||||
| + |  | ||||||
| +	return spi_flash_cmd_write(spi, &cmd, 1, &bar, 1); |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  int spi_flash_probe_spansion(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct spansion_spi_flash_params *params; |  | ||||||
| @@ -144,5 +165,10 @@ int spi_flash_probe_spansion(struct spi_ |  | ||||||
|  	flash->sector_size = 256 * params->pages_per_sector; |  | ||||||
|  	flash->size = flash->sector_size * params->nr_sectors; |  | ||||||
|   |  | ||||||
| +#ifdef CONFIG_SPI_FLASH_4BYTE_MODE |  | ||||||
| +	if (flash->size > (1 << 24)) |  | ||||||
| +		flash->set_4byte_mode = spansion_set_4byte_mode; |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
|  	return 1; |  | ||||||
|  } |  | ||||||
| @@ -1,14 +1,16 @@ | |||||||
| From 16b8c52f80f20e07866e397ff52ff9658766437b Mon Sep 17 00:00:00 2001 | From 1a1d61a2faf0390033a3766559ce0e758e15894e Mon Sep 17 00:00:00 2001 | ||||||
| From: Luka Perkov <luka@openwrt.org> | From: Luka Perkov <openwrt@lukaperkov.net> | ||||||
| Date: Wed, 29 Aug 2012 22:08:16 +0200 | Date: Wed, 29 Aug 2012 22:08:16 +0200 | ||||||
| Subject: net: switchlib: add driver for Atheros AR8216 | Subject: net: switchlib: add driver for Atheros AR8216 | ||||||
| 
 | 
 | ||||||
| Signed-off-by: Luka Perkov <luka@openwrt.org> | Signed-off-by: Luka Perkov <openwrt@lukaperkov.net> | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| 
 | 
 | ||||||
|  | diff --git a/drivers/net/switch/Makefile b/drivers/net/switch/Makefile
 | ||||||
|  | index 6b7eeb9..7400897 100644
 | ||||||
| --- a/drivers/net/switch/Makefile
 | --- a/drivers/net/switch/Makefile
 | ||||||
| +++ b/drivers/net/switch/Makefile
 | +++ b/drivers/net/switch/Makefile
 | ||||||
| @@ -13,6 +13,7 @@ LIB	:= $(obj)libswitch.o
 | @@ -12,6 +12,7 @@ LIB	:= $(obj)libswitch.o
 | ||||||
|  COBJS-$(CONFIG_SWITCH_MULTI) += switch.o |  COBJS-$(CONFIG_SWITCH_MULTI) += switch.o | ||||||
|  COBJS-$(CONFIG_SWITCH_PSB697X) += psb697x.o |  COBJS-$(CONFIG_SWITCH_PSB697X) += psb697x.o | ||||||
|  COBJS-$(CONFIG_SWITCH_ADM6996I) += adm6996i.o |  COBJS-$(CONFIG_SWITCH_ADM6996I) += adm6996i.o | ||||||
| @@ -16,14 +18,16 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|   |   | ||||||
|  COBJS	:= $(COBJS-y) |  COBJS	:= $(COBJS-y) | ||||||
|  SRCS	:= $(COBJS:.o=.c) |  SRCS	:= $(COBJS:.o=.c) | ||||||
|  | diff --git a/drivers/net/switch/ar8216.c b/drivers/net/switch/ar8216.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..f1348f0
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/drivers/net/switch/ar8216.c
 | +++ b/drivers/net/switch/ar8216.c
 | ||||||
| @@ -0,0 +1,115 @@
 | @@ -0,0 +1,114 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org>
 | + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org>
 | ||||||
| + *
 | + *
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#include <common.h>
 | +#include <common.h>
 | ||||||
| @@ -134,9 +138,11 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +
 | +
 | ||||||
| +	switch_driver_register(&ar8216_drv);
 | +	switch_driver_register(&ar8216_drv);
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/drivers/net/switch/switch.c b/drivers/net/switch/switch.c
 | ||||||
|  | index ea3fe9c..3e34a7f 100644
 | ||||||
| --- a/drivers/net/switch/switch.c
 | --- a/drivers/net/switch/switch.c
 | ||||||
| +++ b/drivers/net/switch/switch.c
 | +++ b/drivers/net/switch/switch.c
 | ||||||
| @@ -24,6 +24,9 @@ void switch_init(void)
 | @@ -23,6 +23,9 @@ void switch_init(void)
 | ||||||
|  #if defined(CONFIG_SWITCH_ADM6996I) |  #if defined(CONFIG_SWITCH_ADM6996I) | ||||||
|  	switch_adm6996i_init(); |  	switch_adm6996i_init(); | ||||||
|  #endif |  #endif | ||||||
| @@ -146,9 +152,11 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|   |   | ||||||
|  	board_switch_init(); |  	board_switch_init(); | ||||||
|  } |  } | ||||||
|  | diff --git a/include/switch.h b/include/switch.h
 | ||||||
|  | index 4b46df0..ae7b123 100644
 | ||||||
| --- a/include/switch.h
 | --- a/include/switch.h
 | ||||||
| +++ b/include/switch.h
 | +++ b/include/switch.h
 | ||||||
| @@ -92,6 +92,7 @@ static inline void switch_setup(struct s
 | @@ -99,6 +99,7 @@ static inline void switch_setup(struct switch_device *dev)
 | ||||||
|  /* Init functions for supported Switch drivers */ |  /* Init functions for supported Switch drivers */ | ||||||
|  extern void switch_psb697x_init(void); |  extern void switch_psb697x_init(void); | ||||||
|  extern void switch_adm6996i_init(void); |  extern void switch_adm6996i_init(void); | ||||||
| @@ -156,3 +164,6 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
|   |   | ||||||
|  #endif /* __SWITCH_H */ |  #endif /* __SWITCH_H */ | ||||||
|   |   | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.2 | ||||||
|  | 
 | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| From bff335ac524843bc90163c3b231091a5016f8670 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 15:07:54 +0100 |  | ||||||
| Subject: sf: spansion: add support for S25FL512S |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/spansion.c |  | ||||||
| +++ b/drivers/mtd/spi/spansion.c |  | ||||||
| @@ -114,6 +114,13 @@ static const struct spansion_spi_flash_p |  | ||||||
|  		.nr_sectors = 128, |  | ||||||
|  		.name = "S25FL256S_256K", |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.idcode1 = 0x0220, |  | ||||||
| +		.idcode2 = 0x4d00, |  | ||||||
| +		.pages_per_sector = 1024, |  | ||||||
| +		.nr_sectors = 256, |  | ||||||
| +		.name = "S25FL512S_256K", |  | ||||||
| +	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  static __maybe_unused int spansion_set_4byte_mode(struct spi_flash *flash) |  | ||||||
| @@ -0,0 +1,387 @@ | |||||||
|  | From 42cb399df978a33539b95d668b3f973d927cb902 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 17 Dec 2012 23:37:57 +0100 | ||||||
|  | Subject: net: switchlib: add driver for REALTEK RTL8306 | ||||||
|  |  | ||||||
|  | Signed-off-by: Oliver Muth <dr.o.muth@gmx.de> | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/drivers/net/switch/Makefile b/drivers/net/switch/Makefile | ||||||
|  | index 7400897..08c6972 100644 | ||||||
|  | --- a/drivers/net/switch/Makefile | ||||||
|  | +++ b/drivers/net/switch/Makefile | ||||||
|  | @@ -13,6 +13,7 @@ COBJS-$(CONFIG_SWITCH_MULTI) += switch.o | ||||||
|  |  COBJS-$(CONFIG_SWITCH_PSB697X) += psb697x.o | ||||||
|  |  COBJS-$(CONFIG_SWITCH_ADM6996I) += adm6996i.o | ||||||
|  |  COBJS-$(CONFIG_SWITCH_AR8216) += ar8216.o | ||||||
|  | +COBJS-$(CONFIG_SWITCH_RTL8306) += rtl8306.o | ||||||
|  |   | ||||||
|  |  COBJS	:= $(COBJS-y) | ||||||
|  |  SRCS	:= $(COBJS:.o=.c) | ||||||
|  | diff --git a/drivers/net/switch/rtl8306.c b/drivers/net/switch/rtl8306.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..7a6a917 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/drivers/net/switch/rtl8306.c | ||||||
|  | @@ -0,0 +1,332 @@ | ||||||
|  | +/* | ||||||
|  | + * Based on OpenWRT linux driver | ||||||
|  | + * | ||||||
|  | + * Copyright (C) 2011-2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | +#define DEBUG | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <malloc.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <miiphy.h> | ||||||
|  | + | ||||||
|  | +#define RTL8306_REG_PAGE		16 | ||||||
|  | +#define RTL8306_REG_PAGE_LO		(1 << 15) | ||||||
|  | +#define RTL8306_REG_PAGE_HI		(1 << 1) /* inverted */ | ||||||
|  | +#define RTL8306_CHIPID			0x5988 | ||||||
|  | + | ||||||
|  | +#define RTL8306_NUM_VLANS		16 | ||||||
|  | +#define RTL8306_NUM_PORTS		6 | ||||||
|  | +#define RTL8306_PORT_CPU		5 | ||||||
|  | +#define RTL8306_NUM_PAGES		4 | ||||||
|  | +#define RTL8306_NUM_REGS		32 | ||||||
|  | + | ||||||
|  | +enum { | ||||||
|  | +	RTL_TYPE_S, | ||||||
|  | +	RTL_TYPE_SD, | ||||||
|  | +	RTL_TYPE_SDM, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +struct rtl_reg { | ||||||
|  | +	int page; | ||||||
|  | +	int phy; | ||||||
|  | +	int reg; | ||||||
|  | +	int bits; | ||||||
|  | +	int shift; | ||||||
|  | +	int inverted; | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +enum rtl_regidx { | ||||||
|  | +	RTL_REG_CHIPID, | ||||||
|  | +	RTL_REG_CHIPVER, | ||||||
|  | +	RTL_REG_CHIPTYPE, | ||||||
|  | +	RTL_REG_CPUPORT, | ||||||
|  | + | ||||||
|  | +	RTL_REG_EN_CPUPORT, | ||||||
|  | +	RTL_REG_EN_TAG_OUT, | ||||||
|  | +	RTL_REG_EN_TAG_CLR, | ||||||
|  | +	RTL_REG_EN_TAG_IN, | ||||||
|  | +	RTL_REG_TRAP_CPU, | ||||||
|  | +	RTL_REG_TRUNK_PORTSEL, | ||||||
|  | +	RTL_REG_EN_TRUNK, | ||||||
|  | +	RTL_REG_RESET, | ||||||
|  | +	RTL_REG_PHY_RESET, | ||||||
|  | +	RTL_REG_CPU_LINKUP, | ||||||
|  | + | ||||||
|  | +	RTL_REG_VLAN_ENABLE, | ||||||
|  | +	RTL_REG_VLAN_FILTER, | ||||||
|  | +	RTL_REG_VLAN_TAG_ONLY, | ||||||
|  | +	RTL_REG_VLAN_TAG_AWARE, | ||||||
|  | +#define RTL_VLAN_ENUM(id) \ | ||||||
|  | +	RTL_REG_VLAN##id##_VID, \ | ||||||
|  | +	RTL_REG_VLAN##id##_PORTMASK | ||||||
|  | +	RTL_VLAN_ENUM(0), | ||||||
|  | +	RTL_VLAN_ENUM(1), | ||||||
|  | +	RTL_VLAN_ENUM(2), | ||||||
|  | +	RTL_VLAN_ENUM(3), | ||||||
|  | +	RTL_VLAN_ENUM(4), | ||||||
|  | +	RTL_VLAN_ENUM(5), | ||||||
|  | +	RTL_VLAN_ENUM(6), | ||||||
|  | +	RTL_VLAN_ENUM(7), | ||||||
|  | +	RTL_VLAN_ENUM(8), | ||||||
|  | +	RTL_VLAN_ENUM(9), | ||||||
|  | +	RTL_VLAN_ENUM(10), | ||||||
|  | +	RTL_VLAN_ENUM(11), | ||||||
|  | +	RTL_VLAN_ENUM(12), | ||||||
|  | +	RTL_VLAN_ENUM(13), | ||||||
|  | +	RTL_VLAN_ENUM(14), | ||||||
|  | +	RTL_VLAN_ENUM(15), | ||||||
|  | +#define RTL_PORT_ENUM(id) \ | ||||||
|  | +	RTL_REG_PORT##id##_PVID, \ | ||||||
|  | +	RTL_REG_PORT##id##_NULL_VID_REPLACE, \ | ||||||
|  | +	RTL_REG_PORT##id##_NON_PVID_DISCARD, \ | ||||||
|  | +	RTL_REG_PORT##id##_VID_INSERT, \ | ||||||
|  | +	RTL_REG_PORT##id##_TAG_INSERT, \ | ||||||
|  | +	RTL_REG_PORT##id##_LINK, \ | ||||||
|  | +	RTL_REG_PORT##id##_SPEED, \ | ||||||
|  | +	RTL_REG_PORT##id##_NWAY, \ | ||||||
|  | +	RTL_REG_PORT##id##_NRESTART, \ | ||||||
|  | +	RTL_REG_PORT##id##_DUPLEX, \ | ||||||
|  | +	RTL_REG_PORT##id##_RXEN, \ | ||||||
|  | +	RTL_REG_PORT##id##_TXEN, \ | ||||||
|  | +	RTL_REG_PORT##id##_LRNEN | ||||||
|  | +	RTL_PORT_ENUM(0), | ||||||
|  | +	RTL_PORT_ENUM(1), | ||||||
|  | +	RTL_PORT_ENUM(2), | ||||||
|  | +	RTL_PORT_ENUM(3), | ||||||
|  | +	RTL_PORT_ENUM(4), | ||||||
|  | +	RTL_PORT_ENUM(5), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct rtl_reg rtl_regs[] = { | ||||||
|  | +	[RTL_REG_CHIPID]         = { 0, 4, 30, 16,  0, 0 }, | ||||||
|  | +	[RTL_REG_CHIPVER]        = { 0, 4, 31,  8,  0, 0 }, | ||||||
|  | +	[RTL_REG_CHIPTYPE]       = { 0, 4, 31,  2,  8, 0 }, | ||||||
|  | + | ||||||
|  | +	/* CPU port number */ | ||||||
|  | +	[RTL_REG_CPUPORT]        = { 2, 4, 21,  3,  0, 0 }, | ||||||
|  | +	/* Enable CPU port function */ | ||||||
|  | +	[RTL_REG_EN_CPUPORT]     = { 3, 2, 21,  1, 15, 1 }, | ||||||
|  | +	/* Enable CPU port tag insertion */ | ||||||
|  | +	[RTL_REG_EN_TAG_OUT]     = { 3, 2, 21,  1, 12, 0 }, | ||||||
|  | +	/* Enable CPU port tag removal */ | ||||||
|  | +	[RTL_REG_EN_TAG_CLR]     = { 3, 2, 21,  1, 11, 0 }, | ||||||
|  | +	/* Enable CPU port tag checking */ | ||||||
|  | +	[RTL_REG_EN_TAG_IN]      = { 0, 4, 21,  1,  7, 0 }, | ||||||
|  | +	[RTL_REG_EN_TRUNK]       = { 0, 0, 19,  1, 11, 1 }, | ||||||
|  | +	[RTL_REG_TRUNK_PORTSEL]  = { 0, 0, 16,  1,  6, 1 }, | ||||||
|  | +	[RTL_REG_RESET]          = { 0, 0, 16,  1, 12, 0 }, | ||||||
|  | +	[RTL_REG_PHY_RESET]	 = { 0, 0,  0,  1, 15, 0 }, | ||||||
|  | +	[RTL_REG_CPU_LINKUP]	 = { 0, 6, 22,  1, 15, 0 }, | ||||||
|  | +	[RTL_REG_TRAP_CPU]       = { 3, 2, 22,  1,  6, 0 }, | ||||||
|  | + | ||||||
|  | +	[RTL_REG_VLAN_TAG_ONLY]  = { 0, 0, 16,  1,  8, 1 }, | ||||||
|  | +	[RTL_REG_VLAN_FILTER]    = { 0, 0, 16,  1,  9, 1 }, | ||||||
|  | +	[RTL_REG_VLAN_TAG_AWARE] = { 0, 0, 16,  1, 10, 1 }, | ||||||
|  | +	[RTL_REG_VLAN_ENABLE]    = { 0, 0, 18,  1,  8, 1 }, | ||||||
|  | + | ||||||
|  | +#define RTL_VLAN_REGS(id, phy, page, regofs) \ | ||||||
|  | +	[RTL_REG_VLAN##id##_VID] = { page, phy, 25 + regofs, 12, 0, 0 }, \ | ||||||
|  | +	[RTL_REG_VLAN##id##_PORTMASK] = { page, phy, 24 + regofs, 6, 0, 0 } | ||||||
|  | +	RTL_VLAN_REGS( 0, 0, 0, 0), | ||||||
|  | +	RTL_VLAN_REGS( 1, 1, 0, 0), | ||||||
|  | +	RTL_VLAN_REGS( 2, 2, 0, 0), | ||||||
|  | +	RTL_VLAN_REGS( 3, 3, 0, 0), | ||||||
|  | +	RTL_VLAN_REGS( 4, 4, 0, 0), | ||||||
|  | +	RTL_VLAN_REGS( 5, 0, 1, 2), | ||||||
|  | +	RTL_VLAN_REGS( 6, 1, 1, 2), | ||||||
|  | +	RTL_VLAN_REGS( 7, 2, 1, 2), | ||||||
|  | +	RTL_VLAN_REGS( 8, 3, 1, 2), | ||||||
|  | +	RTL_VLAN_REGS( 9, 4, 1, 2), | ||||||
|  | +	RTL_VLAN_REGS(10, 0, 1, 4), | ||||||
|  | +	RTL_VLAN_REGS(11, 1, 1, 4), | ||||||
|  | +	RTL_VLAN_REGS(12, 2, 1, 4), | ||||||
|  | +	RTL_VLAN_REGS(13, 3, 1, 4), | ||||||
|  | +	RTL_VLAN_REGS(14, 4, 1, 4), | ||||||
|  | +	RTL_VLAN_REGS(15, 0, 1, 6), | ||||||
|  | + | ||||||
|  | +#define REG_PORT_SETTING(port, phy) \ | ||||||
|  | +	[RTL_REG_PORT##port##_SPEED] = { 0, phy, 0, 1, 13, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_NWAY] = { 0, phy, 0, 1, 12, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_NRESTART] = { 0, phy, 0, 1, 9, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_DUPLEX] = { 0, phy, 0, 1, 8, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_TXEN] = { 0, phy, 24, 1, 11, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_RXEN] = { 0, phy, 24, 1, 10, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_LRNEN] = { 0, phy, 24, 1, 9, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_LINK] = { 0, phy, 1, 1, 2, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_NULL_VID_REPLACE] = { 0, phy, 22, 1, 12, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_NON_PVID_DISCARD] = { 0, phy, 22, 1, 11, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_VID_INSERT] = { 0, phy, 22, 2, 9, 0 }, \ | ||||||
|  | +	[RTL_REG_PORT##port##_TAG_INSERT] = { 0, phy, 22, 2, 0, 0 } | ||||||
|  | + | ||||||
|  | +	REG_PORT_SETTING(0, 0), | ||||||
|  | +	REG_PORT_SETTING(1, 1), | ||||||
|  | +	REG_PORT_SETTING(2, 2), | ||||||
|  | +	REG_PORT_SETTING(3, 3), | ||||||
|  | +	REG_PORT_SETTING(4, 4), | ||||||
|  | +	REG_PORT_SETTING(5, 6), | ||||||
|  | + | ||||||
|  | +#define REG_PORT_PVID(phy, page, regofs) \ | ||||||
|  | +	{ page, phy, 24 + regofs, 4, 12, 0 } | ||||||
|  | +	[RTL_REG_PORT0_PVID] = REG_PORT_PVID(0, 0, 0), | ||||||
|  | +	[RTL_REG_PORT1_PVID] = REG_PORT_PVID(1, 0, 0), | ||||||
|  | +	[RTL_REG_PORT2_PVID] = REG_PORT_PVID(2, 0, 0), | ||||||
|  | +	[RTL_REG_PORT3_PVID] = REG_PORT_PVID(3, 0, 0), | ||||||
|  | +	[RTL_REG_PORT4_PVID] = REG_PORT_PVID(4, 0, 0), | ||||||
|  | +	[RTL_REG_PORT5_PVID] = REG_PORT_PVID(0, 1, 2), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static void rtl_set_page(struct mii_dev *bus, unsigned int page) | ||||||
|  | +{ | ||||||
|  | +	u16 pgsel; | ||||||
|  | + | ||||||
|  | +	BUG_ON(page > RTL8306_NUM_PAGES); | ||||||
|  | + | ||||||
|  | +	pgsel = bus->read(bus, 0, MDIO_DEVAD_NONE, RTL8306_REG_PAGE); | ||||||
|  | +	pgsel &= ~(RTL8306_REG_PAGE_LO | RTL8306_REG_PAGE_HI); | ||||||
|  | + | ||||||
|  | +	if (page & (1 << 0)) | ||||||
|  | +		pgsel |= RTL8306_REG_PAGE_LO; | ||||||
|  | + | ||||||
|  | +	if (!(page & (1 << 1))) /* bit is inverted */ | ||||||
|  | +		pgsel |= RTL8306_REG_PAGE_HI; | ||||||
|  | + | ||||||
|  | +	bus->write(bus, 0, MDIO_DEVAD_NONE, RTL8306_REG_PAGE, pgsel); | ||||||
|  | + | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static __maybe_unused int rtl_w16(struct mii_dev *bus, unsigned int page, unsigned int phy, | ||||||
|  | +			unsigned int reg, u16 val) | ||||||
|  | +{ | ||||||
|  | +	rtl_set_page(bus, page); | ||||||
|  | + | ||||||
|  | +	bus->write(bus, phy, MDIO_DEVAD_NONE, reg, val); | ||||||
|  | +	bus->read(bus, phy, MDIO_DEVAD_NONE, reg); /* flush */ | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int rtl_r16(struct mii_dev *bus, unsigned int page, unsigned int phy, | ||||||
|  | +			unsigned int reg) | ||||||
|  | +{ | ||||||
|  | +	rtl_set_page(bus, page); | ||||||
|  | + | ||||||
|  | +	return bus->read(bus, phy, MDIO_DEVAD_NONE, reg); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static u16 rtl_rmw(struct mii_dev *bus, unsigned int page, unsigned int phy, | ||||||
|  | +			unsigned int reg, u16 mask, u16 val) | ||||||
|  | +{ | ||||||
|  | +	u16 r; | ||||||
|  | + | ||||||
|  | +	rtl_set_page(bus, page); | ||||||
|  | + | ||||||
|  | +	r = bus->read(bus, phy, MDIO_DEVAD_NONE, reg); | ||||||
|  | +	r &= ~mask; | ||||||
|  | +	r |= val; | ||||||
|  | +	bus->write(bus, phy, MDIO_DEVAD_NONE, reg, r); | ||||||
|  | + | ||||||
|  | +	return bus->read(bus, phy, MDIO_DEVAD_NONE, reg); /* flush */ | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int rtl_get(struct mii_dev *bus, enum rtl_regidx s) | ||||||
|  | +{ | ||||||
|  | +	const struct rtl_reg *r = &rtl_regs[s]; | ||||||
|  | +	u16 val; | ||||||
|  | + | ||||||
|  | +	BUG_ON(s >= ARRAY_SIZE(rtl_regs)); | ||||||
|  | + | ||||||
|  | +	if (r->bits == 0) /* unimplemented */ | ||||||
|  | +		return 0; | ||||||
|  | + | ||||||
|  | +	val = rtl_r16(bus, r->page, r->phy, r->reg); | ||||||
|  | + | ||||||
|  | +	if (r->shift > 0) | ||||||
|  | +		val >>= r->shift; | ||||||
|  | + | ||||||
|  | +	if (r->inverted) | ||||||
|  | +		val = ~val; | ||||||
|  | + | ||||||
|  | +	val &= (1 << r->bits) - 1; | ||||||
|  | + | ||||||
|  | +	return val; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static __maybe_unused int rtl_set(struct mii_dev *bus, enum rtl_regidx s, unsigned int val) | ||||||
|  | +{ | ||||||
|  | +	const struct rtl_reg *r = &rtl_regs[s]; | ||||||
|  | +	u16 mask = 0xffff; | ||||||
|  | + | ||||||
|  | +	BUG_ON(s >= ARRAY_SIZE(rtl_regs)); | ||||||
|  | + | ||||||
|  | +	if (r->bits == 0) /* unimplemented */ | ||||||
|  | +		return 0; | ||||||
|  | + | ||||||
|  | +	if (r->shift > 0) | ||||||
|  | +		val <<= r->shift; | ||||||
|  | + | ||||||
|  | +	if (r->inverted) | ||||||
|  | +		val = ~val; | ||||||
|  | + | ||||||
|  | +	if (r->bits != 16) { | ||||||
|  | +		mask = (1 << r->bits) - 1; | ||||||
|  | +		mask <<= r->shift; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	val &= mask; | ||||||
|  | + | ||||||
|  | +	return rtl_rmw(bus, r->page, r->phy, r->reg, mask, val); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int rtl8306_probe(struct switch_device *dev) | ||||||
|  | +{ | ||||||
|  | +	struct mii_dev *bus = dev->bus; | ||||||
|  | +	unsigned int chipid, chipver, chiptype; | ||||||
|  | + | ||||||
|  | +	chipid = rtl_get(bus, RTL_REG_CHIPID); | ||||||
|  | +	chipver = rtl_get(bus, RTL_REG_CHIPVER); | ||||||
|  | +	chiptype = rtl_get(bus, RTL_REG_CHIPTYPE); | ||||||
|  | + | ||||||
|  | +	debug("%s: chipid %x, chipver %x, chiptype %x\n", | ||||||
|  | +		__func__, chipid, chipver, chiptype); | ||||||
|  | + | ||||||
|  | +	if (chipid == RTL8306_CHIPID) | ||||||
|  | +		return 0; | ||||||
|  | + | ||||||
|  | +	return 1; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void rtl8306_setup(struct switch_device *dev) | ||||||
|  | +{ | ||||||
|  | +	struct mii_dev *bus = dev->bus; | ||||||
|  | + | ||||||
|  | +	/* initialize cpu port settings */ | ||||||
|  | +	rtl_set(bus, RTL_REG_CPUPORT, dev->cpu_port); | ||||||
|  | +	rtl_set(bus, RTL_REG_EN_CPUPORT, 1); | ||||||
|  | + | ||||||
|  | +	/* enable phy 5 link status */ | ||||||
|  | +	rtl_set(bus, RTL_REG_CPU_LINKUP, 1); | ||||||
|  | +//	rtl_set(bus, RTL_REG_PORT5_TXEN, 1); | ||||||
|  | +//	rtl_set(bus, RTL_REG_PORT5_RXEN, 1); | ||||||
|  | +//	rtl_set(bus, RTL_REG_PORT5_LRNEN, 1); | ||||||
|  | +#ifdef DEBUG | ||||||
|  | + debug("%s: CPU link up: %i\n", | ||||||
|  | +		__func__, rtl_get(bus, RTL_REG_PORT5_LINK)); | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct switch_driver rtl8306_drv = { | ||||||
|  | +	.name = "rtl8306", | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +void switch_rtl8306_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* For archs with manual relocation */ | ||||||
|  | +	rtl8306_drv.probe = rtl8306_probe; | ||||||
|  | +	rtl8306_drv.setup = rtl8306_setup; | ||||||
|  | + | ||||||
|  | +	switch_driver_register(&rtl8306_drv); | ||||||
|  | +} | ||||||
|  | diff --git a/drivers/net/switch/switch.c b/drivers/net/switch/switch.c | ||||||
|  | index 3e34a7f..2e1c668 100644 | ||||||
|  | --- a/drivers/net/switch/switch.c | ||||||
|  | +++ b/drivers/net/switch/switch.c | ||||||
|  | @@ -26,6 +26,9 @@ void switch_init(void) | ||||||
|  |  #if defined(CONFIG_SWITCH_AR8216) | ||||||
|  |  	switch_ar8216_init(); | ||||||
|  |  #endif | ||||||
|  | +#if defined(CONFIG_SWITCH_RTL8306) | ||||||
|  | +	switch_rtl8306_init(); | ||||||
|  | +#endif | ||||||
|  |   | ||||||
|  |  	board_switch_init(); | ||||||
|  |  } | ||||||
|  | diff --git a/include/switch.h b/include/switch.h | ||||||
|  | index ae7b123..927b1d2 100644 | ||||||
|  | --- a/include/switch.h | ||||||
|  | +++ b/include/switch.h | ||||||
|  | @@ -100,6 +100,7 @@ static inline void switch_setup(struct switch_device *dev) | ||||||
|  |  extern void switch_psb697x_init(void); | ||||||
|  |  extern void switch_adm6996i_init(void); | ||||||
|  |  extern void switch_ar8216_init(void); | ||||||
|  | +extern void switch_rtl8306_init(void); | ||||||
|  |   | ||||||
|  |  #endif /* __SWITCH_H */ | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,44 +0,0 @@ | |||||||
| From 207662a9270cc542709fbab0d25fbc361b39748c Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 15:13:49 +0100 |  | ||||||
| Subject: sf: macronix: add support for 4-byte address mode |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/macronix.c |  | ||||||
| +++ b/drivers/mtd/spi/macronix.c |  | ||||||
| @@ -35,6 +35,8 @@ |  | ||||||
|   |  | ||||||
|  #include "spi_flash_internal.h" |  | ||||||
|   |  | ||||||
| +#define MX25XX_EN4B		0xb7	/* Enter 4-byte mode */ |  | ||||||
| + |  | ||||||
|  struct macronix_spi_flash_params { |  | ||||||
|  	u16 idcode; |  | ||||||
|  	u16 nr_blocks; |  | ||||||
| @@ -79,6 +81,13 @@ static const struct macronix_spi_flash_p |  | ||||||
|  	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +static __maybe_unused int macronix_set_4byte_mode(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	struct spi_slave *spi = flash->spi; |  | ||||||
| + |  | ||||||
| +	return spi_flash_cmd(spi, MX25XX_EN4B, NULL, 0); |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  int spi_flash_probe_macronix(struct spi_flash *flash, u8 *idcode) |  | ||||||
|  { |  | ||||||
|  	const struct macronix_spi_flash_params *params; |  | ||||||
| @@ -106,6 +115,11 @@ int spi_flash_probe_macronix(struct spi_ |  | ||||||
|  	flash->sector_size = 256 * 16 * 16; |  | ||||||
|  	flash->size = flash->sector_size * params->nr_blocks; |  | ||||||
|   |  | ||||||
| +#ifdef CONFIG_SPI_FLASH_4BYTE_MODE |  | ||||||
| +	if (flash->size > (1 << 24)) |  | ||||||
| +		flash->set_4byte_mode = macronix_set_4byte_mode; |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
|  	/* Clear BP# bits for read-only flash */ |  | ||||||
|  	spi_flash_cmd_write_status(flash, 0); |  | ||||||
|   |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,21 +0,0 @@ | |||||||
| From 0f31fef3d6a5110684ea31c5064c45fc448013d6 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 15:14:24 +0100 |  | ||||||
| Subject: sf: macronix: add support for MX25L25635E |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/macronix.c |  | ||||||
| +++ b/drivers/mtd/spi/macronix.c |  | ||||||
| @@ -79,6 +79,11 @@ static const struct macronix_spi_flash_p |  | ||||||
|  		.nr_blocks = 256, |  | ||||||
|  		.name = "MX25L12855E", |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.idcode = 0x2019, |  | ||||||
| +		.nr_blocks = 512, |  | ||||||
| +		.name = "MX25L25635E", |  | ||||||
| +	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  static __maybe_unused int macronix_set_4byte_mode(struct spi_flash *flash) |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,21 +0,0 @@ | |||||||
| From a2d80b6b91ac63beea31455ce8d136230c030500 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Wed, 7 Nov 2012 15:14:40 +0100 |  | ||||||
| Subject: sf: macronix: add support for MX66L51235L |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/macronix.c |  | ||||||
| +++ b/drivers/mtd/spi/macronix.c |  | ||||||
| @@ -84,6 +84,11 @@ static const struct macronix_spi_flash_p |  | ||||||
|  		.nr_blocks = 512, |  | ||||||
|  		.name = "MX25L25635E", |  | ||||||
|  	}, |  | ||||||
| +	{ |  | ||||||
| +		.idcode = 0x201A, |  | ||||||
| +		.nr_blocks = 1024, |  | ||||||
| +		.name = "MX66L51235L", |  | ||||||
| +	}, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  static __maybe_unused int macronix_set_4byte_mode(struct spi_flash *flash) |  | ||||||
| @@ -0,0 +1,559 @@ | |||||||
|  | From 7288414298b34dcda1216fee1fe38d05ea0027a2 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 17 Dec 2012 23:32:39 +0100 | ||||||
|  | Subject: net: add driver for Lantiq XWAY ARX100 switch | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/arch/mips/include/asm/arch-arx100/config.h b/arch/mips/include/asm/arch-arx100/config.h | ||||||
|  | index 1a6c9bc..8f955e8 100644 | ||||||
|  | --- a/arch/mips/include/asm/arch-arx100/config.h | ||||||
|  | +++ b/arch/mips/include/asm/arch-arx100/config.h | ||||||
|  | @@ -10,17 +10,21 @@ | ||||||
|  |   * and drivers for this SoC: | ||||||
|  |   * | ||||||
|  |   * CONFIG_LTQ_SUPPORT_UART | ||||||
|  | - * - support the Danube ASC/UART interface and console | ||||||
|  | + * - support the ARX100 ASC/UART interface and console | ||||||
|  |   * | ||||||
|  |   * CONFIG_LTQ_SUPPORT_NOR_FLASH | ||||||
|  |   * - support a parallel NOR flash via the CFI interface in flash bank 0 | ||||||
|  |   * | ||||||
|  |   * CONFIG_LTQ_SUPPORT_ETHERNET | ||||||
|  | - * - support the Danube ETOP and MAC interface | ||||||
|  | + * - support the ARX100 ETOP and MAC interface | ||||||
|  |   * | ||||||
|  |   * CONFIG_LTQ_SUPPORT_SPI_FLASH | ||||||
|  | - * - support the Danube SPI interface and serial flash drivers | ||||||
|  | + * - support the ARX100 SPI interface and serial flash drivers | ||||||
|  |   * - specific SPI flash drivers must be configured separately | ||||||
|  | + * | ||||||
|  | + * CONFIG_LTQ_SUPPORT_SPL_SPI_FLASH | ||||||
|  | + * - build a preloader that runs in the internal SRAM and loads | ||||||
|  | + *   the U-Boot from SPI flash into RAM | ||||||
|  |   */ | ||||||
|  |   | ||||||
|  |  #ifndef __ARX100_CONFIG_H__ | ||||||
|  | diff --git a/arch/mips/include/asm/arch-arx100/switch.h b/arch/mips/include/asm/arch-arx100/switch.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..301056c | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/arch/mips/include/asm/arch-arx100/switch.h | ||||||
|  | @@ -0,0 +1,86 @@ | ||||||
|  | +/* | ||||||
|  | + *   Copyright (C) 2012-2013 Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | + * | ||||||
|  | + *   SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __ARX100_SWITCH_H__ | ||||||
|  | +#define __ARX100_SWITCH_H__ | ||||||
|  | + | ||||||
|  | +struct ar9_switch_regs { | ||||||
|  | +	__be32	ps;		/* Port status*/ | ||||||
|  | +	__be32	p0_ctl;		/* Port 0 control */ | ||||||
|  | +	__be32	p1_ctl;		/* Port 1 control */ | ||||||
|  | +	__be32	p2_ctl;		/* Port 2 control */ | ||||||
|  | +	__be32	p0_vlan;	/* Port 0 VLAN control */ | ||||||
|  | +	__be32	p1_vlan;	/* Port 1 VLAN control */ | ||||||
|  | +	__be32	p2_vlan;	/* Port 2 VLAN control */ | ||||||
|  | +	__be32	p0_inctl;	/* Port 0 ingress control */ | ||||||
|  | +	__be32	p1_inctl;	/* Port 1 ingress control */ | ||||||
|  | +	__be32	p2_inctl;	/* Port 2 ingress control */ | ||||||
|  | +	u32	rsvd0[16]; | ||||||
|  | +	__be32	sw_gctl0;	/* Switch global control 0 */ | ||||||
|  | +	__be32	sw_gctl1;	/* Switch global control 1 */ | ||||||
|  | +	__be32	arp;		/* ARP/RARP */ | ||||||
|  | +	__be32	strm_ctl;	/* Storm control */ | ||||||
|  | +	__be32	rgmii_ctl;	/* RGMII/GMII port control */ | ||||||
|  | +	u32	rsvd1[4]; | ||||||
|  | +	__be32	pmac_hd_ctl;	/* PMAC header control */ | ||||||
|  | +	u32	rsvd2[15]; | ||||||
|  | +	__be32	mdio_ctrl;	/* MDIO indirect access control */ | ||||||
|  | +	__be32	mdio_data;	/* MDIO indirect read data */ | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +#define BUILD_CHECK_AR9_REG(name, offset)	\ | ||||||
|  | +	BUILD_BUG_ON(offsetof(struct ar9_switch_regs, name) != (offset)) | ||||||
|  | + | ||||||
|  | +static inline void build_check_ar9_registers(void) | ||||||
|  | +{ | ||||||
|  | +	BUILD_CHECK_AR9_REG(sw_gctl0, 0x68); | ||||||
|  | +	BUILD_CHECK_AR9_REG(rgmii_ctl, 0x78); | ||||||
|  | +	BUILD_CHECK_AR9_REG(pmac_hd_ctl, 0x8c); | ||||||
|  | +	BUILD_CHECK_AR9_REG(mdio_ctrl, 0xcc); | ||||||
|  | +	BUILD_CHECK_AR9_REG(mdio_data, 0xd0); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +#define P0_CTL_FLP		(1 << 18) | ||||||
|  | +#define P0_CTL_FLD		(1 << 17) | ||||||
|  | + | ||||||
|  | +#define SW_GCTL0_SE		(1 << 31) | ||||||
|  | + | ||||||
|  | +#define RGMII_CTL_P1_SHIFT	10 | ||||||
|  | +#define RGMII_CTL_P1_MASK	(0x3FF << RGMII_CTL_P1_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0_MASK	0x3FF | ||||||
|  | +#define RGMII_CTL_P0IS_SHIFT	8 | ||||||
|  | +#define RGMII_CTL_P0IS_RGMII	(0x0 << RGMII_CTL_P0IS_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0IS_MII	(0x1 << RGMII_CTL_P0IS_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0IS_REVMII	(0x2 << RGMII_CTL_P0IS_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0IS_RMII	(0x3 << RGMII_CTL_P0IS_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0RDLY_SHIFT	6 | ||||||
|  | +#define RGMII_CTL_P0RDLY_0_0	(0x0 << RGMII_CTL_P0RDLY_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0RDLY_1_5	(0x1 << RGMII_CTL_P0RDLY_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0RDLY_1_75	(0x2 << RGMII_CTL_P0RDLY_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0RDLY_2_0	(0x3 << RGMII_CTL_P0RDLY_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0TDLY_SHIFT	4 | ||||||
|  | +#define RGMII_CTL_P0TDLY_0_0	(0x0 << RGMII_CTL_P0TDLY_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0TDLY_1_5	(0x1 << RGMII_CTL_P0TDLY_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0TDLY_1_75	(0x2 << RGMII_CTL_P0TDLY_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0TDLY_2_0	(0x3 << RGMII_CTL_P0TDLY_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0SPD_SHIFT	2 | ||||||
|  | +#define RGMII_CTL_P0SPD_10	(0x0 << RGMII_CTL_P0SPD_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0SPD_100	(0x1 << RGMII_CTL_P0SPD_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0SPD_1000	(0x2 << RGMII_CTL_P0SPD_SHIFT) | ||||||
|  | +#define RGMII_CTL_P0DUP_FULL	(1 << 1) | ||||||
|  | +#define RGMII_CTL_P0FCE_EN	(1 << 0) | ||||||
|  | + | ||||||
|  | +#define PMAC_HD_CTL_AC		(1 << 18) | ||||||
|  | + | ||||||
|  | +#define MDIO_CTRL_WD_SHIFT	16 | ||||||
|  | +#define MDIO_CTRL_MBUSY		(1 << 15) | ||||||
|  | +#define MDIO_CTRL_OP_READ	(1 << 11) | ||||||
|  | +#define MDIO_CTRL_OP_WRITE	(1 << 10) | ||||||
|  | +#define MDIO_CTRL_PHYAD_SHIFT	5 | ||||||
|  | +#define MDIO_CTRL_PHYAD_MASK	(0x1f << MDIO_CTRL_PHYAD_SHIFT) | ||||||
|  | +#define MDIO_CTRL_REGAD_MASK	0x1f | ||||||
|  | + | ||||||
|  | +#endif /* __ARX100_SWITCH_H__ */ | ||||||
|  | diff --git a/drivers/net/Makefile b/drivers/net/Makefile | ||||||
|  | index bbc2c92..926b8c2 100644 | ||||||
|  | --- a/drivers/net/Makefile | ||||||
|  | +++ b/drivers/net/Makefile | ||||||
|  | @@ -38,6 +38,7 @@ COBJS-$(CONFIG_DRIVER_KS8695ETH) += ks8695eth.o | ||||||
|  |  COBJS-$(CONFIG_KS8851_MLL) += ks8851_mll.o | ||||||
|  |  COBJS-$(CONFIG_LAN91C96) += lan91c96.o | ||||||
|  |  COBJS-$(CONFIG_LANTIQ_DANUBE_ETOP) += lantiq_danube_etop.o | ||||||
|  | +COBJS-$(CONFIG_LANTIQ_ARX100_SWITCH) += lantiq_arx100_switch.o | ||||||
|  |  COBJS-$(CONFIG_LANTIQ_VRX200_SWITCH) += lantiq_vrx200_switch.o | ||||||
|  |  COBJS-$(CONFIG_MACB) += macb.o | ||||||
|  |  COBJS-$(CONFIG_MCFFEC) += mcffec.o mcfmii.o | ||||||
|  | diff --git a/drivers/net/lantiq_arx100_switch.c b/drivers/net/lantiq_arx100_switch.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..cc65249 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/drivers/net/lantiq_arx100_switch.c | ||||||
|  | @@ -0,0 +1,410 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | +#define DEBUG | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <malloc.h> | ||||||
|  | +#include <netdev.h> | ||||||
|  | +#include <miiphy.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <linux/compiler.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/processor.h> | ||||||
|  | +#include <asm/lantiq/io.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/pm.h> | ||||||
|  | +#include <asm/lantiq/reset.h> | ||||||
|  | +#include <asm/lantiq/dma.h> | ||||||
|  | +#include <asm/arch/soc.h> | ||||||
|  | +#include <asm/arch/switch.h> | ||||||
|  | + | ||||||
|  | +#define LTQ_ETH_RX_BUFFER_CNT		PKTBUFSRX | ||||||
|  | +#define LTQ_ETH_TX_BUFFER_CNT		8 | ||||||
|  | +#define LTQ_ETH_RX_DATA_SIZE		PKTSIZE_ALIGN | ||||||
|  | +#define LTQ_ETH_IP_ALIGN		2 | ||||||
|  | + | ||||||
|  | +#define LTQ_MDIO_DRV_NAME		"ltq-mdio" | ||||||
|  | +#define LTQ_ETH_DRV_NAME		"ltq-eth" | ||||||
|  | + | ||||||
|  | +#define LTQ_ETHSW_MAX_GMAC		2 | ||||||
|  | +#define LTQ_ETHSW_PMAC			2 | ||||||
|  | + | ||||||
|  | +struct ltq_eth_priv { | ||||||
|  | +	struct ltq_dma_device dma_dev; | ||||||
|  | +	struct mii_dev *bus; | ||||||
|  | +	struct eth_device *dev; | ||||||
|  | +	struct phy_device *phymap[LTQ_ETHSW_MAX_GMAC]; | ||||||
|  | +	int rx_num; | ||||||
|  | +	int tx_num; | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct ar9_switch_regs *switch_regs = | ||||||
|  | +	(struct ar9_switch_regs *) CKSEG1ADDR(LTQ_SWITCH_BASE); | ||||||
|  | + | ||||||
|  | +static int ltq_mdio_is_busy(void) | ||||||
|  | +{ | ||||||
|  | +	u32 mdio_ctrl = ltq_readl(&switch_regs->mdio_ctrl); | ||||||
|  | + | ||||||
|  | +	return mdio_ctrl & MDIO_CTRL_MBUSY; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void ltq_mdio_poll(void) | ||||||
|  | +{ | ||||||
|  | +	while (ltq_mdio_is_busy()) | ||||||
|  | +		cpu_relax(); | ||||||
|  | + | ||||||
|  | +	__udelay(1000); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int ltq_mdio_read(struct mii_dev *bus, int phyad, int devad, | ||||||
|  | +					int regad) | ||||||
|  | +{ | ||||||
|  | +	u32 mdio_ctrl; | ||||||
|  | +	int retval; | ||||||
|  | + | ||||||
|  | +	mdio_ctrl = MDIO_CTRL_MBUSY | MDIO_CTRL_OP_READ | | ||||||
|  | +		((phyad << MDIO_CTRL_PHYAD_SHIFT) & MDIO_CTRL_PHYAD_MASK) | | ||||||
|  | +		(regad & MDIO_CTRL_REGAD_MASK); | ||||||
|  | + | ||||||
|  | +	ltq_mdio_poll(); | ||||||
|  | +	ltq_writel(&switch_regs->mdio_ctrl, mdio_ctrl); | ||||||
|  | +	ltq_mdio_poll(); | ||||||
|  | +	retval = ltq_readl(&switch_regs->mdio_data); | ||||||
|  | +	ltq_writel(&switch_regs->mdio_data, 0xFFFF); | ||||||
|  | + | ||||||
|  | +	debug("%s: phyad %02x, regad %02x, val %02x\n", __func__, phyad, regad, retval); | ||||||
|  | + | ||||||
|  | +	return retval; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int ltq_mdio_write(struct mii_dev *bus, int phyad, int devad, | ||||||
|  | +					int regad, u16 val) | ||||||
|  | +{ | ||||||
|  | +	u32 mdio_ctrl; | ||||||
|  | + | ||||||
|  | +	debug("%s: phyad %02x, regad %02x, val %02x\n", __func__, phyad, regad, val); | ||||||
|  | + | ||||||
|  | +	mdio_ctrl = (val << MDIO_CTRL_WD_SHIFT) | MDIO_CTRL_MBUSY | | ||||||
|  | +		MDIO_CTRL_OP_WRITE | | ||||||
|  | +		((phyad << MDIO_CTRL_PHYAD_SHIFT) & MDIO_CTRL_PHYAD_MASK) | | ||||||
|  | +		(regad & MDIO_CTRL_REGAD_MASK); | ||||||
|  | + | ||||||
|  | +	ltq_mdio_poll(); | ||||||
|  | +	ltq_writel(&switch_regs->mdio_ctrl, mdio_ctrl); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void ltq_eth_gmac_update(struct phy_device *phydev, int num) | ||||||
|  | +{ | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static inline u8 *ltq_eth_rx_packet_align(int rx_num) | ||||||
|  | +{ | ||||||
|  | +	u8 *packet = (u8 *) NetRxPackets[rx_num]; | ||||||
|  | + | ||||||
|  | +	/* | ||||||
|  | +	 * IP header needs | ||||||
|  | +	 */ | ||||||
|  | +	return packet + LTQ_ETH_IP_ALIGN; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int ltq_eth_init(struct eth_device *dev, bd_t *bis) | ||||||
|  | +{ | ||||||
|  | +	struct ltq_eth_priv *priv = dev->priv; | ||||||
|  | +	struct ltq_dma_device *dma_dev = &priv->dma_dev; | ||||||
|  | +	struct phy_device *phydev; | ||||||
|  | +	int i; | ||||||
|  | + | ||||||
|  | +	for (i = 0; i < LTQ_ETHSW_MAX_GMAC; i++) { | ||||||
|  | +		phydev = priv->phymap[i]; | ||||||
|  | +		if (!phydev) | ||||||
|  | +			continue; | ||||||
|  | + | ||||||
|  | +		phy_startup(phydev); | ||||||
|  | +		ltq_eth_gmac_update(phydev, i); | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	for (i = 0; i < LTQ_ETH_RX_BUFFER_CNT; i++) | ||||||
|  | +		ltq_dma_rx_map(dma_dev, i, ltq_eth_rx_packet_align(i), | ||||||
|  | +			LTQ_ETH_RX_DATA_SIZE); | ||||||
|  | + | ||||||
|  | +	ltq_dma_enable(dma_dev); | ||||||
|  | + | ||||||
|  | +	priv->rx_num = 0; | ||||||
|  | +	priv->tx_num = 0; | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void ltq_eth_halt(struct eth_device *dev) | ||||||
|  | +{ | ||||||
|  | +	struct ltq_eth_priv *priv = dev->priv; | ||||||
|  | +	struct ltq_dma_device *dma_dev = &priv->dma_dev; | ||||||
|  | +	struct phy_device *phydev; | ||||||
|  | +	int i; | ||||||
|  | + | ||||||
|  | +	ltq_dma_reset(dma_dev); | ||||||
|  | + | ||||||
|  | +	for (i = 0; i < LTQ_ETHSW_MAX_GMAC; i++) { | ||||||
|  | +		phydev = priv->phymap[i]; | ||||||
|  | +		if (!phydev) | ||||||
|  | +			continue; | ||||||
|  | + | ||||||
|  | +		phy_shutdown(phydev); | ||||||
|  | +		phydev->link = 0; | ||||||
|  | +		ltq_eth_gmac_update(phydev, i); | ||||||
|  | +	} | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int ltq_eth_send(struct eth_device *dev, void *packet, int length) | ||||||
|  | +{ | ||||||
|  | +	struct ltq_eth_priv *priv = dev->priv; | ||||||
|  | +	struct ltq_dma_device *dma_dev = &priv->dma_dev; | ||||||
|  | +	int err; | ||||||
|  | + | ||||||
|  | +	err = ltq_dma_tx_map(dma_dev, priv->tx_num, packet, length, 10); | ||||||
|  | +	if (err) { | ||||||
|  | +		puts("NET: timeout on waiting for TX descriptor\n"); | ||||||
|  | +		return -1; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	priv->tx_num = (priv->tx_num + 1) % LTQ_ETH_TX_BUFFER_CNT; | ||||||
|  | + | ||||||
|  | +	return err; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int ltq_eth_recv(struct eth_device *dev) | ||||||
|  | +{ | ||||||
|  | +	struct ltq_eth_priv *priv = dev->priv; | ||||||
|  | +	struct ltq_dma_device *dma_dev = &priv->dma_dev; | ||||||
|  | +	u8 *packet; | ||||||
|  | +	int len; | ||||||
|  | + | ||||||
|  | +	if (!ltq_dma_rx_poll(dma_dev, priv->rx_num)) | ||||||
|  | +		return 0; | ||||||
|  | + | ||||||
|  | +#if 0 | ||||||
|  | +	printf("%s: rx_num %d\n", __func__, priv->rx_num); | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +	len = ltq_dma_rx_length(dma_dev, priv->rx_num); | ||||||
|  | +	packet = ltq_eth_rx_packet_align(priv->rx_num); | ||||||
|  | + | ||||||
|  | +#if 0 | ||||||
|  | +	printf("%s: received: packet %p, len %u, rx_num %d\n", | ||||||
|  | +		__func__, packet, len, priv->rx_num); | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +	if (len) | ||||||
|  | +		NetReceive(packet, len); | ||||||
|  | + | ||||||
|  | +	ltq_dma_rx_map(dma_dev, priv->rx_num, packet, | ||||||
|  | +		LTQ_ETH_RX_DATA_SIZE); | ||||||
|  | + | ||||||
|  | +	priv->rx_num = (priv->rx_num + 1) % LTQ_ETH_RX_BUFFER_CNT; | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void ltq_eth_pmac_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* Add CRC to packets from DMA to PMAC */ | ||||||
|  | +	ltq_setbits(&switch_regs->pmac_hd_ctl, PMAC_HD_CTL_AC); | ||||||
|  | + | ||||||
|  | +	/* Force link up */ | ||||||
|  | +	ltq_setbits(&switch_regs->p2_ctl, P0_CTL_FLP); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void ltq_eth_hw_init(const struct ltq_eth_port_config *port) | ||||||
|  | +{ | ||||||
|  | +	/* Power up ethernet subsystems */ | ||||||
|  | +	ltq_pm_enable(LTQ_PM_ETH); | ||||||
|  | + | ||||||
|  | +	/* Enable switch core */ | ||||||
|  | +	ltq_setbits(&switch_regs->sw_gctl0, SW_GCTL0_SE); | ||||||
|  | + | ||||||
|  | +	/* MII/MDIO */ | ||||||
|  | +	gpio_set_altfunc(42, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* MII/MDC */ | ||||||
|  | +	gpio_set_altfunc(43, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | + | ||||||
|  | +	ltq_eth_pmac_init(); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static void ltq_eth_port_config(struct ltq_eth_priv *priv, | ||||||
|  | +				const struct ltq_eth_port_config *port) | ||||||
|  | +{ | ||||||
|  | +	struct phy_device *phydev; | ||||||
|  | +	struct switch_device *sw; | ||||||
|  | +	u32 rgmii_ctl; | ||||||
|  | +	unsigned int port_ctl, port_xmii = 0; | ||||||
|  | + | ||||||
|  | +	if (port->num > 1) | ||||||
|  | +		return; | ||||||
|  | + | ||||||
|  | +	rgmii_ctl = ltq_readl(&switch_regs->rgmii_ctl); | ||||||
|  | + | ||||||
|  | +	if (port->num == 1) | ||||||
|  | +		port_ctl = ltq_readl(&switch_regs->p1_ctl); | ||||||
|  | +	else | ||||||
|  | +		port_ctl = ltq_readl(&switch_regs->p0_ctl); | ||||||
|  | + | ||||||
|  | +	switch (port->phy_if) { | ||||||
|  | +	case PHY_INTERFACE_MODE_RGMII: | ||||||
|  | +		port_xmii = RGMII_CTL_P0IS_RGMII; | ||||||
|  | + | ||||||
|  | +		switch (port->rgmii_tx_delay) { | ||||||
|  | +		case 1: | ||||||
|  | +			port_xmii |= RGMII_CTL_P0TDLY_1_5; | ||||||
|  | +			break; | ||||||
|  | +		case 2: | ||||||
|  | +			port_xmii |= RGMII_CTL_P0TDLY_1_75; | ||||||
|  | +			break; | ||||||
|  | +		case 3: | ||||||
|  | +			port_xmii |= RGMII_CTL_P0TDLY_2_0; | ||||||
|  | +			break; | ||||||
|  | +		default: | ||||||
|  | +			break; | ||||||
|  | +		} | ||||||
|  | + | ||||||
|  | +		switch (port->rgmii_rx_delay) { | ||||||
|  | +		case 1: | ||||||
|  | +			port_xmii |= RGMII_CTL_P0RDLY_1_5; | ||||||
|  | +			break; | ||||||
|  | +		case 2: | ||||||
|  | +			port_xmii |= RGMII_CTL_P0RDLY_1_75; | ||||||
|  | +			break; | ||||||
|  | +		case 3: | ||||||
|  | +			port_xmii |= RGMII_CTL_P0RDLY_2_0; | ||||||
|  | +			break; | ||||||
|  | +		default: | ||||||
|  | +			break; | ||||||
|  | +		} | ||||||
|  | + | ||||||
|  | +		if (!(port->flags & LTQ_ETH_PORT_PHY)) { | ||||||
|  | +			port_xmii |= (RGMII_CTL_P0SPD_1000 | | ||||||
|  | +					RGMII_CTL_P0DUP_FULL); | ||||||
|  | +			port_ctl |= P0_CTL_FLP; | ||||||
|  | +		} | ||||||
|  | + | ||||||
|  | +		break; | ||||||
|  | +	case PHY_INTERFACE_MODE_MII: | ||||||
|  | +		port_xmii = RGMII_CTL_P0IS_MII; | ||||||
|  | + | ||||||
|  | +		if (!(port->flags & LTQ_ETH_PORT_PHY)) { | ||||||
|  | +			port_xmii |= (RGMII_CTL_P0SPD_100 | | ||||||
|  | +					RGMII_CTL_P0DUP_FULL); | ||||||
|  | +			port_ctl |= P0_CTL_FLP; | ||||||
|  | +		} | ||||||
|  | + | ||||||
|  | +		break; | ||||||
|  | +	default: | ||||||
|  | +		break; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	if (port->num == 1) { | ||||||
|  | +		ltq_writel(&switch_regs->p1_ctl, port_ctl); | ||||||
|  | + | ||||||
|  | +		rgmii_ctl &= ~RGMII_CTL_P1_MASK; | ||||||
|  | +		rgmii_ctl |= (port_xmii << RGMII_CTL_P1_SHIFT); | ||||||
|  | +	} else { | ||||||
|  | +		ltq_writel(&switch_regs->p0_ctl, port_ctl); | ||||||
|  | + | ||||||
|  | +		rgmii_ctl &= ~RGMII_CTL_P0_MASK; | ||||||
|  | +		rgmii_ctl |= port_xmii; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	ltq_writel(&switch_regs->rgmii_ctl, rgmii_ctl); | ||||||
|  | + | ||||||
|  | +	/* Connect to external switch */ | ||||||
|  | +	if (port->flags & LTQ_ETH_PORT_SWITCH) { | ||||||
|  | +		sw = switch_connect(priv->bus); | ||||||
|  | +		if (sw) | ||||||
|  | +			switch_setup(sw); | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	/* Connect to internal/external PHYs */ | ||||||
|  | +	if (port->flags & LTQ_ETH_PORT_PHY) { | ||||||
|  | +		phydev = phy_connect(priv->bus, port->phy_addr, priv->dev, | ||||||
|  | +					port->phy_if); | ||||||
|  | +		if (phydev) | ||||||
|  | +			phy_config(phydev); | ||||||
|  | + | ||||||
|  | +		priv->phymap[port->num] = phydev; | ||||||
|  | +	} | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int ltq_eth_initialize(const struct ltq_eth_board_config *board_config) | ||||||
|  | +{ | ||||||
|  | +	struct eth_device *dev; | ||||||
|  | +	struct mii_dev *bus; | ||||||
|  | +	struct ltq_eth_priv *priv; | ||||||
|  | +	struct ltq_dma_device *dma_dev; | ||||||
|  | +	const struct ltq_eth_port_config *port = &board_config->ports[0]; | ||||||
|  | +	int i, ret; | ||||||
|  | + | ||||||
|  | +	build_check_ar9_registers(); | ||||||
|  | + | ||||||
|  | +	ltq_dma_init(); | ||||||
|  | +	ltq_eth_hw_init(port); | ||||||
|  | + | ||||||
|  | +	dev = calloc(1, sizeof(*dev)); | ||||||
|  | +	if (!dev) | ||||||
|  | +		return -1; | ||||||
|  | + | ||||||
|  | +	priv = calloc(1, sizeof(*priv)); | ||||||
|  | +	if (!priv) | ||||||
|  | +		return -1; | ||||||
|  | + | ||||||
|  | +	bus = mdio_alloc(); | ||||||
|  | +	if (!bus) | ||||||
|  | +		return -1; | ||||||
|  | + | ||||||
|  | +	sprintf(dev->name, LTQ_ETH_DRV_NAME); | ||||||
|  | +	dev->priv = priv; | ||||||
|  | +	dev->init = ltq_eth_init; | ||||||
|  | +	dev->halt = ltq_eth_halt; | ||||||
|  | +	dev->recv = ltq_eth_recv; | ||||||
|  | +	dev->send = ltq_eth_send; | ||||||
|  | + | ||||||
|  | +	sprintf(bus->name, LTQ_MDIO_DRV_NAME); | ||||||
|  | +	bus->read = ltq_mdio_read; | ||||||
|  | +	bus->write = ltq_mdio_write; | ||||||
|  | +	bus->priv = priv; | ||||||
|  | + | ||||||
|  | +	dma_dev = &priv->dma_dev; | ||||||
|  | +	dma_dev->port = 0; | ||||||
|  | +	dma_dev->rx_chan.chan_no = 0; | ||||||
|  | +	dma_dev->rx_chan.class = 0; | ||||||
|  | +	dma_dev->rx_chan.num_desc = LTQ_ETH_RX_BUFFER_CNT; | ||||||
|  | +	dma_dev->rx_endian_swap = LTQ_DMA_ENDIANESS_B3_B2_B1_B0; | ||||||
|  | +	dma_dev->rx_burst_len = LTQ_DMA_BURST_2WORDS; | ||||||
|  | +	dma_dev->tx_chan.chan_no = 1; | ||||||
|  | +	dma_dev->tx_chan.class = 0; | ||||||
|  | +	dma_dev->tx_chan.num_desc = LTQ_ETH_TX_BUFFER_CNT; | ||||||
|  | +	dma_dev->tx_endian_swap = LTQ_DMA_ENDIANESS_B3_B2_B1_B0; | ||||||
|  | +	dma_dev->tx_burst_len = LTQ_DMA_BURST_2WORDS; | ||||||
|  | + | ||||||
|  | +	priv->bus = bus; | ||||||
|  | +	priv->dev = dev; | ||||||
|  | + | ||||||
|  | +	ret = ltq_dma_register(dma_dev); | ||||||
|  | +	if (ret) | ||||||
|  | +		return ret; | ||||||
|  | + | ||||||
|  | +	ret = mdio_register(bus); | ||||||
|  | +	if (ret) | ||||||
|  | +		return ret; | ||||||
|  | + | ||||||
|  | +	ret = eth_register(dev); | ||||||
|  | +	if (ret) | ||||||
|  | +		return ret; | ||||||
|  | + | ||||||
|  | +	for (i = 0; i < board_config->num_ports; i++) | ||||||
|  | +		ltq_eth_port_config(priv, &board_config->ports[i]); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,133 +0,0 @@ | |||||||
| From 7f6ded11965b09daf6da44d4fa98da17b9fba36c Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Tue, 6 Nov 2012 19:41:26 +0100 |  | ||||||
| Subject: sf: add MTD layer driver for SPI flash devices |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/Makefile |  | ||||||
| +++ b/drivers/mtd/spi/Makefile |  | ||||||
| @@ -30,6 +30,7 @@ COBJS-$(CONFIG_SPL_SPI_LOAD)	+= spi_spl_ |  | ||||||
|  endif |  | ||||||
|   |  | ||||||
|  COBJS-$(CONFIG_SPI_FLASH)	+= spi_flash.o |  | ||||||
| +COBJS-$(CONFIG_SPI_FLASH_MTD)	+= spi_flash_mtd.o |  | ||||||
|  COBJS-$(CONFIG_SPI_FLASH_ATMEL)	+= atmel.o |  | ||||||
|  COBJS-$(CONFIG_SPI_FLASH_EON)	+= eon.o |  | ||||||
|  COBJS-$(CONFIG_SPI_FLASH_MACRONIX)	+= macronix.o |  | ||||||
| --- a/drivers/mtd/spi/spi_flash_internal.h |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash_internal.h |  | ||||||
| @@ -122,6 +122,9 @@ static inline int spi_flash_set_4byte_mo |  | ||||||
|  } |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| +/* SPI flash MTD adapter init */ |  | ||||||
| +int spi_flash_mtd_init(struct spi_flash *flash); |  | ||||||
| + |  | ||||||
|  /* Manufacturer-specific probe functions */ |  | ||||||
|  int spi_flash_probe_spansion(struct spi_flash *flash, u8 *idcode); |  | ||||||
|  int spi_flash_probe_atmel(struct spi_flash *flash, u8 *idcode); |  | ||||||
| --- /dev/null |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash_mtd.c |  | ||||||
| @@ -0,0 +1,101 @@ |  | ||||||
| +/* |  | ||||||
| + * (C) Copyright 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com |  | ||||||
| + * |  | ||||||
| + * MTD layer driver for SPI flash devices |  | ||||||
| + * |  | ||||||
| + * This file is released under the terms of GPL v2 and any later version. |  | ||||||
| + * See the file COPYING in the root directory of the source tree for details. |  | ||||||
| + */ |  | ||||||
| + |  | ||||||
| +#include <common.h> |  | ||||||
| +#include <malloc.h> |  | ||||||
| +#include <asm/errno.h> |  | ||||||
| +#include <linux/mtd/mtd.h> |  | ||||||
| +#include <spi_flash.h> |  | ||||||
| + |  | ||||||
| +static struct mtd_info sf_mtd_info; |  | ||||||
| +static char sf_mtd_name[8]; |  | ||||||
| + |  | ||||||
| +static int spi_flash_mtd_erase(struct mtd_info *mtd, struct erase_info *instr) |  | ||||||
| +{ |  | ||||||
| +	struct spi_flash *flash = mtd->priv; |  | ||||||
| +	int err; |  | ||||||
| + |  | ||||||
| +	instr->state = MTD_ERASING; |  | ||||||
| + |  | ||||||
| +	err = spi_flash_erase(flash, instr->addr, instr->len); |  | ||||||
| +	if (err) { |  | ||||||
| +		instr->state = MTD_ERASE_FAILED; |  | ||||||
| +		instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN; |  | ||||||
| +		return -EIO; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	instr->state = MTD_ERASE_DONE; |  | ||||||
| +	mtd_erase_callback(instr); |  | ||||||
| + |  | ||||||
| +	return 0; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +static int spi_flash_mtd_read(struct mtd_info *mtd, loff_t from, size_t len, |  | ||||||
| +	size_t *retlen, u_char *buf) |  | ||||||
| +{ |  | ||||||
| +	struct spi_flash *flash = mtd->priv; |  | ||||||
| +	int err; |  | ||||||
| + |  | ||||||
| +	err = spi_flash_read(flash, from, len, buf); |  | ||||||
| +	if (!err) |  | ||||||
| +		*retlen = len; |  | ||||||
| + |  | ||||||
| +	return err; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +static int spi_flash_mtd_write(struct mtd_info *mtd, loff_t to, size_t len, |  | ||||||
| +	size_t *retlen, const u_char *buf) |  | ||||||
| +{ |  | ||||||
| +	struct spi_flash *flash = mtd->priv; |  | ||||||
| +	int err; |  | ||||||
| + |  | ||||||
| +	err = spi_flash_write(flash, to, len, buf); |  | ||||||
| +	if (!err) |  | ||||||
| +		*retlen = len; |  | ||||||
| + |  | ||||||
| +	return err; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +static void spi_flash_mtd_sync(struct mtd_info *mtd) |  | ||||||
| +{ |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +static int spi_flash_mtd_number(void) |  | ||||||
| +{ |  | ||||||
| +#ifdef CONFIG_SYS_MAX_FLASH_BANKS |  | ||||||
| +	return CONFIG_SYS_MAX_FLASH_BANKS; |  | ||||||
| +#else |  | ||||||
| +	return 0; |  | ||||||
| +#endif |  | ||||||
| +} |  | ||||||
| + |  | ||||||
| +int spi_flash_mtd_init(struct spi_flash *flash) |  | ||||||
| +{ |  | ||||||
| +	memset(&sf_mtd_info, 0, sizeof(sf_mtd_info)); |  | ||||||
| +	sprintf(sf_mtd_name, "nor%d", spi_flash_mtd_number()); |  | ||||||
| + |  | ||||||
| +	sf_mtd_info.name = sf_mtd_name; |  | ||||||
| +	sf_mtd_info.type = MTD_NORFLASH; |  | ||||||
| +	sf_mtd_info.flags = MTD_CAP_NORFLASH; |  | ||||||
| +	sf_mtd_info.writesize = 1; |  | ||||||
| + |  | ||||||
| +	sf_mtd_info.erase = spi_flash_mtd_erase; |  | ||||||
| +	sf_mtd_info.read = spi_flash_mtd_read; |  | ||||||
| +	sf_mtd_info.write = spi_flash_mtd_write; |  | ||||||
| +	sf_mtd_info.sync = spi_flash_mtd_sync; |  | ||||||
| + |  | ||||||
| +	sf_mtd_info.size = flash->size; |  | ||||||
| +	sf_mtd_info.priv = flash; |  | ||||||
| + |  | ||||||
| +	/* Only uniform flash devices for now */ |  | ||||||
| +	sf_mtd_info.numeraseregions = 0; |  | ||||||
| +	sf_mtd_info.erasesize = flash->sector_size; |  | ||||||
| + |  | ||||||
| +	return add_mtd_device(&sf_mtd_info); |  | ||||||
| +} |  | ||||||
| @@ -1,57 +0,0 @@ | |||||||
| From aa9d5d64ca6441cb24e22dc3c1f707da62da2887 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Tue, 6 Nov 2012 19:35:17 +0100 |  | ||||||
| Subject: sf: add init function |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/spi/spi_flash.c |  | ||||||
| +++ b/drivers/mtd/spi/spi_flash.c |  | ||||||
| @@ -482,3 +482,36 @@ void spi_flash_free(struct spi_flash *fl |  | ||||||
|  	spi_flash_free_spl(flash); |  | ||||||
|  	free(flash); |  | ||||||
|  } |  | ||||||
| + |  | ||||||
| +#ifdef CONFIG_SPI_FLASH_MTD |  | ||||||
| +static int spi_flash_mtd_register(void) |  | ||||||
| +{ |  | ||||||
| +	struct spi_flash *flash; |  | ||||||
| +	int err; |  | ||||||
| + |  | ||||||
| +	flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS, |  | ||||||
| +			CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE); |  | ||||||
| +	if (!flash) |  | ||||||
| +		return -1; |  | ||||||
| + |  | ||||||
| +	err = spi_flash_mtd_init(flash); |  | ||||||
| +	if (err) |  | ||||||
| +		spi_flash_free(flash); |  | ||||||
| + |  | ||||||
| +	return err; |  | ||||||
| +} |  | ||||||
| +#else |  | ||||||
| +static int spi_flash_mtd_register(void) |  | ||||||
| +{ |  | ||||||
| +	return 0; |  | ||||||
| +} |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
| +int spi_flash_init(void) |  | ||||||
| +{ |  | ||||||
| +	int err; |  | ||||||
| + |  | ||||||
| +	err = spi_flash_mtd_register(); |  | ||||||
| + |  | ||||||
| +	return err; |  | ||||||
| +} |  | ||||||
| --- a/include/spi_flash.h |  | ||||||
| +++ b/include/spi_flash.h |  | ||||||
| @@ -51,6 +51,8 @@ struct spi_flash { |  | ||||||
|  #endif |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| +int spi_flash_init(void); |  | ||||||
| + |  | ||||||
|  struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, |  | ||||||
|  		unsigned int max_hz, unsigned int spi_mode); |  | ||||||
|  void spi_flash_free(struct spi_flash *flash); |  | ||||||
| @@ -1,11 +1,14 @@ | |||||||
| From 1b77d4249b5addbf3b0848db6992a445019a1865 Mon Sep 17 00:00:00 2001 | From 1da5479d59b39d7931a2b0efabdfa314f6788b6d Mon Sep 17 00:00:00 2001 | ||||||
| From: Luka Perkov <luka@openwrt.org> | From: Luka Perkov <luka@openwrt.org> | ||||||
| Date: Wed, 29 Aug 2012 22:08:42 +0200 | Date: Sat, 2 Mar 2013 23:34:00 +0100 | ||||||
| Subject: tools: add some helper tools for Lantiq SoCs | Subject: tools: add some helper tools for Lantiq SoCs | ||||||
| 
 | 
 | ||||||
| Signed-off-by: Luka Perkov Luka Perkov <luka@openwrt.org> | Signed-off-by: Luka Perkov Luka Perkov <luka@openwrt.org> | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| 
 | 
 | ||||||
|  | diff --git a/tools/gct.pl b/tools/gct.pl
 | ||||||
|  | new file mode 100755 | ||||||
|  | index 0000000..33fa6f7
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/tools/gct.pl
 | +++ b/tools/gct.pl
 | ||||||
| @@ -0,0 +1,155 @@
 | @@ -0,0 +1,155 @@
 | ||||||
| @@ -164,44 +167,150 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +		$holder="";
 | +		$holder="";
 | ||||||
| +	}
 | +	}
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/tools/lantiq_bdi_conf.awk b/tools/lantiq_bdi_conf.awk
 | ||||||
|  | new file mode 100755 | ||||||
|  | index 0000000..c732289
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/tools/lantiq_extract_openwrt_patches.sh
 | +++ b/tools/lantiq_bdi_conf.awk
 | ||||||
| @@ -0,0 +1,15 @@
 | @@ -0,0 +1,116 @@
 | ||||||
| +#!/bin/bash
 | +#!/usr/bin/awk -f
 | ||||||
|  | +#
 | ||||||
|  | +# Copyright (C) 2013 Luka Perkov <luka@openwrt.org>
 | ||||||
|  | +# Copyright (C) 2013 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | ||||||
|  | +#
 | ||||||
|  | +# Usage:
 | ||||||
|  | +#  awk -f lantiq_bdi_conf.awk -v soc=ar9 board=<name> PATH_TO_BOARD/ddr_settings.h
 | ||||||
|  | +#
 | ||||||
|  | +# Additional information:
 | ||||||
|  | +#  http://www.abatron.ch/fileadmin/user_upload/products/pdf/ManGDBR4K-3000.pdf
 | ||||||
|  | +#
 | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
|  | +#
 | ||||||
| +
 | +
 | ||||||
| +set -e
 | +function print_header()
 | ||||||
| +set -x
 | +{
 | ||||||
|  | +	print ";                                                                         "
 | ||||||
|  | +	print "; Copyright (C) 2013 Luka Perkov <luka@openwrt.org>                       "
 | ||||||
|  | +	print "; Copyright (C) 2013 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>    "
 | ||||||
|  | +	print ";                                                                         "
 | ||||||
|  | +	print "; This file has been generated with lantiq_bdi_conf.awk script.           "
 | ||||||
|  | +	print ";                                                                         "
 | ||||||
|  | +	print "; SPDX-License-Identifier:	GPL-2.0+                                 "
 | ||||||
|  | +	print ";                                                                         "
 | ||||||
|  | +	print ""
 | ||||||
|  | +}
 | ||||||
| +
 | +
 | ||||||
| +test $# -eq 1
 | +function init_ar9_prologue()
 | ||||||
|  | +{
 | ||||||
|  | +	print "WM32 0xBF103010 0x80		; CGU for CPU 333Mhz, DDR 167Mhz"
 | ||||||
|  | +	print "WM32 0xBF103014 0x01		; CGU update"
 | ||||||
|  | +	print "WM32 0xBF800010 0x0		; Clear error access log register"
 | ||||||
|  | +	print "WM32 0xBF800020 0x0		; Clear error access log register"
 | ||||||
|  | +	print "WM32 0xBF800060 0xD		; Enable FPI, DDR and SRAM module in memory controller"
 | ||||||
|  | +	print "WM32 0xBF801030 0x0		; Clear start bit of DDR memory controller"
 | ||||||
|  | +}
 | ||||||
| +
 | +
 | ||||||
| +openwrt_root=$(readlink -f $1)
 | +function init_ar9_epilogue()
 | ||||||
| +test -d $openwrt_root
 | +{
 | ||||||
|  | +	print "WM32 0xBE105360 0x4001D7FF	; EBU setup"
 | ||||||
|  | +}
 | ||||||
| +
 | +
 | ||||||
| +uboot_lantiq_dir=$openwrt_root/package/boot/uboot-lantiq/patches
 | +function init_ddr1_epilogue()
 | ||||||
| +test -d $uboot_lantiq_dir
 | +{
 | ||||||
|  | +	print "WM32 0xBF801030 0x100		; Set start bit of DDR memory controller"
 | ||||||
|  | +}
 | ||||||
| +
 | +
 | ||||||
| +rm -vf $uboot_lantiq_dir/*
 | +function ar9_target()
 | ||||||
| +git format-patch -k -p --no-renames --text --full-index -o $uboot_lantiq_dir v2012.10..openwrt/v2013.01
 | +{
 | ||||||
|  | +	print "CPUTYPE		M34K"
 | ||||||
|  | +	print "ENDIAN		BIG"
 | ||||||
|  | +	print "JTAGCLOCK	1"
 | ||||||
|  | +	print "BDIMODE		AGENT		; [ LOADONLY, AGENT ]"
 | ||||||
|  | +	print "RESET		JTAG		; [ NONE, JTAG, HARD ]"
 | ||||||
|  | +	print "POWERUP		100"
 | ||||||
|  | +	print "WAKEUP		100"
 | ||||||
|  | +	print "BREAKMODE	HARD		; [ SOFT, HARD ]"
 | ||||||
|  | +	print  "STEPMODE	SWBP		; [ JTAG, HWBP, SWBP ]"
 | ||||||
|  | +	print "VECTOR		CATCH"
 | ||||||
|  | +	print  "SCANSUCC	1 5"
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +function flash_p2601hnfx()
 | ||||||
|  | +{
 | ||||||
|  | +	print "CHIPTYPE	MIRRORX16"
 | ||||||
|  | +	print "CHIPSIZE	0x1000000"
 | ||||||
|  | +	print "BUSWIDTH	16"
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +BEGIN {
 | ||||||
|  | +	switch (soc) {
 | ||||||
|  | +	case "ar9":
 | ||||||
|  | +		reg_base = 0xbf801000
 | ||||||
|  | +		print_header()
 | ||||||
|  | +		print "[INIT]"
 | ||||||
|  | +		init_ar9_prologue()
 | ||||||
|  | +		break
 | ||||||
|  | +	default:
 | ||||||
|  | +		print "Invalid or no value for SoC specified!"
 | ||||||
|  | +		exit 1
 | ||||||
|  | +	}
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +/^#define/ {
 | ||||||
|  | +	/* DC03 contains MC enable bit and must not be set here */
 | ||||||
|  | +	if (tolower($2) != "mc_dc03_value")
 | ||||||
|  | +		printf("WM32 0x%x %s\n", reg_base, tolower($3))
 | ||||||
|  | +
 | ||||||
|  | +	reg_base += 0x10
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +END {
 | ||||||
|  | +	switch (soc) {
 | ||||||
|  | +	case "ar9":
 | ||||||
|  | +		init_ddr1_epilogue()
 | ||||||
|  | +		init_ar9_epilogue()
 | ||||||
|  | +		print ""
 | ||||||
|  | +		print "[TARGET]"
 | ||||||
|  | +		ar9_target()
 | ||||||
|  | +		print ""
 | ||||||
|  | +		print "[HOST]"
 | ||||||
|  | +		print "PROMPT		\"ar9> \""
 | ||||||
|  | +		print ""
 | ||||||
|  | +		break
 | ||||||
|  | +	default:
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	switch (board) {
 | ||||||
|  | +	case "p2601hnfx":
 | ||||||
|  | +		print "[FLASH]"
 | ||||||
|  | +		flash_p2601hnfx()
 | ||||||
|  | +		print ""
 | ||||||
|  | +		break
 | ||||||
|  | +	default:
 | ||||||
|  | +	}
 | ||||||
|  | +}
 | ||||||
|  | diff --git a/tools/lantiq_ram_extract_magic.awk b/tools/lantiq_ram_extract_magic.awk
 | ||||||
|  | new file mode 100755 | ||||||
|  | index 0000000..64f1cbc
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/tools/lantiq_ram_extract_magic.awk
 | +++ b/tools/lantiq_ram_extract_magic.awk
 | ||||||
| @@ -0,0 +1,70 @@
 | @@ -0,0 +1,69 @@
 | ||||||
| +#
 | +#
 | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 | +# Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org>
 | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 | +#
 | ||||||
| +# Copyright (C) 2011 Luka Perkov <luka@openwrt.org>
 | +# Usage:
 | ||||||
|  | +# mips-openwrt-linux-objdump -EB -b binary -m mips:isa32r2 -D YOUR_IMAGE_DUMP | awk -f lantiq_ram_extract_magic.awk
 | ||||||
| +#
 | +#
 | ||||||
| +# usage: mips-openwrt-linux-objdump -EB -b binary -m mips:isa32r2 -D YOUR_IMAGE_DUMP | awk -f lantiq_ram_extract_magic.awk
 | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| +#
 | +#
 | ||||||
| +
 | +
 | ||||||
| +BEGIN {
 | +BEGIN {
 | ||||||
| +	print "/*                                                                            "
 | +	print "/*                                                                            "
 | ||||||
| +	print " * This file is released under the terms of GPL v2 and any later version.     "
 | +	print " * Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org>                     "
 | ||||||
| +	print " * See the file COPYING in the root directory of the source tree for details. "
 |  | ||||||
| +	print " *                                                                            "
 | +	print " *                                                                            "
 | ||||||
| +	print " * generated with lantiq_ram_extract_magic.awk                                "
 | +	print " * This file has been generated with lantiq_ram_extract_magic.awk script.     "
 | ||||||
| +	print " *                                                                            "
 | +	print " *                                                                            "
 | ||||||
| +	print " * Copyright (C) 2011 Luka Perkov <luka@openwrt.org>                          "
 | +	print " * SPDX-License-Identifier:	GPL-2.0+                                     "
 | ||||||
| +	print " */                                                                           "
 | +	print " */                                                                           "
 | ||||||
| +	print ""
 | +	print ""
 | ||||||
| +
 | +
 | ||||||
| @@ -255,35 +364,36 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +	if ($4 == "t2,736(t1)")
 | +	if ($4 == "t2,736(t1)")
 | ||||||
| +		right_section=0
 | +		right_section=0
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/tools/lantiq_ram_init_uart.awk b/tools/lantiq_ram_init_uart.awk
 | ||||||
|  | new file mode 100755 | ||||||
|  | index 0000000..dc82645
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/tools/lantiq_ram_init_uart.awk
 | +++ b/tools/lantiq_ram_init_uart.awk
 | ||||||
| @@ -0,0 +1,101 @@
 | @@ -0,0 +1,117 @@
 | ||||||
| +#!/usr/bin/awk -f
 | +#!/usr/bin/awk -f
 | ||||||
| +#
 | +#
 | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 |  | ||||||
| +# Copyright (C) 2011-2012 Luka Perkov <luka@openwrt.org>
 | +# Copyright (C) 2011-2012 Luka Perkov <luka@openwrt.org>
 | ||||||
| +# Copyright (C) 2012 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | +# Copyright (C) 2012 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | ||||||
| +#
 | +#
 | ||||||
| +# usage: awk -f lantiq_ram_init_uart.awk -v soc=<danube|ar9|vr9> PATH_TO_BOARD/ddr_settings.h
 | +# Usage:
 | ||||||
|  | +# awk -f lantiq_ram_init_uart.awk -v soc=<danube|ar9|vr9> PATH_TO_BOARD/ddr_settings.h
 | ||||||
|  | +#
 | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| +#
 | +#
 | ||||||
| +
 | +
 | ||||||
| +function print_header()
 | +function print_header()
 | ||||||
| +{
 | +{
 | ||||||
| +	print ";                                                                            "
 | +	print ";                                                                            "
 | ||||||
| +	print "; This file is released under the terms of GPL v2 and any later version.     "
 | +	print "; Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org>                     "
 | ||||||
| +	print "; See the file COPYING in the root directory of the source tree for details. "
 | +	print "; Copyright (C) 2012-2013 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>  "
 | ||||||
| +	print ";                                                                            "
 | +	print ";                                                                            "
 | ||||||
| +	print "; generated with lantiq_ram_init_uart.awk                                    "
 | +	print "; This file has been generated with lantiq_ram_init_uart.awk script.         "
 | ||||||
| +	print ";                                                                            "
 |  | ||||||
| +	print "; Copyright (C) 2011-2012 Luka Perkov <luka@openwrt.org>                     "
 |  | ||||||
| +	print "; Copyright (C) 2012 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>       "
 |  | ||||||
| +	print ";                                                                            "
 | +	print ";                                                                            "
 | ||||||
|  | +	print "; SPDX-License-Identifier:	GPL-2.0+                                    "
 | ||||||
| +	print ""
 | +	print ""
 | ||||||
| +}
 | +}
 | ||||||
| +
 | +
 | ||||||
| +function mc_ddr1_prologue()
 | +function mc_danube_prologue()
 | ||||||
| +{
 | +{
 | ||||||
| +	/* Clear access error log registers */
 | +	/* Clear access error log registers */
 | ||||||
| +	print "0xbf800010", "0x0"
 | +	print "0xbf800010", "0x0"
 | ||||||
| @@ -296,6 +406,19 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +	print "0xbf801030", "0x0"
 | +	print "0xbf801030", "0x0"
 | ||||||
| +}
 | +}
 | ||||||
| +
 | +
 | ||||||
|  | +function mc_ar9_prologue()
 | ||||||
|  | +{
 | ||||||
|  | +	/* Clear access error log registers */
 | ||||||
|  | +	print "0xbf800010", "0x0"
 | ||||||
|  | +	print "0xbf800020", "0x0"
 | ||||||
|  | +
 | ||||||
|  | +	/* Enable FPI, DDR and SRAM module in memory controller */
 | ||||||
|  | +	print "0xbf800060", "0xD"
 | ||||||
|  | +
 | ||||||
|  | +	/* Clear start bit of DDR memory controller */
 | ||||||
|  | +	print "0xbf801030", "0x0"
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
| +function mc_ddr1_epilogue()
 | +function mc_ddr1_epilogue()
 | ||||||
| +{
 | +{
 | ||||||
| +	/* Set start bit of DDR memory controller */
 | +	/* Set start bit of DDR memory controller */
 | ||||||
| @@ -318,10 +441,14 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +BEGIN {
 | +BEGIN {
 | ||||||
| +	switch (soc) {
 | +	switch (soc) {
 | ||||||
| +	case "danube":
 | +	case "danube":
 | ||||||
|  | +		reg_base = 0xbf801000
 | ||||||
|  | +		print_header()
 | ||||||
|  | +		mc_danube_prologue()
 | ||||||
|  | +		break
 | ||||||
| +	case "ar9":
 | +	case "ar9":
 | ||||||
| +		reg_base = 0xbf801000
 | +		reg_base = 0xbf801000
 | ||||||
| +		print_header()
 | +		print_header()
 | ||||||
| +		mc_ddr1_prologue()
 | +		mc_ar9_prologue()
 | ||||||
| +		break
 | +		break
 | ||||||
| +	case "vr9":
 | +	case "vr9":
 | ||||||
| +		reg_base = 0xbf401000
 | +		reg_base = 0xbf401000
 | ||||||
| @@ -337,14 +464,15 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +}
 | +}
 | ||||||
| +
 | +
 | ||||||
| +/^#define/ {
 | +/^#define/ {
 | ||||||
| +	printf("0x%x %s\n", reg_base, tolower($3))
 | +	/* CCR07 contains MC enable bit and must not be set here */
 | ||||||
| +	reg_base += 0x10
 | +	if (tolower($2) == "mc_ccr07_value")
 | ||||||
| +}
 | +		mc_ccr07_value = strtonum($3)
 | ||||||
|  | +	if (tolower($2) == "mc_dc03_value")
 | ||||||
|  | +		/* CCR07 contains MC enable bit and must not be set here */
 | ||||||
|  | +	else
 | ||||||
|  | +		printf("0x%x %s\n", reg_base, tolower($3))
 | ||||||
| +
 | +
 | ||||||
| +/^#define(.*)MC_CCR07_VALUE/ {
 |  | ||||||
| +	printf("0x%x %s\n", reg_base, tolower($3))
 |  | ||||||
| +	reg_base += 0x10
 | +	reg_base += 0x10
 | ||||||
| +	mc_ccr07_value = strtonum($3)
 |  | ||||||
| +}
 | +}
 | ||||||
| +
 | +
 | ||||||
| +END {
 | +END {
 | ||||||
| @@ -359,3 +487,6 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +	default:
 | +	default:
 | ||||||
| +	}
 | +	}
 | ||||||
| +}
 | +}
 | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.2 | ||||||
|  | 
 | ||||||
| @@ -1,47 +0,0 @@ | |||||||
| From 888b33e84082fe72d60d528c05c885c0c9d70bc4 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Tue, 6 Nov 2012 21:19:43 +0100 |  | ||||||
| Subject: MIPS: add SPI flash init hook |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/arch/mips/lib/board.c |  | ||||||
| +++ b/arch/mips/lib/board.c |  | ||||||
| @@ -32,6 +32,7 @@ |  | ||||||
|  #include <nand.h> |  | ||||||
|  #include <onenand_uboot.h> |  | ||||||
|  #include <spi.h> |  | ||||||
| +#include <spi_flash.h> |  | ||||||
|   |  | ||||||
|  #ifdef CONFIG_BITBANGMII |  | ||||||
|  #include <miiphy.h> |  | ||||||
| @@ -312,6 +313,16 @@ void board_init_r(gd_t *id, ulong dest_a |  | ||||||
|  	onenand_init(); |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| +#ifdef CONFIG_CMD_SPI |  | ||||||
| +	puts("SPI:   "); |  | ||||||
| +	spi_init();		/* go init the SPI */ |  | ||||||
| +	puts("ready\n"); |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
| +#if defined(CONFIG_SPI_FLASH) |  | ||||||
| +	spi_flash_init(); |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
|  	/* relocate environment function pointers etc. */ |  | ||||||
|  	env_relocate(); |  | ||||||
|   |  | ||||||
| @@ -335,12 +346,6 @@ void board_init_r(gd_t *id, ulong dest_a |  | ||||||
|  	/* Initialize from environment */ |  | ||||||
|  	load_addr = getenv_ulong("loadaddr", 16, load_addr); |  | ||||||
|   |  | ||||||
| -#ifdef CONFIG_CMD_SPI |  | ||||||
| -	puts("SPI:   "); |  | ||||||
| -	spi_init();		/* go init the SPI */ |  | ||||||
| -	puts("ready\n"); |  | ||||||
| -#endif |  | ||||||
| - |  | ||||||
|  #if defined(CONFIG_MISC_INIT_R) |  | ||||||
|  	/* miscellaneous platform dependent initialisations */ |  | ||||||
|  	misc_init_r(); |  | ||||||
| @@ -0,0 +1,228 @@ | |||||||
|  | From 43b9a7c9b903302c56d0a1d292a146dbf4de8e49 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 12 Aug 2013 01:17:08 +0200 | ||||||
|  | Subject: tools: lantiq: add NAND SPL support | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/tools/ltq-boot-image.c b/tools/ltq-boot-image.c | ||||||
|  | index 75a188c..743fc6f 100644 | ||||||
|  | --- a/tools/ltq-boot-image.c | ||||||
|  | +++ b/tools/ltq-boot-image.c | ||||||
|  | @@ -14,7 +14,8 @@ | ||||||
|  |   | ||||||
|  |  enum image_types { | ||||||
|  |  	IMAGE_NONE, | ||||||
|  | -	IMAGE_SFSPL | ||||||
|  | +	IMAGE_SFSPL, | ||||||
|  | +	IMAGE_NANDSPL | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  /* Lantiq non-volatile bootstrap command IDs */ | ||||||
|  | @@ -43,6 +44,8 @@ enum nvb_cmd_flags { | ||||||
|  |  struct args { | ||||||
|  |  	enum image_types type; | ||||||
|  |  	__u32		entry_addr; | ||||||
|  | +	loff_t		uboot_offset; | ||||||
|  | +	unsigned int	page_size; | ||||||
|  |  	const char	*uboot_bin; | ||||||
|  |  	const char	*spl_bin; | ||||||
|  |  	const char	*out_bin; | ||||||
|  | @@ -50,10 +53,11 @@ struct args { | ||||||
|  |   | ||||||
|  |  static void usage_msg(const char *name) | ||||||
|  |  { | ||||||
|  | -	fprintf(stderr, "%s: [-h] -t type -e entry-addr -u uboot-bin [-s spl-bin] -o out-bin\n", | ||||||
|  | +	fprintf(stderr, "%s: [-h] -t type -e entry-addr [-x uboot-offset] [-p page-size] -u uboot-bin [-s spl-bin] -o out-bin\n", | ||||||
|  |  		name); | ||||||
|  |  	fprintf(stderr, " Image types:\n" | ||||||
|  | -			"  sfspl  - SPL + [compressed] U-Boot for SPI flash\n"); | ||||||
|  | +			"  sfspl   - SPL + [compressed] U-Boot for SPI flash\n" | ||||||
|  | +			"  nandspl - SPL + [compressed] U-Boot for NAND flash\n"); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static enum image_types parse_image_type(const char *type) | ||||||
|  | @@ -64,6 +68,9 @@ static enum image_types parse_image_type(const char *type) | ||||||
|  |  	if (!strncmp(type, "sfspl", 6)) | ||||||
|  |  		return IMAGE_SFSPL; | ||||||
|  |   | ||||||
|  | +	if (!strncmp(type, "nandspl", 6)) | ||||||
|  | +		return IMAGE_NANDSPL; | ||||||
|  | + | ||||||
|  |  	return IMAGE_NONE; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -73,7 +80,7 @@ static int parse_args(int argc, char *argv[], struct args *arg) | ||||||
|  |   | ||||||
|  |  	memset(arg, 0, sizeof(*arg)); | ||||||
|  |   | ||||||
|  | -	while ((opt = getopt(argc, argv, "ht:e:u:s:o:")) != -1) { | ||||||
|  | +	while ((opt = getopt(argc, argv, "ht:e:x:p:u:s:o:")) != -1) { | ||||||
|  |  		switch (opt) { | ||||||
|  |  		case 'h': | ||||||
|  |  			usage_msg(argv[0]); | ||||||
|  | @@ -84,6 +91,12 @@ static int parse_args(int argc, char *argv[], struct args *arg) | ||||||
|  |  		case 'e': | ||||||
|  |  			arg->entry_addr = strtoul(optarg, NULL, 16); | ||||||
|  |  			break; | ||||||
|  | +		case 'x': | ||||||
|  | +			arg->uboot_offset = strtoul(optarg, NULL, 16); | ||||||
|  | +			break; | ||||||
|  | +		case 'p': | ||||||
|  | +			arg->page_size = strtoul(optarg, NULL, 10); | ||||||
|  | +			break; | ||||||
|  |  		case 'u': | ||||||
|  |  			arg->uboot_bin = optarg; | ||||||
|  |  			break; | ||||||
|  | @@ -114,11 +127,22 @@ static int parse_args(int argc, char *argv[], struct args *arg) | ||||||
|  |  		goto parse_error; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	if (arg->type == IMAGE_SFSPL && !arg->spl_bin) { | ||||||
|  | +	if ((arg->type == IMAGE_SFSPL || arg->type == IMAGE_NANDSPL) && | ||||||
|  | +		!arg->spl_bin) { | ||||||
|  |  		fprintf(stderr, "Missing SPL binary\n"); | ||||||
|  |  		goto parse_error; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +	if (arg->type == IMAGE_NANDSPL && !arg->uboot_offset) { | ||||||
|  | +		fprintf(stderr, "Missing U-Boot offset\n"); | ||||||
|  | +		goto parse_error; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	if (arg->type == IMAGE_NANDSPL && !arg->page_size) { | ||||||
|  | +		fprintf(stderr, "Missing NAND page size\n"); | ||||||
|  | +		goto parse_error; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	return 0; | ||||||
|  |   | ||||||
|  |  parse_error: | ||||||
|  | @@ -174,6 +198,19 @@ static int write_nvb_start_header(int fd, __u32 addr) | ||||||
|  |  	return write_header(fd, hdr, sizeof(hdr)); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +#if 0 | ||||||
|  | +static int write_nvb_regcfg_header(int fd, __u32 addr) | ||||||
|  | +{ | ||||||
|  | +	__u32 hdr[2]; | ||||||
|  | + | ||||||
|  | +	hdr[0] = build_nvb_command(NVB_CMD_REGCFG, NVB_FLAG_SDBG | | ||||||
|  | +					NVB_FLAG_DBG); | ||||||
|  | +	hdr[1] = cpu_to_be32(addr); | ||||||
|  | + | ||||||
|  | +	return write_header(fd, hdr, sizeof(hdr)); | ||||||
|  | +} | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  |  static int open_input_bin(const char *name, void **ptr, size_t *size) | ||||||
|  |  { | ||||||
|  |  	struct stat sbuf; | ||||||
|  | @@ -238,9 +275,37 @@ static int open_output_bin(const char *name) | ||||||
|  |  	return fd; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static int create_sfspl(const struct args *arg) | ||||||
|  | +static int pad_to_offset(int fd, loff_t offset) | ||||||
|  |  { | ||||||
|  | -	int out_fd, uboot_fd, spl_fd, ret; | ||||||
|  | +	loff_t pos; | ||||||
|  | +	size_t size; | ||||||
|  | +	ssize_t n; | ||||||
|  | +	__u8 *buf; | ||||||
|  | + | ||||||
|  | +	pos = lseek(fd, 0, SEEK_CUR); | ||||||
|  | +	size = offset - pos; | ||||||
|  | + | ||||||
|  | +	buf = malloc(size); | ||||||
|  | +	if (!buf) { | ||||||
|  | +		fprintf(stderr, "Failed to malloc buffer\n"); | ||||||
|  | +		return -1; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	memset(buf, 0xff, size); | ||||||
|  | +	n = write(fd, buf, size); | ||||||
|  | +	free(buf); | ||||||
|  | + | ||||||
|  | +	if (n != size) { | ||||||
|  | +		fprintf(stderr, "Failed to write pad bytes\n"); | ||||||
|  | +		return -1; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int create_spl_image(const struct args *arg) | ||||||
|  | +{ | ||||||
|  | +	int out_fd, uboot_fd, spl_fd, ret = 0; | ||||||
|  |  	void *uboot_ptr, *spl_ptr; | ||||||
|  |  	size_t uboot_size, spl_size; | ||||||
|  |   | ||||||
|  | @@ -256,9 +321,22 @@ static int create_sfspl(const struct args *arg) | ||||||
|  |  	if (0 > uboot_fd) | ||||||
|  |  		goto err_uboot; | ||||||
|  |   | ||||||
|  | +#if 0 | ||||||
|  | +	ret = write_nvb_regcfg_header(out_fd, 0); | ||||||
|  | +	if (ret) | ||||||
|  | +		goto err_write; | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  |  	ret = write_nvb_dwnld_header(out_fd, spl_size, arg->entry_addr); | ||||||
|  |  	if (ret) | ||||||
|  |  		goto err_write; | ||||||
|  | +#if 0 | ||||||
|  | +	if (arg->page_size) { | ||||||
|  | +		ret = pad_to_offset(out_fd, arg->page_size); | ||||||
|  | +		if (ret) | ||||||
|  | +			goto err_write; | ||||||
|  | +	} | ||||||
|  | +#endif | ||||||
|  |   | ||||||
|  |  	ret = copy_bin(out_fd, spl_ptr, spl_size); | ||||||
|  |  	if (ret) | ||||||
|  | @@ -268,16 +346,16 @@ static int create_sfspl(const struct args *arg) | ||||||
|  |  	if (ret) | ||||||
|  |  		goto err_write; | ||||||
|  |   | ||||||
|  | +	if (arg->uboot_offset) { | ||||||
|  | +		ret = pad_to_offset(out_fd, arg->uboot_offset); | ||||||
|  | +		if (ret) | ||||||
|  | +			goto err_write; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  |  	ret = copy_bin(out_fd, uboot_ptr, uboot_size); | ||||||
|  |  	if (ret) | ||||||
|  |  		goto err_write; | ||||||
|  |   | ||||||
|  | -	close_input_bin(uboot_fd, uboot_ptr, uboot_size); | ||||||
|  | -	close_input_bin(spl_fd, spl_ptr, spl_size); | ||||||
|  | -	close(out_fd); | ||||||
|  | - | ||||||
|  | -	return 0; | ||||||
|  | - | ||||||
|  |  err_write: | ||||||
|  |  	close_input_bin(uboot_fd, uboot_ptr, uboot_size); | ||||||
|  |  err_uboot: | ||||||
|  | @@ -285,7 +363,7 @@ err_uboot: | ||||||
|  |  err_spl: | ||||||
|  |  	close(out_fd); | ||||||
|  |  err: | ||||||
|  | -	return -1; | ||||||
|  | +	return ret; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  int main(int argc, char *argv[]) | ||||||
|  | @@ -299,7 +377,8 @@ int main(int argc, char *argv[]) | ||||||
|  |   | ||||||
|  |  	switch (arg.type) { | ||||||
|  |  	case IMAGE_SFSPL: | ||||||
|  | -		ret = create_sfspl(&arg); | ||||||
|  | +	case IMAGE_NANDSPL: | ||||||
|  | +		ret = create_spl_image(&arg); | ||||||
|  |  		break; | ||||||
|  |  	default: | ||||||
|  |  		fprintf(stderr, "Image type not implemented\n"); | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,53 @@ | |||||||
|  | From 2e01dc015bc8bb9ca45f369025c342ede990863e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 12 Aug 2013 01:16:09 +0200 | ||||||
|  | Subject: Makefile: add Lantiq NAND SPL images | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/.gitignore b/.gitignore | ||||||
|  | index 7abdc37..869b1b8 100644 | ||||||
|  | --- a/.gitignore | ||||||
|  | +++ b/.gitignore | ||||||
|  | @@ -54,6 +54,9 @@ | ||||||
|  |  /u-boot.ltq.lzma.norspl | ||||||
|  |  /u-boot.ltq.lzo.norspl | ||||||
|  |  /u-boot.ltq.norspl | ||||||
|  | +/u-boot.ltq.lzma.nandspl | ||||||
|  | +/u-boot.ltq.lzo.nandspl | ||||||
|  | +/u-boot.ltq.nandspl | ||||||
|  |  /u-boot.lzma.img | ||||||
|  |  /u-boot.lzo.img | ||||||
|  |   | ||||||
|  | diff --git a/Makefile b/Makefile | ||||||
|  | index 73ec67d..0445035 100644 | ||||||
|  | --- a/Makefile | ||||||
|  | +++ b/Makefile | ||||||
|  | @@ -599,6 +599,24 @@ $(obj)u-boot.ltq.lzma.sfspl: $(obj)u-boot.lzma.img $(obj)spl/u-boot-spl.bin | ||||||
|  |  		$(obj)tools/ltq-boot-image -t sfspl -e $(CONFIG_SPL_TEXT_BASE) \ | ||||||
|  |  			-s $(obj)spl/u-boot-spl.bin -u $< -o $@ | ||||||
|  |   | ||||||
|  | +$(obj)u-boot.ltq.nandspl:	$(obj)u-boot.img $(obj)spl/u-boot-spl.bin | ||||||
|  | +		$(obj)tools/ltq-boot-image -t nandspl -e $(CONFIG_SPL_TEXT_BASE) \ | ||||||
|  | +			-x $(CONFIG_SYS_NAND_U_BOOT_OFFS) \ | ||||||
|  | +			-p $(CONFIG_SYS_NAND_PAGE_SIZE) \ | ||||||
|  | +			-s $(obj)spl/u-boot-spl.bin -u $< -o $@ | ||||||
|  | + | ||||||
|  | +$(obj)u-boot.ltq.lzo.nandspl: $(obj)u-boot.lzo.img $(obj)spl/u-boot-spl.bin | ||||||
|  | +		$(obj)tools/ltq-boot-image -t nandspl -e $(CONFIG_SPL_TEXT_BASE) \ | ||||||
|  | +			-x $(CONFIG_SYS_NAND_U_BOOT_OFFS) \ | ||||||
|  | +			-p $(CONFIG_SYS_NAND_PAGE_SIZE) \ | ||||||
|  | +			-s $(obj)spl/u-boot-spl.bin -u $< -o $@ | ||||||
|  | + | ||||||
|  | +$(obj)u-boot.ltq.lzma.nandspl: $(obj)u-boot.lzma.img $(obj)spl/u-boot-spl.bin | ||||||
|  | +		$(obj)tools/ltq-boot-image -t nandspl -e $(CONFIG_SPL_TEXT_BASE) \ | ||||||
|  | +			-x $(CONFIG_SYS_NAND_U_BOOT_OFFS) \ | ||||||
|  | +			-p $(CONFIG_SYS_NAND_PAGE_SIZE) \ | ||||||
|  | +			-s $(obj)spl/u-boot-spl.bin -u $< -o $@ | ||||||
|  | + | ||||||
|  |  $(obj)u-boot.ltq.norspl: $(obj)u-boot.img $(obj)spl/u-boot-spl.bin | ||||||
|  |  	cat $(obj)spl/u-boot-spl.bin $< > $@ | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,172 @@ | |||||||
|  | From e17398316e82d8b28217232b4fd6030c65138e74 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 12 Aug 2013 01:18:00 +0200 | ||||||
|  | Subject: MIPS: lantiq: add NAND SPL support | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/arch/mips/cpu/mips32/lantiq-common/spl.c b/arch/mips/cpu/mips32/lantiq-common/spl.c | ||||||
|  | index 489a82b..3d9d4d4 100644 | ||||||
|  | --- a/arch/mips/cpu/mips32/lantiq-common/spl.c | ||||||
|  | +++ b/arch/mips/cpu/mips32/lantiq-common/spl.c | ||||||
|  | @@ -8,6 +8,7 @@ | ||||||
|  |  #include <image.h> | ||||||
|  |  #include <version.h> | ||||||
|  |  #include <spi_flash.h> | ||||||
|  | +#include <nand.h> | ||||||
|  |  #include <linux/compiler.h> | ||||||
|  |  #include <lzma/LzmaDec.h> | ||||||
|  |  #include <linux/lzo.h> | ||||||
|  | @@ -63,6 +64,18 @@ | ||||||
|  |  #define spl_boot_nor_flash	0 | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | +#if defined(CONFIG_LTQ_SUPPORT_SPL_NAND_FLASH) && defined(CONFIG_SYS_BOOT_NANDSPL) | ||||||
|  | +#define spl_boot_nand_flash	1 | ||||||
|  | +#else | ||||||
|  | +#define spl_boot_nand_flash	0 | ||||||
|  | +#ifndef CONFIG_SYS_NAND_U_BOOT_OFFS | ||||||
|  | +#define CONFIG_SYS_NAND_U_BOOT_OFFS	0 | ||||||
|  | +#endif | ||||||
|  | +#ifndef CONFIG_SYS_NAND_PAGE_SIZE | ||||||
|  | +#define CONFIG_SYS_NAND_PAGE_SIZE	0 | ||||||
|  | +#endif | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  |  #define spl_sync()	__asm__ __volatile__("sync"); | ||||||
|  |   | ||||||
|  |  struct spl_image { | ||||||
|  | @@ -337,6 +350,58 @@ static int spl_load_nor_flash(struct spl_image *spl) | ||||||
|  |  	return ret; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +static int spl_load_nand_flash(struct spl_image *spl) | ||||||
|  | +{ | ||||||
|  | +	image_header_t *hdr; | ||||||
|  | +	int ret; | ||||||
|  | +	unsigned long loadaddr; | ||||||
|  | + | ||||||
|  | +	/* | ||||||
|  | +	 * Image format: | ||||||
|  | +	 * | ||||||
|  | +	 * - 12 byte non-volatile bootstrap header | ||||||
|  | +	 * - SPL binary | ||||||
|  | +	 * - 12 byte non-volatile bootstrap header | ||||||
|  | +	 * - padding bytes up to CONFIG_SYS_NAND_U_BOOT_OFFS | ||||||
|  | +	 * - 64 byte U-Boot mkimage header | ||||||
|  | +	 * - U-Boot binary | ||||||
|  | +	 */ | ||||||
|  | +	spl->data_addr = CONFIG_SYS_NAND_U_BOOT_OFFS; | ||||||
|  | + | ||||||
|  | +	spl_puts("SPL: initializing NAND flash\n"); | ||||||
|  | +	nand_init(); | ||||||
|  | + | ||||||
|  | +	spl_debug("SPL: reading image header at page offset %lx\n", | ||||||
|  | +		  spl->data_addr); | ||||||
|  | + | ||||||
|  | +	hdr = (image_header_t *) CONFIG_LOADADDR; | ||||||
|  | +	ret = nand_spl_load_image(spl->data_addr, | ||||||
|  | +				  CONFIG_SYS_NAND_PAGE_SIZE, hdr); | ||||||
|  | +	if (ret) | ||||||
|  | +		return ret; | ||||||
|  | + | ||||||
|  | +	spl_debug("SPL: checking image header at address %p\n", hdr); | ||||||
|  | + | ||||||
|  | +	ret = spl_parse_image(hdr, spl); | ||||||
|  | +	if (ret) | ||||||
|  | +		return ret; | ||||||
|  | + | ||||||
|  | +	if (spl_is_compressed(spl)) | ||||||
|  | +		loadaddr = CONFIG_LOADADDR; | ||||||
|  | +	else | ||||||
|  | +		loadaddr = spl->entry_addr; | ||||||
|  | + | ||||||
|  | +	spl_puts("SPL: loading U-Boot to RAM\n"); | ||||||
|  | + | ||||||
|  | +	ret = nand_spl_load_image(spl->data_addr, spl->data_size, | ||||||
|  | +				  (void *) loadaddr); | ||||||
|  | + | ||||||
|  | +	if (spl_is_compressed(spl)) | ||||||
|  | +		ret = spl_uncompress(spl, loadaddr); | ||||||
|  | + | ||||||
|  | +	return ret; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  static int spl_load(struct spl_image *spl) | ||||||
|  |  { | ||||||
|  |  	int ret; | ||||||
|  | @@ -345,6 +410,8 @@ static int spl_load(struct spl_image *spl) | ||||||
|  |  		ret = spl_load_spi_flash(spl); | ||||||
|  |  	else if (spl_boot_nor_flash) | ||||||
|  |  		ret = spl_load_nor_flash(spl); | ||||||
|  | +	else if (spl_boot_nand_flash) | ||||||
|  | +		ret = spl_load_nand_flash(spl); | ||||||
|  |  	else | ||||||
|  |  		ret = 1; | ||||||
|  |   | ||||||
|  | diff --git a/arch/mips/include/asm/lantiq/config.h b/arch/mips/include/asm/lantiq/config.h | ||||||
|  | index feac30d..483cc94 100644 | ||||||
|  | --- a/arch/mips/include/asm/lantiq/config.h | ||||||
|  | +++ b/arch/mips/include/asm/lantiq/config.h | ||||||
|  | @@ -40,6 +40,26 @@ | ||||||
|  |  #define CONFIG_SPI_SPL_SIMPLE | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | +/* | ||||||
|  | + * NAND flash SPL | ||||||
|  | + * BOOT CFG 06 only (address cycle based probing, 2KB or 512B page size) | ||||||
|  | + */ | ||||||
|  | +#if defined(CONFIG_LTQ_SUPPORT_SPL_NAND_FLASH) && defined(CONFIG_SYS_BOOT_NANDSPL) | ||||||
|  | +#define CONFIG_SPL | ||||||
|  | +#define CONFIG_SPL_NAND_SUPPORT | ||||||
|  | +#define CONFIG_SPL_NAND_DRIVERS | ||||||
|  | +#define CONFIG_SPL_NAND_SIMPLE | ||||||
|  | +#define CONFIG_SPL_NAND_ECC | ||||||
|  | + | ||||||
|  | +/* use software ECC until driver supports HW ECC */ | ||||||
|  | +#define CONFIG_SPL_NAND_SOFTECC | ||||||
|  | +#define CONFIG_SYS_NAND_ECCSIZE		256 | ||||||
|  | +#define CONFIG_SYS_NAND_ECCBYTES	3 | ||||||
|  | +#define CONFIG_SYS_NAND_ECCPOS		{40, 41, 42, 43, 44, 45, 46, 47, \ | ||||||
|  | +					48, 49, 50, 51, 52, 53, 54, 55, \ | ||||||
|  | +					56, 57, 58, 59, 60, 61, 62, 63} | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  |  #if defined(CONFIG_LTQ_SUPPORT_SPL_NOR_FLASH) && defined(CONFIG_SYS_BOOT_NORSPL) | ||||||
|  |  #define CONFIG_SPL | ||||||
|  |  #endif | ||||||
|  | @@ -148,6 +168,21 @@ | ||||||
|  |  #define CONFIG_ENV_LOAD_UBOOT_SF | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | +#if defined(CONFIG_LTQ_SUPPORT_NAND_FLASH) | ||||||
|  | +#define CONFIG_ENV_WRITE_UBOOT_NAND				\ | ||||||
|  | +	"write-uboot-nand="					\ | ||||||
|  | +	"nand erase 0 $filesize && "				\ | ||||||
|  | +	"nand write $fileaddr 0 $filesize\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_LOAD_UBOOT_NAND						\ | ||||||
|  | +	"load-uboot-nandspl=tftpboot u-boot.ltq.nandspl\0"			\ | ||||||
|  | +	"load-uboot-nandspl-lzo=tftpboot u-boot.ltq.lzo.nandspl\0"		\ | ||||||
|  | +	"load-uboot-nandspl-lzma=tftpboot u-boot.ltq.lzma.nandspl\0" | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_WRITE_UBOOT_NAND | ||||||
|  | +#define CONFIG_ENV_LOAD_UBOOT_NAND | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  |  #define CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  |  	CONFIG_ENV_CONSOLEDEV		\ | ||||||
|  |  	CONFIG_ENV_ADDCONSOLE		\ | ||||||
|  | @@ -159,6 +194,8 @@ | ||||||
|  |  	CONFIG_ENV_LOAD_UBOOT_NOR	\ | ||||||
|  |  	CONFIG_ENV_SF_PROBE		\ | ||||||
|  |  	CONFIG_ENV_WRITE_UBOOT_SF	\ | ||||||
|  | -	CONFIG_ENV_LOAD_UBOOT_SF | ||||||
|  | +	CONFIG_ENV_LOAD_UBOOT_SF	\ | ||||||
|  | +	CONFIG_ENV_WRITE_UBOOT_NAND	\ | ||||||
|  | +	CONFIG_ENV_LOAD_UBOOT_NAND | ||||||
|  |   | ||||||
|  |  #endif /* __LANTIQ_CONFIG_H__ */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,37 @@ | |||||||
|  | From 7361581a1baaec43058f5b9350c32c7ac4e58064 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 12 Aug 2013 00:11:16 +0200 | ||||||
|  | Subject: MIPS: vrx200: add NAND SPL support | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/arch/mips/cpu/mips32/vrx200/config.mk b/arch/mips/cpu/mips32/vrx200/config.mk | ||||||
|  | index 442156a..b0fc882 100644 | ||||||
|  | --- a/arch/mips/cpu/mips32/vrx200/config.mk | ||||||
|  | +++ b/arch/mips/cpu/mips32/vrx200/config.mk | ||||||
|  | @@ -27,4 +27,9 @@ ALL-y += $(obj)u-boot.ltq.norspl | ||||||
|  |  ALL-$(CONFIG_SPL_LZO_SUPPORT) += $(obj)u-boot.ltq.lzo.norspl | ||||||
|  |  ALL-$(CONFIG_SPL_LZMA_SUPPORT) += $(obj)u-boot.ltq.lzma.norspl | ||||||
|  |  endif | ||||||
|  | +ifdef CONFIG_SYS_BOOT_NANDSPL | ||||||
|  | +ALL-y += $(obj)u-boot.ltq.nandspl | ||||||
|  | +ALL-$(CONFIG_SPL_LZO_SUPPORT) += $(obj)u-boot.ltq.lzo.nandspl | ||||||
|  | +ALL-$(CONFIG_SPL_LZMA_SUPPORT) += $(obj)u-boot.ltq.lzma.nandspl | ||||||
|  | +endif | ||||||
|  |  endif | ||||||
|  | diff --git a/arch/mips/include/asm/arch-vrx200/config.h b/arch/mips/include/asm/arch-vrx200/config.h | ||||||
|  | index 88ef256..4ec6092 100644 | ||||||
|  | --- a/arch/mips/include/asm/arch-vrx200/config.h | ||||||
|  | +++ b/arch/mips/include/asm/arch-vrx200/config.h | ||||||
|  | @@ -164,7 +164,7 @@ | ||||||
|  |  #define CONFIG_SYS_TEXT_BASE		0xB0000000 | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | -#if defined(CONFIG_SYS_BOOT_SFSPL) | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_SFSPL) || defined(CONFIG_SYS_BOOT_NANDSPL) | ||||||
|  |  #define CONFIG_SYS_TEXT_BASE		0x80100000 | ||||||
|  |  #define CONFIG_SPL_TEXT_BASE		0xBE220000 | ||||||
|  |  #endif | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,68 @@ | |||||||
|  | From 6fa1c350fa19a054371eccef84e4885cfdd6a2d7 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 19 Aug 2013 18:11:31 +0200 | ||||||
|  | Subject: MIPS: lantiq: easy80920: add support for NAND SPL | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index f090726..394ede7 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -509,6 +509,7 @@ Active  mips        mips32         incaip      -               incaip | ||||||
|  |  Active  mips        mips32         incaip      -               incaip              incaip_100MHz                        incaip:CPU_CLOCK_RATE=100000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
|  |  Active  mips        mips32         incaip      -               incaip              incaip_133MHz                        incaip:CPU_CLOCK_RATE=133000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
|  |  Active  mips        mips32         incaip      -               incaip              incaip_150MHz                        incaip:CPU_CLOCK_RATE=150000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
|  | +Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_nandspl                    easy80920:SYS_BOOT_NANDSPL                                                                                                        Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_nor                        easy80920:SYS_BOOT_NOR                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_norspl                     easy80920:SYS_BOOT_NORSPL                                                                                                         Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_ram                        easy80920:SYS_BOOT_RAM                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | diff --git a/include/configs/easy80920.h b/include/configs/easy80920.h | ||||||
|  | index ad69bc2..56ceedb 100644 | ||||||
|  | --- a/include/configs/easy80920.h | ||||||
|  | +++ b/include/configs/easy80920.h | ||||||
|  | @@ -31,6 +31,14 @@ | ||||||
|  |   | ||||||
|  |  #define CONFIG_LTQ_SUPPORT_SPL_NOR_FLASH	/* Build NOR flash SPL */ | ||||||
|  |   | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_SPL_NAND_FLASH	/* Build NAND flash SPL */ | ||||||
|  | +#define CONFIG_SYS_NAND_PAGE_COUNT	128 | ||||||
|  | +#define CONFIG_SYS_NAND_PAGE_SIZE	2048 | ||||||
|  | +#define CONFIG_SYS_NAND_OOBSIZE		64 | ||||||
|  | +#define CONFIG_SYS_NAND_BLOCK_SIZE	(256 * 1024) | ||||||
|  | +#define CONFIG_SYS_NAND_BAD_BLOCK_POS	NAND_LARGE_BADBLOCK_POS | ||||||
|  | +#define CONFIG_SYS_NAND_U_BOOT_OFFS	0x4000 | ||||||
|  | + | ||||||
|  |  #define CONFIG_LTQ_SPL_COMP_LZO | ||||||
|  |  #define CONFIG_LTQ_SPL_CONSOLE | ||||||
|  |   | ||||||
|  | @@ -57,6 +65,11 @@ | ||||||
|  |  #define CONFIG_ENV_OVERWRITE | ||||||
|  |  #define CONFIG_ENV_OFFSET		(192 * 1024) | ||||||
|  |  #define CONFIG_ENV_SECT_SIZE		(64 * 1024) | ||||||
|  | +#elif defined(CONFIG_SYS_BOOT_NANDSPL) | ||||||
|  | +#define CONFIG_ENV_IS_IN_NAND | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(256 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(256 * 1024) | ||||||
|  |  #else | ||||||
|  |  #define CONFIG_ENV_IS_NOWHERE | ||||||
|  |  #endif | ||||||
|  | @@ -84,9 +97,13 @@ | ||||||
|  |  #define CONFIG_ENV_UPDATE_UBOOT_SF					\ | ||||||
|  |  	"update-uboot-sf=run load-uboot-sfspl-lzo write-uboot-sf\0" | ||||||
|  |   | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NAND					\ | ||||||
|  | +	"update-uboot-nand=run load-uboot-nandspl-lzo write-uboot-nand\0" | ||||||
|  | + | ||||||
|  |  #define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  |  	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  |  	CONFIG_ENV_UPDATE_UBOOT_NOR	\ | ||||||
|  | -	CONFIG_ENV_UPDATE_UBOOT_SF | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_SF	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NAND | ||||||
|  |   | ||||||
|  |  #endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,56 @@ | |||||||
|  | From 8f584936adad0fca8beece5f55eadcdcd02fad0a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Luka Perkov <luka@openwrt.org> | ||||||
|  | Date: Sat, 17 Aug 2013 03:44:46 +0200 | ||||||
|  | Subject: MIPS: lantiq: add default openwrt config | ||||||
|  |  | ||||||
|  | Signed-off-by: Luka Perkov <luka@openwrt.org> | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/include/configs/openwrt-lantiq-common.h b/include/configs/openwrt-lantiq-common.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..d119bef | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/openwrt-lantiq-common.h | ||||||
|  | @@ -0,0 +1,39 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __OPENWRT_LANTIQ_COMMON_H | ||||||
|  | +#define __OPENWRT_LANTIQ_COMMON_H | ||||||
|  | + | ||||||
|  | +/* Commands */ | ||||||
|  | +#if defined(CONFIG_LTQ_SUPPORT_ETHERNET) | ||||||
|  | +#define CONFIG_CMD_PING | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Compression */ | ||||||
|  | +#define CONFIG_LZMA | ||||||
|  | + | ||||||
|  | +/* Auto boot */ | ||||||
|  | +#define CONFIG_BOOTDELAY	2 | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if !defined(CONFIG_SYS_BOOT_RAM) | ||||||
|  | +#define CONFIG_BOOTCOMMAND \ | ||||||
|  | +	"bootm ${kernel_addr}" | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Ethernet */ | ||||||
|  | +#if defined(CONFIG_LTQ_SUPPORT_ETHERNET) | ||||||
|  | +#define CONFIG_ETHADDR		00:01:02:03:04:05 | ||||||
|  | +#define CONFIG_SERVERIP		192.168.1.2 | ||||||
|  | +#define CONFIG_IPADDR		192.168.1.1 | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Unnecessary */ | ||||||
|  | +#undef CONFIG_BOOTM_NETBSD | ||||||
|  | +#undef CONFIG_BOOTM_PLAN9 | ||||||
|  | +#undef CONFIG_BOOTM_RTEMS | ||||||
|  | + | ||||||
|  | +#endif /* __OPENWRT_LANTIQ_COMMON_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,33 +0,0 @@ | |||||||
| From 2c6115188c7353a601835885a6c544240cfc479e Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
| Date: Fri, 30 Nov 2012 18:09:25 +0100 |  | ||||||
| Subject: MIPS: VRX200: add option to boot from AVM EVA loader |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> |  | ||||||
|  |  | ||||||
| --- a/arch/mips/cpu/mips32/vrx200/config.mk |  | ||||||
| +++ b/arch/mips/cpu/mips32/vrx200/config.mk |  | ||||||
| @@ -17,6 +17,9 @@ endif |  | ||||||
|  LIBS-y += $(CPUDIR)/lantiq-common/liblantiq-common.o |  | ||||||
|   |  | ||||||
|  ifndef CONFIG_SPL_BUILD |  | ||||||
| +ifdef CONFIG_SYS_BOOT_EVA |  | ||||||
| +ALL-y += $(obj)u-boot.bin.lzma |  | ||||||
| +endif |  | ||||||
|  ifdef CONFIG_SYS_BOOT_SFSPL |  | ||||||
|  ALL-y += $(obj)u-boot.ltq.sfspl |  | ||||||
|  ALL-$(CONFIG_SPL_LZO_SUPPORT) += $(obj)u-boot.ltq.lzo.sfspl |  | ||||||
| --- a/arch/mips/include/asm/arch-vrx200/config.h |  | ||||||
| +++ b/arch/mips/include/asm/arch-vrx200/config.h |  | ||||||
| @@ -161,6 +161,11 @@ |  | ||||||
|  #define CONFIG_SYS_DISABLE_CACHE |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| +#if defined(CONFIG_SYS_BOOT_EVA) |  | ||||||
| +#define CONFIG_SYS_TEXT_BASE		0x80100000 |  | ||||||
| +#define CONFIG_SKIP_LOWLEVEL_INIT |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
|  #if defined(CONFIG_SYS_BOOT_NOR) |  | ||||||
|  #define CONFIG_SYS_TEXT_BASE		0xB0000000 |  | ||||||
|  #endif |  | ||||||
| @@ -0,0 +1,31 @@ | |||||||
|  | From ac6896098d9dd62a248340e6a090574399e1fd87 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 19 Aug 2013 18:46:47 +0200 | ||||||
|  | Subject: MIPS: lantiq: easy50712: add openwrt-lantiq-common.h | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/include/configs/easy50712.h b/include/configs/easy50712.h | ||||||
|  | index 6d7988c..bc8820a 100644 | ||||||
|  | --- a/include/configs/easy50712.h | ||||||
|  | +++ b/include/configs/easy50712.h | ||||||
|  | @@ -62,13 +62,13 @@ | ||||||
|  |  #define CONFIG_CONSOLE_ASC		1 | ||||||
|  |  #define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  |   | ||||||
|  | -/* Commands */ | ||||||
|  | -#define CONFIG_CMD_PING | ||||||
|  | - | ||||||
|  |  /* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
|  |  #include <asm/lantiq/config.h> | ||||||
|  |  #include <asm/arch/config.h> | ||||||
|  |   | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  |  #define CONFIG_ENV_UPDATE_UBOOT_NOR					\ | ||||||
|  |  	"update-uboot-nor=run load-uboot-norspl-lzo write-uboot-nor\0" | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,31 @@ | |||||||
|  | From 7afbe4633773905ef94a8404510fb5a459926000 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Mon, 19 Aug 2013 18:11:57 +0200 | ||||||
|  | Subject: MIPS: lantiq: easy80920: add openwrt-lantiq-common.h | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/include/configs/easy80920.h b/include/configs/easy80920.h | ||||||
|  | index 56ceedb..6f5ac03 100644 | ||||||
|  | --- a/include/configs/easy80920.h | ||||||
|  | +++ b/include/configs/easy80920.h | ||||||
|  | @@ -84,13 +84,13 @@ | ||||||
|  |  #define CONFIG_CONSOLE_ASC		1 | ||||||
|  |  #define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  |   | ||||||
|  | -/* Commands */ | ||||||
|  | -#define CONFIG_CMD_PING | ||||||
|  | - | ||||||
|  |  /* Pull in default board configs for Lantiq XWAY VRX200 */ | ||||||
|  |  #include <asm/lantiq/config.h> | ||||||
|  |  #include <asm/arch/config.h> | ||||||
|  |   | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  |  #define CONFIG_ENV_UPDATE_UBOOT_NOR					\ | ||||||
|  |  	"update-uboot-nor=run load-uboot-norspl-lzo write-uboot-nor\0" | ||||||
|  |   | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,20 +1,21 @@ | |||||||
| From 4a738c02a7190756e01ba58c93c4b07bc6d6c2aa Mon Sep 17 00:00:00 2001 | From 9f915cf9550a6234adecaf3031c2b279835e14af Mon Sep 17 00:00:00 2001 | ||||||
| From: Luka Perkov <luka@openwrt.org> | From: Luka Perkov <luka@openwrt.org> | ||||||
| Date: Wed, 29 Aug 2012 22:08:42 +0200 | Date: Sat, 2 Mar 2013 23:34:00 +0100 | ||||||
| Subject: MIPS: add board support for Arcadyan ARV4519 | Subject: MIPS: add board support for Arcadyan ARV4519 | ||||||
| 
 | 
 | ||||||
| Signed-off-by: Luka Perkov <luka@openwrt.org> | Signed-off-by: Luka Perkov <luka@openwrt.org> | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| 
 | 
 | ||||||
|  | diff --git a/board/arcadyan/arv4519pw/Makefile b/board/arcadyan/arv4519pw/Makefile
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/arcadyan/arv4519pw/Makefile
 | +++ b/board/arcadyan/arv4519pw/Makefile
 | ||||||
| @@ -0,0 +1,29 @@
 | @@ -0,0 +1,27 @@
 | ||||||
| +#
 |  | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 | +#
 | ||||||
| +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | ||||||
| +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | +#
 | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| +#
 | +#
 | ||||||
| +
 | +
 | ||||||
| +include $(TOPDIR)/config.mk
 | +include $(TOPDIR)/config.mk
 | ||||||
| @@ -38,14 +39,16 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +sinclude $(obj).depend
 | +sinclude $(obj).depend
 | ||||||
| +
 | +
 | ||||||
| +#########################################################################
 | +#########################################################################
 | ||||||
|  | diff --git a/board/arcadyan/arv4519pw/arv4519pw.c b/board/arcadyan/arv4519pw/arv4519pw.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..a9dfd03
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/arcadyan/arv4519pw/arv4519pw.c
 | +++ b/board/arcadyan/arv4519pw/arv4519pw.c
 | ||||||
| @@ -0,0 +1,52 @@
 | @@ -0,0 +1,51 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 |  | ||||||
| + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org>
 | + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org>
 | ||||||
|  | + *
 | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#include <common.h>
 | +#include <common.h>
 | ||||||
| @@ -93,27 +96,31 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +{
 | +{
 | ||||||
| +	return switch_device_register(&ar8216_dev);
 | +	return switch_device_register(&ar8216_dev);
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/board/arcadyan/arv4519pw/config.mk b/board/arcadyan/arv4519pw/config.mk
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d8953b
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/arcadyan/arv4519pw/config.mk
 | +++ b/board/arcadyan/arv4519pw/config.mk
 | ||||||
| @@ -0,0 +1,8 @@
 | @@ -0,0 +1,7 @@
 | ||||||
| +#
 | +#
 | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 | +#
 | ||||||
| +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| +#
 | +#
 | ||||||
| +
 | +
 | ||||||
| +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR)
 | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR)
 | ||||||
|  | diff --git a/board/arcadyan/arv4519pw/ddr_settings.h b/board/arcadyan/arv4519pw/ddr_settings.h
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..c5e88b3
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/arcadyan/arv4519pw/ddr_settings.h
 | +++ b/board/arcadyan/arv4519pw/ddr_settings.h
 | ||||||
| @@ -0,0 +1,56 @@
 | @@ -0,0 +1,55 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * Copyright (C) 2012-2013 Luka Perkov <luka@openwrt.org>
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 | + *
 | ||||||
| + * generated with lantiq_ram_extract_magic.awk
 | + * This file has been generated with lantiq_ram_extract_magic.awk script.
 | ||||||
| + *
 | + *
 | ||||||
| + * Copyright (C) 2011 Luka Perkov <luka@openwrt.org>
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#define MC_DC00_VALUE	0x1B1B
 | +#define MC_DC00_VALUE	0x1B1B
 | ||||||
| @@ -163,25 +170,30 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define MC_DC44_VALUE	0x0
 | +#define MC_DC44_VALUE	0x0
 | ||||||
| +#define MC_DC45_VALUE	0x500
 | +#define MC_DC45_VALUE	0x500
 | ||||||
| +#define MC_DC46_VALUE	0x0
 | +#define MC_DC46_VALUE	0x0
 | ||||||
|  | diff --git a/boards.cfg b/boards.cfg
 | ||||||
|  | index 394ede7..f300d5a 100644
 | ||||||
| --- a/boards.cfg
 | --- a/boards.cfg
 | ||||||
| +++ b/boards.cfg
 | +++ b/boards.cfg
 | ||||||
| @@ -438,6 +438,8 @@ vct_premium                  mips
 | @@ -502,6 +502,9 @@ Active  mips        mips32         au1x00      -               dbau1x00
 | ||||||
|  vct_premium_onenand          mips        mips32      vct                 micronas       -           vct:VCT_PREMIUM,VCT_ONENAND |  Active  mips        mips32         au1x00      -               dbau1x00            dbau1550                             dbau1x00:DBAU1550                                                                                                                 Thomas Lange <thomas@corelatus.se> | ||||||
|  vct_premium_onenand_small    mips        mips32      vct                 micronas       -           vct:VCT_PREMIUM,VCT_ONENAND,VCT_SMALL_IMAGE |  Active  mips        mips32         au1x00      -               dbau1x00            dbau1550_el                          dbau1x00:DBAU1550,SYS_LITTLE_ENDIAN                                                                                               Thomas Lange <thomas@corelatus.se> | ||||||
|  vct_premium_small            mips        mips32      vct                 micronas       -           vct:VCT_PREMIUM,VCT_SMALL_IMAGE |  Active  mips        mips32         au1x00      -               pb1x00              pb1000                               pb1x00:PB1000                                                                                                                     - | ||||||
| +arv4519pw_ram                mips        mips32      arv4519pw           arcadyan       danube      arv4519pw:SYS_BOOT_RAM
 | +Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_brn                        arv4519pw:SYS_BOOT_BRN                                                                                                            Luka Perkov <luka@openwrt.org>
 | ||||||
| +arv4519pw_nor                mips        mips32      arv4519pw           arcadyan       danube      arv4519pw:SYS_BOOT_NOR
 | +Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_nor                        arv4519pw:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org>
 | ||||||
|  arv7518pw_ram                mips        mips32      arv7518pw           arcadyan       danube      arv7518pw:SYS_BOOT_RAM | +Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_ram                        arv4519pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org>
 | ||||||
|  arv7518pw_nor                mips        mips32      arv7518pw           arcadyan       danube      arv7518pw:SYS_BOOT_NOR |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_nor                        easy50712:SYS_BOOT_NOR                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  dbau1000                     mips        mips32      dbau1x00            -              au1x00      dbau1x00:DBAU1000 |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_norspl                     easy50712:SYS_BOOT_NORSPL                                                                                                         Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_ram                        easy50712:SYS_BOOT_RAM                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | diff --git a/include/configs/arv4519pw.h b/include/configs/arv4519pw.h
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..6907108
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/include/configs/arv4519pw.h
 | +++ b/include/configs/arv4519pw.h
 | ||||||
| @@ -0,0 +1,69 @@
 | @@ -0,0 +1,67 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * Copyright (C) 2012-2013 Luka Perkov <luka@openwrt.org>
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 | + *
 | ||||||
| + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org>
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#ifndef __CONFIG_H
 | +#ifndef __CONFIG_H
 | ||||||
| @@ -193,7 +205,9 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +
 | +
 | ||||||
| +/* Configure SoC */
 | +/* Configure SoC */
 | ||||||
| +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */
 | +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */
 | ||||||
|  | +
 | ||||||
| +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */
 | +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */
 | ||||||
|  | +
 | ||||||
| +#define CONFIG_LTQ_SUPPORT_NOR_FLASH	/* Have a parallel NOR flash */
 | +#define CONFIG_LTQ_SUPPORT_NOR_FLASH	/* Have a parallel NOR flash */
 | ||||||
| +
 | +
 | ||||||
| +/* Switch devices */
 | +/* Switch devices */
 | ||||||
| @@ -205,44 +219,44 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define CONFIG_ENV_IS_IN_FLASH
 | +#define CONFIG_ENV_IS_IN_FLASH
 | ||||||
| +#define CONFIG_ENV_OVERWRITE
 | +#define CONFIG_ENV_OVERWRITE
 | ||||||
| +#define CONFIG_ENV_OFFSET		(192 * 1024)
 | +#define CONFIG_ENV_OFFSET		(192 * 1024)
 | ||||||
| +#define CONFIG_ENV_SIZE			(64 * 1024)
 |  | ||||||
| +#define CONFIG_ENV_SECT_SIZE		(64 * 1024)
 | +#define CONFIG_ENV_SECT_SIZE		(64 * 1024)
 | ||||||
| +#else
 | +#else
 | ||||||
| +#define CONFIG_ENV_IS_NOWHERE
 | +#define CONFIG_ENV_IS_NOWHERE
 | ||||||
| +#define CONFIG_ENV_SIZE			(2 * 1024)
 |  | ||||||
| +#endif
 | +#endif
 | ||||||
| +
 | +
 | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024)
 | ||||||
| +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR
 | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR
 | ||||||
| +
 | +
 | ||||||
|  | +/* Brnboot loadable image */
 | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_BRN)
 | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80002000
 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT
 | ||||||
|  | +#define CONFIG_SYS_DISABLE_CACHE
 | ||||||
|  | +#define CONFIG_ENV_OVERWRITE 1
 | ||||||
|  | +#endif
 | ||||||
|  | +
 | ||||||
| +/* Console */
 | +/* Console */
 | ||||||
| +#define CONFIG_LTQ_ADVANCED_CONSOLE
 | +#define CONFIG_LTQ_ADVANCED_CONSOLE
 | ||||||
| +#define CONFIG_BAUDRATE			115200
 | +#define CONFIG_BAUDRATE			115200
 | ||||||
| +#define CONFIG_CONSOLE_ASC		1
 | +#define CONFIG_CONSOLE_ASC		1
 | ||||||
| +#define CONFIG_CONSOLE_DEV		"ttyLTQ1"
 | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1"
 | ||||||
| +
 | +
 | ||||||
| +/* Commands */
 |  | ||||||
| +#define CONFIG_CMD_PING
 |  | ||||||
| +
 |  | ||||||
| +/* Pull in default board configs for Lantiq XWAY Danube */
 | +/* Pull in default board configs for Lantiq XWAY Danube */
 | ||||||
| +#include <asm/lantiq/config.h>
 | +#include <asm/lantiq/config.h>
 | ||||||
| +#include <asm/arch/config.h>
 | +#include <asm/arch/config.h>
 | ||||||
| +
 | +
 | ||||||
| +/* Compression */
 | +/* Pull in default OpenWrt configs for Lantiq SoC */
 | ||||||
| +#define CONFIG_LZMA
 | +#include "openwrt-lantiq-common.h"
 | ||||||
| +
 |  | ||||||
| +/* Auto boot */
 |  | ||||||
| +#define CONFIG_BOOTDELAY		2
 |  | ||||||
| +
 |  | ||||||
| +/* Environment configuration */
 |  | ||||||
| +#define CONFIG_BOOTCOMMAND			\
 |  | ||||||
| +	"run addeth; bootm ${kernel_addr}"
 |  | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\
 | +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\
 | ||||||
| +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0"
 | +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0"
 | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_EXTRA_ENV_SETTINGS		\
 | +#define CONFIG_EXTRA_ENV_SETTINGS	\
 | ||||||
| +	CONFIG_ENV_LANTIQ_DEFAULTS		\
 | +	CONFIG_ENV_LANTIQ_DEFAULTS	\
 | ||||||
| +	CONFIG_ENV_UPDATE_UBOOT_NOR		\
 | +	CONFIG_ENV_UPDATE_UBOOT_NOR	\
 | ||||||
| +	"kernel_addr=0xB0040000\0"
 | +	"kernel_addr=0xB0040000\0"
 | ||||||
| +
 | +
 | ||||||
| +#endif /* __CONFIG_H */
 | +#endif /* __CONFIG_H */
 | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.2 | ||||||
|  | 
 | ||||||
| @@ -1,20 +1,21 @@ | |||||||
| From 289f7ed5d725067b4eb4b1a105bb63d55bf20392 Mon Sep 17 00:00:00 2001 | From 54a31b334162e8dc2ea891057ddeab42978db8b3 Mon Sep 17 00:00:00 2001 | ||||||
| From: Luka Perkov <luka@openwrt.org> | From: Luka Perkov <luka@openwrt.org> | ||||||
| Date: Wed, 29 Aug 2012 22:08:41 +0200 | Date: Sat, 2 Mar 2013 23:34:00 +0100 | ||||||
| Subject: MIPS: add board support for Arcadyan ARV7518 | Subject: MIPS: add board support for Arcadyan ARV7518 | ||||||
|  |  | ||||||
| Signed-off-by: Luka Perkov <luka@openwrt.org> | Signed-off-by: Luka Perkov <luka@openwrt.org> | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/board/arcadyan/arv7518pw/Makefile b/board/arcadyan/arv7518pw/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/board/arcadyan/arv7518pw/Makefile | +++ b/board/arcadyan/arv7518pw/Makefile | ||||||
| @@ -0,0 +1,29 @@ | @@ -0,0 +1,27 @@ | ||||||
| +# |  | ||||||
| +# This file is released under the terms of GPL v2 and any later version. |  | ||||||
| +# See the file COPYING in the root directory of the source tree for details. |  | ||||||
| +# | +# | ||||||
| +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
| +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
| +# | +# | ||||||
| + | + | ||||||
| +include $(TOPDIR)/config.mk | +include $(TOPDIR)/config.mk | ||||||
| @@ -38,14 +39,16 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +sinclude $(obj).depend | +sinclude $(obj).depend | ||||||
| + | + | ||||||
| +######################################################################### | +######################################################################### | ||||||
|  | diff --git a/board/arcadyan/arv7518pw/arv7518pw.c b/board/arcadyan/arv7518pw/arv7518pw.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..a9dfd03 | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/board/arcadyan/arv7518pw/arv7518pw.c | +++ b/board/arcadyan/arv7518pw/arv7518pw.c | ||||||
| @@ -0,0 +1,52 @@ | @@ -0,0 +1,51 @@ | ||||||
| +/* | +/* | ||||||
| + * This file is released under the terms of GPL v2 and any later version. |  | ||||||
| + * See the file COPYING in the root directory of the source tree for details. |  | ||||||
| + * |  | ||||||
| + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org> | + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
| + */ | + */ | ||||||
| + | + | ||||||
| +#include <common.h> | +#include <common.h> | ||||||
| @@ -93,27 +96,31 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +{ | +{ | ||||||
| +	return switch_device_register(&ar8216_dev); | +	return switch_device_register(&ar8216_dev); | ||||||
| +} | +} | ||||||
|  | diff --git a/board/arcadyan/arv7518pw/config.mk b/board/arcadyan/arv7518pw/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d8953b | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/board/arcadyan/arv7518pw/config.mk | +++ b/board/arcadyan/arv7518pw/config.mk | ||||||
| @@ -0,0 +1,8 @@ | @@ -0,0 +1,7 @@ | ||||||
| +# | +# | ||||||
| +# This file is released under the terms of GPL v2 and any later version. | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
| +# See the file COPYING in the root directory of the source tree for details. |  | ||||||
| +# | +# | ||||||
| +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
| +# | +# | ||||||
| + | + | ||||||
| +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/arcadyan/arv7518pw/ddr_settings.h b/board/arcadyan/arv7518pw/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..8b5e9c5 | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/board/arcadyan/arv7518pw/ddr_settings.h | +++ b/board/arcadyan/arv7518pw/ddr_settings.h | ||||||
| @@ -0,0 +1,56 @@ | @@ -0,0 +1,55 @@ | ||||||
| +/* | +/* | ||||||
| + * This file is released under the terms of GPL v2 and any later version. | + * Copyright (C) 2012-2013 Luka Perkov <luka@openwrt.org> | ||||||
| + * See the file COPYING in the root directory of the source tree for details. |  | ||||||
| + * | + * | ||||||
| + * generated with lantiq_ram_extract_magic.awk | + * This file has been generated with lantiq_ram_extract_magic.awk script. | ||||||
| + * | + * | ||||||
| + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org> | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
| + */ | + */ | ||||||
| + | + | ||||||
| +#define MC_DC00_VALUE	0x1B1B | +#define MC_DC00_VALUE	0x1B1B | ||||||
| @@ -163,25 +170,30 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define MC_DC44_VALUE	0x0 | +#define MC_DC44_VALUE	0x0 | ||||||
| +#define MC_DC45_VALUE	0x500 | +#define MC_DC45_VALUE	0x500 | ||||||
| +#define MC_DC46_VALUE	0x0 | +#define MC_DC46_VALUE	0x0 | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index f300d5a..e832423 100644 | ||||||
| --- a/boards.cfg | --- a/boards.cfg | ||||||
| +++ b/boards.cfg | +++ b/boards.cfg | ||||||
| @@ -438,6 +438,8 @@ vct_premium                  mips | @@ -505,6 +505,9 @@ Active  mips        mips32         au1x00      -               pb1x00 | ||||||
|  vct_premium_onenand          mips        mips32      vct                 micronas       -           vct:VCT_PREMIUM,VCT_ONENAND |  Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_brn                        arv4519pw:SYS_BOOT_BRN                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  vct_premium_onenand_small    mips        mips32      vct                 micronas       -           vct:VCT_PREMIUM,VCT_ONENAND,VCT_SMALL_IMAGE |  Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_nor                        arv4519pw:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  vct_premium_small            mips        mips32      vct                 micronas       -           vct:VCT_PREMIUM,VCT_SMALL_IMAGE |  Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_ram                        arv4519pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
| +arv7518pw_ram                mips        mips32      arv7518pw           arcadyan       danube      arv7518pw:SYS_BOOT_RAM | +Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_brn                        arv7518pw:SYS_BOOT_BRN                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
| +arv7518pw_nor                mips        mips32      arv7518pw           arcadyan       danube      arv7518pw:SYS_BOOT_NOR | +Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_nor                        arv7518pw:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  dbau1000                     mips        mips32      dbau1x00            -              au1x00      dbau1x00:DBAU1000 | +Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_ram                        arv7518pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  dbau1100                     mips        mips32      dbau1x00            -              au1x00      dbau1x00:DBAU1100 |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_nor                        easy50712:SYS_BOOT_NOR                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  dbau1500                     mips        mips32      dbau1x00            -              au1x00      dbau1x00:DBAU1500 |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_norspl                     easy50712:SYS_BOOT_NORSPL                                                                                                         Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_ram                        easy50712:SYS_BOOT_RAM                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | diff --git a/include/configs/arv7518pw.h b/include/configs/arv7518pw.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..8cf1708 | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/include/configs/arv7518pw.h | +++ b/include/configs/arv7518pw.h | ||||||
| @@ -0,0 +1,69 @@ | @@ -0,0 +1,67 @@ | ||||||
| +/* | +/* | ||||||
| + * This file is released under the terms of GPL v2 and any later version. | + * Copyright (C) 2012-2013 Luka Perkov <luka@openwrt.org> | ||||||
| + * See the file COPYING in the root directory of the source tree for details. |  | ||||||
| + * | + * | ||||||
| + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org> | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
| + */ | + */ | ||||||
| + | + | ||||||
| +#ifndef __CONFIG_H | +#ifndef __CONFIG_H | ||||||
| @@ -193,7 +205,9 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| + | + | ||||||
| +/* Configure SoC */ | +/* Configure SoC */ | ||||||
| +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */ | +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */ | ||||||
|  | + | ||||||
| +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */ | +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */ | ||||||
|  | + | ||||||
| +#define CONFIG_LTQ_SUPPORT_NOR_FLASH	/* Have a parallel NOR flash */ | +#define CONFIG_LTQ_SUPPORT_NOR_FLASH	/* Have a parallel NOR flash */ | ||||||
| + | + | ||||||
| +/* Switch devices */ | +/* Switch devices */ | ||||||
| @@ -205,44 +219,44 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define CONFIG_ENV_IS_IN_FLASH | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
| +#define CONFIG_ENV_OVERWRITE | +#define CONFIG_ENV_OVERWRITE | ||||||
| +#define CONFIG_ENV_OFFSET		(192 * 1024) | +#define CONFIG_ENV_OFFSET		(192 * 1024) | ||||||
| +#define CONFIG_ENV_SIZE			(64 * 1024) |  | ||||||
| +#define CONFIG_ENV_SECT_SIZE		(64 * 1024) | +#define CONFIG_ENV_SECT_SIZE		(64 * 1024) | ||||||
| +#else | +#else | ||||||
| +#define CONFIG_ENV_IS_NOWHERE | +#define CONFIG_ENV_IS_NOWHERE | ||||||
| +#define CONFIG_ENV_SIZE			(2 * 1024) |  | ||||||
| +#endif | +#endif | ||||||
| + | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
| +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
| + | + | ||||||
|  | +/* Brnboot loadable image */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_BRN) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80002000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#define CONFIG_SYS_DISABLE_CACHE | ||||||
|  | +#define CONFIG_ENV_OVERWRITE 1 | ||||||
|  | +#endif | ||||||
|  | + | ||||||
| +/* Console */ | +/* Console */ | ||||||
| +#define CONFIG_LTQ_ADVANCED_CONSOLE | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
| +#define CONFIG_BAUDRATE			115200 | +#define CONFIG_BAUDRATE			115200 | ||||||
| +#define CONFIG_CONSOLE_ASC		1 | +#define CONFIG_CONSOLE_ASC		1 | ||||||
| +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
| + | + | ||||||
| +/* Commands */ |  | ||||||
| +#define CONFIG_CMD_PING |  | ||||||
| + |  | ||||||
| +/* Pull in default board configs for Lantiq XWAY Danube */ | +/* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
| +#include <asm/lantiq/config.h> | +#include <asm/lantiq/config.h> | ||||||
| +#include <asm/arch/config.h> | +#include <asm/arch/config.h> | ||||||
| + | + | ||||||
| +/* Compression */ | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
| +#define CONFIG_LZMA | +#include "openwrt-lantiq-common.h" | ||||||
| + |  | ||||||
| +/* Auto boot */ |  | ||||||
| +#define CONFIG_BOOTDELAY		2 |  | ||||||
| + |  | ||||||
| +/* Environment configuration */ |  | ||||||
| +#define CONFIG_BOOTCOMMAND			\ |  | ||||||
| +	"run addeth; bootm ${kernel_addr}" |  | ||||||
| + | + | ||||||
| +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\ | +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\ | ||||||
| +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0" | +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0" | ||||||
| + | + | ||||||
| +#define CONFIG_EXTRA_ENV_SETTINGS		\ | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
| +	CONFIG_ENV_LANTIQ_DEFAULTS		\ | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
| +	CONFIG_ENV_UPDATE_UBOOT_NOR		\ | +	CONFIG_ENV_UPDATE_UBOOT_NOR	\ | ||||||
| +	"kernel_addr=0xB0040000\0" | +	"kernel_addr=0xB0040000\0" | ||||||
| + | + | ||||||
| +#endif /* __CONFIG_H */ | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,268 @@ | |||||||
|  | From 4bacfc80eae768be45f9ddf7588ec55281354648 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Golle <daniel.golle@gmail.com> | ||||||
|  | Date: Fri, 8 Mar 2013 13:29:04 +0200 | ||||||
|  | Subject: MIPS: add board support for AudioCodes MP-252 | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Golle <dgolle@allnet.de> | ||||||
|  |  | ||||||
|  | diff --git a/board/audiocodes/acmp252/Makefile b/board/audiocodes/acmp252/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/audiocodes/acmp252/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/audiocodes/acmp252/acmp252.c b/board/audiocodes/acmp252/acmp252.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3368506 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/audiocodes/acmp252/acmp252.c | ||||||
|  | @@ -0,0 +1,66 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Daniel Golle <daniel.golle@gmail.com> | ||||||
|  | + * Copyright (C) 2011 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/reset.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | + | ||||||
|  | +static void gpio_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* Activate reset line of ADM6996I switch */ | ||||||
|  | +	gpio_direction_output(19, 0); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	gpio_init(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* MAC0: Lantiq ADM6996I switch */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_SWITCH, PHY_INTERFACE_MODE_RMII }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t *bis) | ||||||
|  | +{ | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct switch_device adm6996i_dev = { | ||||||
|  | +	.name = "adm6996i", | ||||||
|  | +	.cpu_port = 5, | ||||||
|  | +	.port_mask = 0xF, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_switch_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* Deactivate reset line of ADM6996I switch */ | ||||||
|  | +	gpio_set_value(19, 1); | ||||||
|  | + | ||||||
|  | +	/* ADM6996I needs some time to come out of reset */ | ||||||
|  | +	__udelay(50000); | ||||||
|  | + | ||||||
|  | +	return switch_device_register(&adm6996i_dev); | ||||||
|  | +} | ||||||
|  | diff --git a/board/audiocodes/acmp252/config.mk b/board/audiocodes/acmp252/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d8953b | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/audiocodes/acmp252/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/audiocodes/acmp252/ddr_settings.h b/board/audiocodes/acmp252/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..d0b4f20 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/audiocodes/acmp252/ddr_settings.h | ||||||
|  | @@ -0,0 +1,55 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * This file has been generated with lantiq_ram_extract_magic.awk script. | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define MC_DC00_VALUE	0x1B1B | ||||||
|  | +#define MC_DC01_VALUE	0x0 | ||||||
|  | +#define MC_DC02_VALUE	0x0 | ||||||
|  | +#define MC_DC03_VALUE	0x0 | ||||||
|  | +#define MC_DC04_VALUE	0x0 | ||||||
|  | +#define MC_DC05_VALUE	0x200 | ||||||
|  | +#define MC_DC06_VALUE	0x605 | ||||||
|  | +#define MC_DC07_VALUE	0x403 | ||||||
|  | +#define MC_DC08_VALUE	0x103 | ||||||
|  | +#define MC_DC09_VALUE	0x80B | ||||||
|  | +#define MC_DC10_VALUE	0x304 | ||||||
|  | +#define MC_DC11_VALUE	0xD03 | ||||||
|  | +#define MC_DC12_VALUE	0x2C8 | ||||||
|  | +#define MC_DC13_VALUE	0x1 | ||||||
|  | +#define MC_DC14_VALUE	0x0 | ||||||
|  | +#define MC_DC15_VALUE	0x13C | ||||||
|  | +#define MC_DC16_VALUE	0xC800 | ||||||
|  | +#define MC_DC17_VALUE	0xD | ||||||
|  | +#define MC_DC18_VALUE	0x402 | ||||||
|  | +#define MC_DC19_VALUE	0x200 | ||||||
|  | +#define MC_DC20_VALUE	0xA03 | ||||||
|  | +#define MC_DC21_VALUE	0x1700 | ||||||
|  | +#define MC_DC22_VALUE	0x1717 | ||||||
|  | +#define MC_DC23_VALUE	0x0 | ||||||
|  | +#define MC_DC24_VALUE	0x5C | ||||||
|  | +#define MC_DC25_VALUE	0x0 | ||||||
|  | +#define MC_DC26_VALUE	0x0 | ||||||
|  | +#define MC_DC27_VALUE	0x0 | ||||||
|  | +#define MC_DC28_VALUE	0x510 | ||||||
|  | +#define MC_DC29_VALUE	0x2D93 | ||||||
|  | +#define MC_DC30_VALUE	0x8300 | ||||||
|  | +#define MC_DC31_VALUE	0x0 | ||||||
|  | +#define MC_DC32_VALUE	0x0 | ||||||
|  | +#define MC_DC33_VALUE	0x0 | ||||||
|  | +#define MC_DC34_VALUE	0x0 | ||||||
|  | +#define MC_DC35_VALUE	0x0 | ||||||
|  | +#define MC_DC36_VALUE	0x0 | ||||||
|  | +#define MC_DC37_VALUE	0x0 | ||||||
|  | +#define MC_DC38_VALUE	0x0 | ||||||
|  | +#define MC_DC39_VALUE	0x0 | ||||||
|  | +#define MC_DC40_VALUE	0x0 | ||||||
|  | +#define MC_DC41_VALUE	0x0 | ||||||
|  | +#define MC_DC42_VALUE	0x0 | ||||||
|  | +#define MC_DC43_VALUE	0x0 | ||||||
|  | +#define MC_DC44_VALUE	0x0 | ||||||
|  | +#define MC_DC45_VALUE	0x500 | ||||||
|  | +#define MC_DC46_VALUE	0x0 | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index e832423..9f407b8 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -508,6 +508,8 @@ Active  mips        mips32         danube      arcadyan        arv4519pw | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_brn                        arv7518pw:SYS_BOOT_BRN                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_nor                        arv7518pw:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_ram                        arv7518pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         danube      audiocodes      acmp252             acmp252_nor                          acmp252:SYS_BOOT_NOR                                                                                                              Daniel Golle <daniel.golle@gmail.com> | ||||||
|  | +Active  mips        mips32         danube      audiocodes      acmp252             acmp252_ram                          acmp252:SYS_BOOT_RAM                                                                                                              Daniel Golle <daniel.golle@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_nor                        easy50712:SYS_BOOT_NOR                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_norspl                     easy50712:SYS_BOOT_NORSPL                                                                                                         Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_ram                        easy50712:SYS_BOOT_RAM                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | diff --git a/include/configs/acmp252.h b/include/configs/acmp252.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..2c9ab19 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/acmp252.h | ||||||
|  | @@ -0,0 +1,60 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Daniel Golle <daniel.golle@gmail.com> | ||||||
|  | + * Copyright (C) 2011 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"ACMP252" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"AudioCodes MP-252" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NOR_FLASH	/* Have a parallel NOR flash */ | ||||||
|  | + | ||||||
|  | +/* Switch devices */ | ||||||
|  | +#define CONFIG_SWITCH_MULTI | ||||||
|  | +#define CONFIG_SWITCH_ADM6996I | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_NOR) | ||||||
|  | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(256 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(128 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\ | ||||||
|  | +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NOR	\ | ||||||
|  | +	"kernel_addr=0xB0040000\0" | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -1,20 +1,22 @@ | |||||||
| From 51f04c00e831b49587f9f766ff1af67d2122feb2 Mon Sep 17 00:00:00 2001 | From 37a95ae4ba75407a26862ece6f48fa68aa6c5c78 Mon Sep 17 00:00:00 2001 | ||||||
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| Date: Fri, 30 Nov 2012 18:09:47 +0100 | Date: Sat, 2 Mar 2013 23:34:00 +0100 | ||||||
| Subject: MIPS: add board support for AVM FritzBox 3370 | Subject: MIPS: add board support for AVM FritzBox 3370 | ||||||
| 
 | 
 | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| 
 | 
 | ||||||
|  | diff --git a/board/avm/fb3370/Makefile b/board/avm/fb3370/Makefile
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..e3d621e
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/avm/fb3370/Makefile
 | +++ b/board/avm/fb3370/Makefile
 | ||||||
| @@ -0,0 +1,29 @@
 | @@ -0,0 +1,28 @@
 | ||||||
| +#
 |  | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 | +#
 | ||||||
| +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | ||||||
| +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | ||||||
| +#
 | +#
 | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
|  | +#
 | ||||||
| +
 | +
 | ||||||
| +include $(TOPDIR)/config.mk
 | +include $(TOPDIR)/config.mk
 | ||||||
| +
 | +
 | ||||||
| @@ -37,26 +39,30 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +sinclude $(obj).depend
 | +sinclude $(obj).depend
 | ||||||
| +
 | +
 | ||||||
| +#########################################################################
 | +#########################################################################
 | ||||||
|  | diff --git a/board/avm/fb3370/config.mk b/board/avm/fb3370/config.mk
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..4dcfd05
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/avm/fb3370/config.mk
 | +++ b/board/avm/fb3370/config.mk
 | ||||||
| @@ -0,0 +1,8 @@
 | @@ -0,0 +1,7 @@
 | ||||||
| +#
 |  | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 | +#
 | ||||||
| +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | ||||||
| +#
 | +#
 | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
|  | +#
 | ||||||
| +
 | +
 | ||||||
| +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR)
 | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR)
 | ||||||
|  | diff --git a/board/avm/fb3370/ddr_settings.h b/board/avm/fb3370/ddr_settings.h
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..307c084
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/avm/fb3370/ddr_settings.h
 | +++ b/board/avm/fb3370/ddr_settings.h
 | ||||||
| @@ -0,0 +1,70 @@
 | @@ -0,0 +1,69 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 |  | ||||||
| + * Copyright (C) 2007-2010 Lantiq Deutschland GmbH
 | + * Copyright (C) 2007-2010 Lantiq Deutschland GmbH
 | ||||||
| + * Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | + * Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | ||||||
|  | + *
 | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#define	MC_CCR00_VALUE	0x101
 | +#define	MC_CCR00_VALUE	0x101
 | ||||||
| @@ -100,8 +106,8 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define	MC_CCR38_VALUE	0x0
 | +#define	MC_CCR38_VALUE	0x0
 | ||||||
| +#define	MC_CCR39_VALUE	0x141F04
 | +#define	MC_CCR39_VALUE	0x141F04
 | ||||||
| +#define	MC_CCR40_VALUE	0x142704
 | +#define	MC_CCR40_VALUE	0x142704
 | ||||||
| +#define	MC_CCR41_VALUE	0x141b42
 | +#define	MC_CCR41_VALUE	0x141B42
 | ||||||
| +#define	MC_CCR42_VALUE	0x141b42
 | +#define	MC_CCR42_VALUE	0x141B42
 | ||||||
| +#define	MC_CCR43_VALUE	0x566504
 | +#define	MC_CCR43_VALUE	0x566504
 | ||||||
| +#define	MC_CCR44_VALUE	0x566504
 | +#define	MC_CCR44_VALUE	0x566504
 | ||||||
| +#define	MC_CCR45_VALUE	0x565F17
 | +#define	MC_CCR45_VALUE	0x565F17
 | ||||||
| @@ -121,14 +127,16 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define	MC_CCR59_VALUE	0x7800301
 | +#define	MC_CCR59_VALUE	0x7800301
 | ||||||
| +#define	MC_CCR60_VALUE	0x7800301
 | +#define	MC_CCR60_VALUE	0x7800301
 | ||||||
| +#define	MC_CCR61_VALUE	0x4
 | +#define	MC_CCR61_VALUE	0x4
 | ||||||
|  | diff --git a/board/avm/fb3370/fb3370.c b/board/avm/fb3370/fb3370.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..ff44c68
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/avm/fb3370/fb3370.c
 | +++ b/board/avm/fb3370/fb3370.c
 | ||||||
| @@ -0,0 +1,139 @@
 | @@ -0,0 +1,138 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 |  | ||||||
| + * Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | + * Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | ||||||
|  | + *
 | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#include <common.h>
 | +#include <common.h>
 | ||||||
| @@ -263,26 +271,30 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +		break;
 | +		break;
 | ||||||
| +	}
 | +	}
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/boards.cfg b/boards.cfg
 | ||||||
|  | index 9f407b8..ea5c4f9 100644
 | ||||||
| --- a/boards.cfg
 | --- a/boards.cfg
 | ||||||
| +++ b/boards.cfg
 | +++ b/boards.cfg
 | ||||||
| @@ -451,6 +451,9 @@ incaip                       mips
 | @@ -517,6 +517,9 @@ Active  mips        mips32         incaip      -               incaip
 | ||||||
|  incaip_100MHz                mips        mips32      incaip              -              incaip      incaip:CPU_CLOCK_RATE=100000000 |  Active  mips        mips32         incaip      -               incaip              incaip_100MHz                        incaip:CPU_CLOCK_RATE=100000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
|  incaip_133MHz                mips        mips32      incaip              -              incaip      incaip:CPU_CLOCK_RATE=133000000 |  Active  mips        mips32         incaip      -               incaip              incaip_133MHz                        incaip:CPU_CLOCK_RATE=133000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
|  incaip_150MHz                mips        mips32      incaip              -              incaip      incaip:CPU_CLOCK_RATE=150000000 |  Active  mips        mips32         incaip      -               incaip              incaip_150MHz                        incaip:CPU_CLOCK_RATE=150000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
| +fb3370_ram                   mips        mips32      fb3370              avm            vrx200      fb3370:SYS_BOOT_RAM
 | +Active  mips        mips32         vrx200      avm             fb3370              fb3370_eva                           fb3370:SYS_BOOT_EVA                                                                                                               Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | ||||||
| +fb3370_eva                   mips        mips32      fb3370              avm            vrx200      fb3370:SYS_BOOT_EVA
 | +Active  mips        mips32         vrx200      avm             fb3370              fb3370_ram                           fb3370:SYS_BOOT_RAM                                                                                                               Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | ||||||
| +fb3370_sfspl                 mips        mips32      fb3370              avm            vrx200      fb3370:SYS_BOOT_SFSPL
 | +Active  mips        mips32         vrx200      avm             fb3370              fb3370_sfspl                         fb3370:SYS_BOOT_SFSPL                                                                                                             Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | ||||||
|  easy80920_nor                mips        mips32      easy80920           lantiq         vrx200      easy80920:SYS_BOOT_NOR |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_nandspl                    easy80920:SYS_BOOT_NANDSPL                                                                                                        Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  easy80920_norspl             mips        mips32      easy80920           lantiq         vrx200      easy80920:SYS_BOOT_NORSPL |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_nor                        easy80920:SYS_BOOT_NOR                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  easy80920_ram                mips        mips32      easy80920           lantiq         vrx200      easy80920:SYS_BOOT_RAM |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_norspl                     easy80920:SYS_BOOT_NORSPL                                                                                                         Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | diff --git a/include/configs/fb3370.h b/include/configs/fb3370.h
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..8ae1373
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/include/configs/fb3370.h
 | +++ b/include/configs/fb3370.h
 | ||||||
| @@ -0,0 +1,75 @@
 | @@ -0,0 +1,78 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 | + *
 | ||||||
| + * Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#ifndef __CONFIG_H
 | +#ifndef __CONFIG_H
 | ||||||
| @@ -293,24 +305,24 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define CONFIG_BOARD_NAME	"AVM FritzBox 3370"
 | +#define CONFIG_BOARD_NAME	"AVM FritzBox 3370"
 | ||||||
| +
 | +
 | ||||||
| +/* Configure SoC */
 | +/* Configure SoC */
 | ||||||
| +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */
 | +#define CONFIG_LTQ_SUPPORT_UART			/* Enable ASC and UART */
 | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */
 | +#define CONFIG_LTQ_SUPPORT_ETHERNET		/* Enable ethernet */
 | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_LTQ_SUPPORT_SPI_FLASH
 | +#define CONFIG_LTQ_SUPPORT_SPI_FLASH
 | ||||||
| +#define CONFIG_SPI_FLASH_MACRONIX	/* Have a MX29LV620 serial flash */
 | +#define CONFIG_SPI_FLASH_MACRONIX		/* Have a MX29LV620 serial flash */
 | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_LTQ_SUPPORT_NAND_FLASH
 | +#define CONFIG_LTQ_SUPPORT_NAND_FLASH
 | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_LTQ_SUPPORT_SPL_SPI_FLASH	/* Build SPI flash SPL */
 | +#define CONFIG_LTQ_SUPPORT_SPL_SPI_FLASH	/* Build SPI flash SPL */
 | ||||||
|  | +#define CONFIG_LTQ_SPL_COMP_LZO			/* Compress SPL with LZO */
 | ||||||
|  | +#define CONFIG_LTQ_SPL_CONSOLE			/* Enable SPL console */
 | ||||||
|  | +
 | ||||||
| +#define CONFIG_SPL_SPI_BUS		0
 | +#define CONFIG_SPL_SPI_BUS		0
 | ||||||
| +#define CONFIG_SPL_SPI_CS		4
 | +#define CONFIG_SPL_SPI_CS		4
 | ||||||
| +#define CONFIG_SPL_SPI_MAX_HZ		25000000
 | +#define CONFIG_SPL_SPI_MAX_HZ		25000000
 | ||||||
| +#define CONFIG_SPL_SPI_MODE		0
 | +#define CONFIG_SPL_SPI_MODE		0
 | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_LTQ_SPL_COMP_LZO
 |  | ||||||
| +#define CONFIG_LTQ_SPL_CONSOLE
 |  | ||||||
| +
 |  | ||||||
| +#define CONFIG_SYS_DRAM_PROBE
 | +#define CONFIG_SYS_DRAM_PROBE
 | ||||||
| +
 | +
 | ||||||
| +/* Environment */
 | +/* Environment */
 | ||||||
| @@ -329,22 +341,26 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#endif
 | +#endif
 | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_ENV_SIZE			(8 * 1024)
 | +#define CONFIG_ENV_SIZE			(8 * 1024)
 | ||||||
| +
 |  | ||||||
| +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR
 | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR
 | ||||||
| +
 | +
 | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_EVA)
 | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80100000
 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT
 | ||||||
|  | +#endif
 | ||||||
|  | +
 | ||||||
| +/* Console */
 | +/* Console */
 | ||||||
| +#define CONFIG_LTQ_ADVANCED_CONSOLE
 | +#define CONFIG_LTQ_ADVANCED_CONSOLE
 | ||||||
| +#define CONFIG_BAUDRATE			115200
 | +#define CONFIG_BAUDRATE			115200
 | ||||||
| +#define CONFIG_CONSOLE_ASC		1
 | +#define CONFIG_CONSOLE_ASC		1
 | ||||||
| +#define CONFIG_CONSOLE_DEV		"ttyLTQ1"
 | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1"
 | ||||||
| +
 | +
 | ||||||
| +/* Commands */
 |  | ||||||
| +#define CONFIG_CMD_PING
 |  | ||||||
| +
 |  | ||||||
| +/* Pull in default board configs for Lantiq XWAY VRX200 */
 | +/* Pull in default board configs for Lantiq XWAY VRX200 */
 | ||||||
| +#include <asm/lantiq/config.h>
 | +#include <asm/lantiq/config.h>
 | ||||||
| +#include <asm/arch/config.h>
 | +#include <asm/arch/config.h>
 | ||||||
| +
 | +
 | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */
 | ||||||
|  | +#include "openwrt-lantiq-common.h"
 | ||||||
|  | +
 | ||||||
| +#define CONFIG_ENV_UPDATE_UBOOT_SF					\
 | +#define CONFIG_ENV_UPDATE_UBOOT_SF					\
 | ||||||
| +	"update-uboot-sf=run load-uboot-sfspl-lzo write-uboot-sf\0"
 | +	"update-uboot-sf=run load-uboot-sfspl-lzo write-uboot-sf\0"
 | ||||||
| +
 | +
 | ||||||
| @@ -353,3 +369,6 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +	CONFIG_ENV_UPDATE_UBOOT_SF
 | +	CONFIG_ENV_UPDATE_UBOOT_SF
 | ||||||
| +
 | +
 | ||||||
| +#endif /* __CONFIG_H */
 | +#endif /* __CONFIG_H */
 | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.2 | ||||||
|  | 
 | ||||||
| @@ -1,20 +1,21 @@ | |||||||
| From 66b56aa3a4810f10e0b0c77bb87279a8d64b566b Mon Sep 17 00:00:00 2001 | From 9e9dec563e4d061e7b34d2d59a89eb05c60f43a7 Mon Sep 17 00:00:00 2001 | ||||||
| From: Luka Perkov <luka@openwrt.org> | From: Luka Perkov <luka@openwrt.org> | ||||||
| Date: Fri, 16 Dec 2011 11:55:45 +0100 | Date: Sat, 2 Mar 2013 23:34:00 +0100 | ||||||
| Subject: MIPS: add board support for Gigaset SX76X | Subject: MIPS: add board support for Gigaset SX76X | ||||||
| 
 | 
 | ||||||
| Signed-off-by: Luka Perkov <luka@openwrt.org> | Signed-off-by: Luka Perkov <luka@openwrt.org> | ||||||
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
| 
 | 
 | ||||||
|  | diff --git a/board/gigaset/sx76x/Makefile b/board/gigaset/sx76x/Makefile
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/gigaset/sx76x/Makefile
 | +++ b/board/gigaset/sx76x/Makefile
 | ||||||
| @@ -0,0 +1,29 @@
 | @@ -0,0 +1,27 @@
 | ||||||
| +#
 |  | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 | +#
 | ||||||
| +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
 | ||||||
| +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | +#
 | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| +#
 | +#
 | ||||||
| +
 | +
 | ||||||
| +include $(TOPDIR)/config.mk
 | +include $(TOPDIR)/config.mk
 | ||||||
| @@ -38,27 +39,31 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +sinclude $(obj).depend
 | +sinclude $(obj).depend
 | ||||||
| +
 | +
 | ||||||
| +#########################################################################
 | +#########################################################################
 | ||||||
|  | diff --git a/board/gigaset/sx76x/config.mk b/board/gigaset/sx76x/config.mk
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d8953b
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/gigaset/sx76x/config.mk
 | +++ b/board/gigaset/sx76x/config.mk
 | ||||||
| @@ -0,0 +1,8 @@
 | @@ -0,0 +1,7 @@
 | ||||||
| +#
 | +#
 | ||||||
| +# This file is released under the terms of GPL v2 and any later version.
 | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 | ||||||
| +# See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| +#
 | +#
 | ||||||
| +# Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com
 | +# SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| +#
 | +#
 | ||||||
| +
 | +
 | ||||||
| +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR)
 | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR)
 | ||||||
|  | diff --git a/board/gigaset/sx76x/ddr_settings.h b/board/gigaset/sx76x/ddr_settings.h
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..13cd81b
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/gigaset/sx76x/ddr_settings.h
 | +++ b/board/gigaset/sx76x/ddr_settings.h
 | ||||||
| @@ -0,0 +1,56 @@
 | @@ -0,0 +1,55 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org>
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 | + *
 | ||||||
| + * generated with lantiq_ram_extract_magic.awk
 | + * This file has been generated with lantiq_ram_extract_magic.awk script.
 | ||||||
| + *
 | + *
 | ||||||
| + * Copyright (C) 2011 Luka Perkov <luka@openwrt.org>
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#define MC_DC00_VALUE	0x1B1B
 | +#define MC_DC00_VALUE	0x1B1B
 | ||||||
| @@ -108,14 +113,16 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define MC_DC44_VALUE	0x0
 | +#define MC_DC44_VALUE	0x0
 | ||||||
| +#define MC_DC45_VALUE	0x500
 | +#define MC_DC45_VALUE	0x500
 | ||||||
| +#define MC_DC46_VALUE	0x0
 | +#define MC_DC46_VALUE	0x0
 | ||||||
|  | diff --git a/board/gigaset/sx76x/sx76x.c b/board/gigaset/sx76x/sx76x.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..71996a1
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/board/gigaset/sx76x/sx76x.c
 | +++ b/board/gigaset/sx76x/sx76x.c
 | ||||||
| @@ -0,0 +1,66 @@
 | @@ -0,0 +1,65 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 |  | ||||||
| + * Copyright (C) 2011 Luka Perkov <luka@openwrt.org>
 | + * Copyright (C) 2011 Luka Perkov <luka@openwrt.org>
 | ||||||
|  | + *
 | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#include <common.h>
 | +#include <common.h>
 | ||||||
| @@ -177,32 +184,36 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +
 | +
 | ||||||
| +	return switch_device_register(&adm6996i_dev);
 | +	return switch_device_register(&adm6996i_dev);
 | ||||||
| +}
 | +}
 | ||||||
|  | diff --git a/boards.cfg b/boards.cfg
 | ||||||
|  | index ea5c4f9..2163cdb 100644
 | ||||||
| --- a/boards.cfg
 | --- a/boards.cfg
 | ||||||
| +++ b/boards.cfg
 | +++ b/boards.cfg
 | ||||||
| @@ -447,6 +447,8 @@ pb1000                       mips
 | @@ -510,6 +510,8 @@ Active  mips        mips32         danube      arcadyan        arv7518pw
 | ||||||
|  easy50712_nor                mips        mips32      easy50712           lantiq         danube      easy50712:SYS_BOOT_NOR |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_ram                        arv7518pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  easy50712_norspl             mips        mips32      easy50712           lantiq         danube      easy50712:SYS_BOOT_NORSPL |  Active  mips        mips32         danube      audiocodes      acmp252             acmp252_nor                          acmp252:SYS_BOOT_NOR                                                                                                              Daniel Golle <daniel.golle@gmail.com> | ||||||
|  easy50712_ram                mips        mips32      easy50712           lantiq         danube      easy50712:SYS_BOOT_RAM |  Active  mips        mips32         danube      audiocodes      acmp252             acmp252_ram                          acmp252:SYS_BOOT_RAM                                                                                                              Daniel Golle <daniel.golle@gmail.com> | ||||||
| +gigasx76x_nor                mips        mips32      sx76x               gigaset        danube      sx76x:SYS_BOOT_NOR
 | +Active  mips        mips32         danube      gigaset         sx76x               gigasx76x_nor                        sx76x:SYS_BOOT_NOR                                                                                                                Luka Perkov <luka@openwrt.org>
 | ||||||
| +gigasx76x_ram                mips        mips32      sx76x               gigaset        danube      sx76x:SYS_BOOT_RAM
 | +Active  mips        mips32         danube      gigaset         sx76x               gigasx76x_ram                        sx76x:SYS_BOOT_RAM                                                                                                                Luka Perkov <luka@openwrt.org>
 | ||||||
|  incaip                       mips        mips32      incaip              -              incaip |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_nor                        easy50712:SYS_BOOT_NOR                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  incaip_100MHz                mips        mips32      incaip              -              incaip      incaip:CPU_CLOCK_RATE=100000000 |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_norspl                     easy50712:SYS_BOOT_NORSPL                                                                                                         Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  incaip_133MHz                mips        mips32      incaip              -              incaip      incaip:CPU_CLOCK_RATE=133000000 |  Active  mips        mips32         danube      lantiq          easy50712           easy50712_ram                        easy50712:SYS_BOOT_RAM                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | diff --git a/include/configs/sx76x.h b/include/configs/sx76x.h
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..236851e
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/include/configs/sx76x.h
 | +++ b/include/configs/sx76x.h
 | ||||||
| @@ -0,0 +1,71 @@
 | @@ -0,0 +1,59 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * This file is released under the terms of GPL v2 and any later version.
 | + * Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org>
 | ||||||
| + * See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| + *
 | + *
 | ||||||
| + * Copyright (C) 2011 Luka Perkov <luka@openwrt.org>
 | + * SPDX-License-Identifier:	GPL-2.0+
 | ||||||
| + */
 | + */
 | ||||||
| +
 | +
 | ||||||
| +#ifndef __CONFIG_H
 | +#ifndef __CONFIG_H
 | ||||||
| +#define __CONFIG_H
 | +#define __CONFIG_H
 | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_MACH_TYPE	"GIGASX76X"
 | +#define CONFIG_MACH_TYPE	"GIGASX76X"
 | ||||||
| +#define CONFIG_IDENT_STRING	" sx76x"
 | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE
 | ||||||
| +#define CONFIG_BOARD_NAME	"Gigaset sx76x"
 | +#define CONFIG_BOARD_NAME	"Gigaset sx76x"
 | ||||||
| +
 | +
 | ||||||
| +/* Configure SoC */
 | +/* Configure SoC */
 | ||||||
| @@ -221,13 +232,12 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define CONFIG_ENV_IS_IN_FLASH
 | +#define CONFIG_ENV_IS_IN_FLASH
 | ||||||
| +#define CONFIG_ENV_OVERWRITE
 | +#define CONFIG_ENV_OVERWRITE
 | ||||||
| +#define CONFIG_ENV_OFFSET		(256 * 1024)
 | +#define CONFIG_ENV_OFFSET		(256 * 1024)
 | ||||||
| +#define CONFIG_ENV_SIZE			(8 * 1024)
 |  | ||||||
| +#define CONFIG_ENV_SECT_SIZE		(64 * 1024)
 | +#define CONFIG_ENV_SECT_SIZE		(64 * 1024)
 | ||||||
| +#else
 | +#else
 | ||||||
| +#define CONFIG_ENV_IS_NOWHERE
 | +#define CONFIG_ENV_IS_NOWHERE
 | ||||||
| +#define CONFIG_ENV_SIZE			(2 * 1024)
 |  | ||||||
| +#endif
 | +#endif
 | ||||||
| +
 | +
 | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024)
 | ||||||
| +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR
 | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR
 | ||||||
| +
 | +
 | ||||||
| +/* Console */
 | +/* Console */
 | ||||||
| @@ -236,22 +246,12 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +#define CONFIG_CONSOLE_ASC		1
 | +#define CONFIG_CONSOLE_ASC		1
 | ||||||
| +#define CONFIG_CONSOLE_DEV		"ttyLTQ1"
 | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1"
 | ||||||
| +
 | +
 | ||||||
| +/* Commands */
 |  | ||||||
| +#define CONFIG_CMD_PING
 |  | ||||||
| +
 |  | ||||||
| +/* Pull in default board configs for Lantiq XWAY Danube */
 | +/* Pull in default board configs for Lantiq XWAY Danube */
 | ||||||
| +#include <asm/lantiq/config.h>
 | +#include <asm/lantiq/config.h>
 | ||||||
| +#include <asm/arch/config.h>
 | +#include <asm/arch/config.h>
 | ||||||
| +
 | +
 | ||||||
| +/* Compression */
 | +/* Pull in default OpenWrt configs for Lantiq SoC */
 | ||||||
| +#define CONFIG_LZMA
 | +#include "openwrt-lantiq-common.h"
 | ||||||
| +
 |  | ||||||
| +/* Auto boot */
 |  | ||||||
| +#define CONFIG_BOOTDELAY		2
 |  | ||||||
| +
 |  | ||||||
| +/* Environment configuration */
 |  | ||||||
| +#define CONFIG_BOOTCOMMAND			\
 |  | ||||||
| +	"run addeth; bootm ${kernel_addr}"
 |  | ||||||
| +
 | +
 | ||||||
| +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\
 | +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\
 | ||||||
| +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0"
 | +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0"
 | ||||||
| @@ -262,3 +262,6 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | |||||||
| +	"kernel_addr=0xB0040000\0"
 | +	"kernel_addr=0xB0040000\0"
 | ||||||
| +
 | +
 | ||||||
| +#endif /* __CONFIG_H */
 | +#endif /* __CONFIG_H */
 | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.2 | ||||||
|  | 
 | ||||||
| @@ -0,0 +1,327 @@ | |||||||
|  | From 0597056e2ba19ea783ef5c3d14c75c4722740e48 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Luka Perkov <luka@openwrt.org> | ||||||
|  | Date: Sun, 10 Mar 2013 17:59:56 +0100 | ||||||
|  | Subject: MIPS: add board support for ZTE ZXHN H367N | ||||||
|  |  | ||||||
|  | Signed-off-by: Luka Perkov <luka@openwrt.org> | ||||||
|  |  | ||||||
|  | diff --git a/board/zte/zxhnh367n/Makefile b/board/zte/zxhnh367n/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zte/zxhnh367n/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/zte/zxhnh367n/config.mk b/board/zte/zxhnh367n/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d33739 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zte/zxhnh367n/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/zte/zxhnh367n/ddr_settings.h b/board/zte/zxhnh367n/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..b3f81de | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zte/zxhnh367n/ddr_settings.h | ||||||
|  | @@ -0,0 +1,70 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * The values have been extracted from original ZTE U-Boot. | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define	MC_CCR00_VALUE	0x101 | ||||||
|  | +#define	MC_CCR01_VALUE	0x1000101 | ||||||
|  | +#define	MC_CCR02_VALUE	0x1010000 | ||||||
|  | +#define	MC_CCR03_VALUE	0x100 | ||||||
|  | +#define	MC_CCR04_VALUE	0x1000000 | ||||||
|  | +#define	MC_CCR05_VALUE	0x1000101 | ||||||
|  | +#define	MC_CCR06_VALUE	0x1000100 | ||||||
|  | +#define	MC_CCR07_VALUE	0x1010000 | ||||||
|  | +#define	MC_CCR08_VALUE	0x1000101 | ||||||
|  | +#define	MC_CCR09_VALUE	0x0 | ||||||
|  | +#define	MC_CCR10_VALUE	0x2000100 | ||||||
|  | +#define	MC_CCR11_VALUE	0x2000401 | ||||||
|  | +#define	MC_CCR12_VALUE	0x30000 | ||||||
|  | +#define	MC_CCR13_VALUE	0x202 | ||||||
|  | +#define	MC_CCR14_VALUE	0x7080A0F | ||||||
|  | +#define	MC_CCR15_VALUE	0x2040F | ||||||
|  | +#define	MC_CCR16_VALUE	0x40000 | ||||||
|  | +#define	MC_CCR17_VALUE	0x70102 | ||||||
|  | +#define	MC_CCR18_VALUE	0x4020002 | ||||||
|  | +#define	MC_CCR19_VALUE	0x30302 | ||||||
|  | +#define	MC_CCR20_VALUE	0x8000700 | ||||||
|  | +#define	MC_CCR21_VALUE	0x40F020A | ||||||
|  | +#define	MC_CCR22_VALUE	0x0 | ||||||
|  | +#define	MC_CCR23_VALUE	0xC020000 | ||||||
|  | +#define	MC_CCR24_VALUE	0x4401B04 | ||||||
|  | +#define	MC_CCR25_VALUE	0x0 | ||||||
|  | +#define	MC_CCR26_VALUE	0x0 | ||||||
|  | +#define	MC_CCR27_VALUE	0x6420000 | ||||||
|  | +#define	MC_CCR28_VALUE	0x0 | ||||||
|  | +#define	MC_CCR29_VALUE	0x0 | ||||||
|  | +#define	MC_CCR30_VALUE	0x798 | ||||||
|  | +#define	MC_CCR31_VALUE	0x0 | ||||||
|  | +#define	MC_CCR32_VALUE	0x0 | ||||||
|  | +#define	MC_CCR33_VALUE	0x650000 | ||||||
|  | +#define	MC_CCR34_VALUE	0x200C8 | ||||||
|  | +#define	MC_CCR35_VALUE	0x1D445D | ||||||
|  | +#define	MC_CCR36_VALUE	0xC8 | ||||||
|  | +#define	MC_CCR37_VALUE	0xC351 | ||||||
|  | +#define	MC_CCR38_VALUE	0x0 | ||||||
|  | +#define	MC_CCR39_VALUE	0x141F04 | ||||||
|  | +#define	MC_CCR40_VALUE	0x142704 | ||||||
|  | +#define	MC_CCR41_VALUE	0x141B42 | ||||||
|  | +#define	MC_CCR42_VALUE	0x141B42 | ||||||
|  | +#define	MC_CCR43_VALUE	0x566504 | ||||||
|  | +#define	MC_CCR44_VALUE	0x566504 | ||||||
|  | +#define	MC_CCR45_VALUE	0x565F17 | ||||||
|  | +#define	MC_CCR46_VALUE	0x565F17 | ||||||
|  | +#define	MC_CCR47_VALUE	0x0 | ||||||
|  | +#define	MC_CCR48_VALUE	0x0 | ||||||
|  | +#define	MC_CCR49_VALUE	0x0 | ||||||
|  | +#define	MC_CCR50_VALUE	0x0 | ||||||
|  | +#define	MC_CCR51_VALUE	0x0 | ||||||
|  | +#define	MC_CCR52_VALUE	0x133 | ||||||
|  | +#define	MC_CCR53_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR54_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR55_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR56_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR57_VALUE	0x7800301 | ||||||
|  | +#define	MC_CCR58_VALUE	0x7800301 | ||||||
|  | +#define	MC_CCR59_VALUE	0x7800301 | ||||||
|  | +#define	MC_CCR60_VALUE	0x7800301 | ||||||
|  | +#define	MC_CCR61_VALUE	0x4 | ||||||
|  | diff --git a/board/zte/zxhnh367n/zxhnh367n.c b/board/zte/zxhnh367n/zxhnh367n.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..f64f105 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zte/zxhnh367n/zxhnh367n.c | ||||||
|  | @@ -0,0 +1,97 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | +#include <asm/lantiq/cpu.h> | ||||||
|  | +#include <asm/arch/gphy.h> | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SPL_BUILD) | ||||||
|  | +#define do_gpio_init	1 | ||||||
|  | +#define do_pll_init	1 | ||||||
|  | +#define do_dcdc_init	0 | ||||||
|  | +#elif defined(CONFIG_SYS_BOOT_RAM) | ||||||
|  | +#define do_gpio_init	1 | ||||||
|  | +#define do_pll_init	0 | ||||||
|  | +#define do_dcdc_init	1 | ||||||
|  | +#else | ||||||
|  | +#define do_gpio_init	0 | ||||||
|  | +#define do_pll_init	0 | ||||||
|  | +#define do_dcdc_init	1 | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +static void gpio_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* EBU.FL_CS1 as output for NAND CE */ | ||||||
|  | +	gpio_set_altfunc(23, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* EBU.FL_A23 as output for NAND CLE */ | ||||||
|  | +	gpio_set_altfunc(24, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* EBU.FL_A24 as output for NAND ALE */ | ||||||
|  | +	gpio_set_altfunc(13, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* GPIO 3.0 as input for NAND Ready Busy */ | ||||||
|  | +	gpio_set_altfunc(48, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_IN); | ||||||
|  | +	/* GPIO 3.1 as output for NAND Read */ | ||||||
|  | +	gpio_set_altfunc(49, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	if (do_gpio_init) | ||||||
|  | +		gpio_init(); | ||||||
|  | + | ||||||
|  | +	if (do_pll_init) | ||||||
|  | +		ltq_pll_init(); | ||||||
|  | + | ||||||
|  | +	if (do_dcdc_init) | ||||||
|  | +		ltq_dcdc_init(0x7F); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* GMAC0: external Lantiq PEF7071 10/100/1000 PHY for WANoE port */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_RGMII }, | ||||||
|  | +	/* GMAC1: unused */ | ||||||
|  | +	{ 1, 0x0, LTQ_ETH_PORT_NONE, PHY_INTERFACE_MODE_NONE }, | ||||||
|  | +	/* GMAC2: internal GPHY0 with 10/100 firmware for LAN port 1 */ | ||||||
|  | +	{ 2, 0x11, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_MII }, | ||||||
|  | +	/* GMAC3: internal GPHY0 with 10/100 firmware for LAN port 2 */ | ||||||
|  | +	{ 3, 0x12, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_MII }, | ||||||
|  | +	/* GMAC4: internal GPHY1 with 10/100 firmware for LAN port 3 */ | ||||||
|  | +	{ 4, 0x13, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_MII }, | ||||||
|  | +	/* GMAC5: internal GPHY1 with 10/100 firmware for LAN port 4 */ | ||||||
|  | +	{ 5, 0x14, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_MII }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t * bis) | ||||||
|  | +{ | ||||||
|  | +	const enum ltq_gphy_clk clk = LTQ_GPHY_CLK_25MHZ_PLL0; | ||||||
|  | +	const ulong fw_addr = 0x80FF0000; | ||||||
|  | + | ||||||
|  | +	ltq_gphy_phy22f_a2x_load(fw_addr); | ||||||
|  | + | ||||||
|  | +	ltq_cgu_gphy_clk_src(clk); | ||||||
|  | + | ||||||
|  | +	ltq_rcu_gphy_boot(0, fw_addr); | ||||||
|  | +	ltq_rcu_gphy_boot(1, fw_addr); | ||||||
|  | + | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index 2163cdb..4b18a26 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -527,6 +527,9 @@ Active  mips        mips32         vrx200      lantiq          easy80920 | ||||||
|  |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_norspl                     easy80920:SYS_BOOT_NORSPL                                                                                                         Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_ram                        easy80920:SYS_BOOT_RAM                                                                                                            Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         vrx200      lantiq          easy80920           easy80920_sfspl                      easy80920:SYS_BOOT_SFSPL                                                                                                          Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | +Active  mips        mips32         vrx200      zte             zxhnh367n           zxhnh367n_nandspl                    zxhnh367n:SYS_BOOT_NANDSPL                                                                                                        Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         vrx200      zte             zxhnh367n           zxhnh367n_ram                        zxhnh367n:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         vrx200      zte             zxhnh367n           zxhnh367n_zte                        zxhnh367n:SYS_BOOT_ZTE                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips64         -           -               qemu-mips           qemu_mips64                          qemu-mips64:SYS_BIG_ENDIAN                                                                                                        - | ||||||
|  |  Active  mips        mips64         -           -               qemu-mips           qemu_mips64el                        qemu-mips64:SYS_LITTLE_ENDIAN                                                                                                     - | ||||||
|  |  Active  nds32       n1213          ag101       AndesTech       adp-ag101           adp-ag101                            -                                                                                                                                 Andes <uboot@andestech.com> | ||||||
|  | diff --git a/include/configs/zxhnh367n.h b/include/configs/zxhnh367n.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..55d2e2a | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/zxhnh367n.h | ||||||
|  | @@ -0,0 +1,72 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"ZXHN H367N" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"ZTE ZXHN H367N" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART			/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET		/* Enable ethernet */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NAND_FLASH		/* Have a  NAND flash */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_SPL_NAND_FLASH	/* Build NAND flash SPL */ | ||||||
|  | +#define CONFIG_LTQ_SPL_COMP_LZO			/* Compress SPL with LZO */ | ||||||
|  | +#define CONFIG_LTQ_SPL_CONSOLE			/* Enable SPL console */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_SYS_NAND_PAGE_COUNT	128 | ||||||
|  | +#define CONFIG_SYS_NAND_PAGE_SIZE	2048 | ||||||
|  | +#define CONFIG_SYS_NAND_OOBSIZE		64 | ||||||
|  | +#define CONFIG_SYS_NAND_BLOCK_SIZE	(256 * 1024) | ||||||
|  | +#define CONFIG_SYS_NAND_BAD_BLOCK_POS	NAND_LARGE_BADBLOCK_POS | ||||||
|  | +#define CONFIG_SYS_NAND_U_BOOT_OFFS	0x4000 | ||||||
|  | + | ||||||
|  | +#define CONFIG_SYS_DRAM_PROBE | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_NANDSPL) | ||||||
|  | +#define CONFIG_ENV_IS_IN_NAND | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(256 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(256 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_ZTE) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80800000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY VRX200 */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NAND					\ | ||||||
|  | +	"update-uboot-nand=run load-uboot-nandspl-lzo write-uboot-nand\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NAND | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,271 @@ | |||||||
|  | From 2473526cf879ead429c6aa1fb7fb77ed3407baaa Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sun, 9 Dec 2012 17:35:09 +0100 | ||||||
|  | Subject: MIPS: add board support for ZTE ZXV10 H201L | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/board/zte/zxv10h201l/Makefile b/board/zte/zxv10h201l/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zte/zxv10h201l/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/zte/zxv10h201l/config.mk b/board/zte/zxv10h201l/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d33739 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zte/zxv10h201l/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/zte/zxv10h201l/ddr_settings.h b/board/zte/zxv10h201l/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..8814957 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zte/zxv10h201l/ddr_settings.h | ||||||
|  | @@ -0,0 +1,55 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * The values have been extracted from original ZTE U-Boot. | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define MC_DC00_VALUE	0x1B1B | ||||||
|  | +#define MC_DC01_VALUE	0x0 | ||||||
|  | +#define MC_DC02_VALUE	0x0 | ||||||
|  | +#define MC_DC03_VALUE	0x0 | ||||||
|  | +#define MC_DC04_VALUE	0x0 | ||||||
|  | +#define MC_DC05_VALUE	0x200 | ||||||
|  | +#define MC_DC06_VALUE	0x307 | ||||||
|  | +#define MC_DC07_VALUE	0x303 | ||||||
|  | +#define MC_DC08_VALUE	0x103 | ||||||
|  | +#define MC_DC09_VALUE	0x80B | ||||||
|  | +#define MC_DC10_VALUE	0x203 | ||||||
|  | +#define MC_DC11_VALUE	0xE02 | ||||||
|  | +#define MC_DC12_VALUE	0x2C8 | ||||||
|  | +#define MC_DC13_VALUE	0x1 | ||||||
|  | +#define MC_DC14_VALUE	0x0 | ||||||
|  | +#define MC_DC15_VALUE	0x100 | ||||||
|  | +#define MC_DC16_VALUE	0xC800 | ||||||
|  | +#define MC_DC17_VALUE	0xF | ||||||
|  | +#define MC_DC18_VALUE	0x301 | ||||||
|  | +#define MC_DC19_VALUE	0x200 | ||||||
|  | +#define MC_DC20_VALUE	0xA04 | ||||||
|  | +#define MC_DC21_VALUE	0x1600 | ||||||
|  | +#define MC_DC22_VALUE	0x1616 | ||||||
|  | +#define MC_DC23_VALUE	0x0 | ||||||
|  | +#define MC_DC24_VALUE	0x5D | ||||||
|  | +#define MC_DC25_VALUE	0x0 | ||||||
|  | +#define MC_DC26_VALUE	0x0 | ||||||
|  | +#define MC_DC27_VALUE	0x0 | ||||||
|  | +#define MC_DC28_VALUE	0x5FB | ||||||
|  | +#define MC_DC29_VALUE	0x35DF | ||||||
|  | +#define MC_DC30_VALUE	0x99E9 | ||||||
|  | +#define MC_DC31_VALUE	0x0 | ||||||
|  | +#define MC_DC32_VALUE	0x0 | ||||||
|  | +#define MC_DC33_VALUE	0x0 | ||||||
|  | +#define MC_DC34_VALUE	0x0 | ||||||
|  | +#define MC_DC35_VALUE	0x0 | ||||||
|  | +#define MC_DC36_VALUE	0x0 | ||||||
|  | +#define MC_DC37_VALUE	0x0 | ||||||
|  | +#define MC_DC38_VALUE	0x0 | ||||||
|  | +#define MC_DC39_VALUE	0x0 | ||||||
|  | +#define MC_DC40_VALUE	0x0 | ||||||
|  | +#define MC_DC41_VALUE	0x0 | ||||||
|  | +#define MC_DC42_VALUE	0x0 | ||||||
|  | +#define MC_DC43_VALUE	0x0 | ||||||
|  | +#define MC_DC44_VALUE	0x0 | ||||||
|  | +#define MC_DC45_VALUE	0x600 | ||||||
|  | +#define MC_DC46_VALUE	0x0 | ||||||
|  | diff --git a/board/zte/zxv10h201l/zxv10h201l.c b/board/zte/zxv10h201l/zxv10h201l.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..8218a9d | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zte/zxv10h201l/zxv10h201l.c | ||||||
|  | @@ -0,0 +1,51 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/reset.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* MAC0: REALTEK RTL8306 switch */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_SWITCH, PHY_INTERFACE_MODE_RMII }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t *bis) | ||||||
|  | +{ | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct switch_device rtl8306_dev = { | ||||||
|  | +	.name = "rtl8306", | ||||||
|  | +	.cpu_port = 5, | ||||||
|  | +	.port_mask = 0xF, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_switch_init(void) | ||||||
|  | +{ | ||||||
|  | +	return switch_device_register(&rtl8306_dev); | ||||||
|  | +} | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index 4b18a26..4362856 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -496,6 +496,9 @@ Active  mips        mips32         -           micronas        vct | ||||||
|  |  Active  mips        mips32         -           micronas        vct                 vct_premium_onenand                  vct:VCT_PREMIUM,VCT_ONENAND                                                                                                       - | ||||||
|  |  Active  mips        mips32         -           micronas        vct                 vct_premium_onenand_small            vct:VCT_PREMIUM,VCT_ONENAND,VCT_SMALL_IMAGE                                                                                       - | ||||||
|  |  Active  mips        mips32         -           micronas        vct                 vct_premium_small                    vct:VCT_PREMIUM,VCT_SMALL_IMAGE                                                                                                   - | ||||||
|  | +Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_nor                       zxv10h201l:SYS_BOOT_NOR                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_ram                       zxv10h201l:SYS_BOOT_RAM                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_zte                       zxv10h201l:SYS_BOOT_ZTE                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         au1x00      -               dbau1x00            dbau1000                             dbau1x00:DBAU1000                                                                                                                 Thomas Lange <thomas@corelatus.se> | ||||||
|  |  Active  mips        mips32         au1x00      -               dbau1x00            dbau1100                             dbau1x00:DBAU1100                                                                                                                 Thomas Lange <thomas@corelatus.se> | ||||||
|  |  Active  mips        mips32         au1x00      -               dbau1x00            dbau1500                             dbau1x00:DBAU1500                                                                                                                 Thomas Lange <thomas@corelatus.se> | ||||||
|  | diff --git a/include/configs/zxv10h201l.h b/include/configs/zxv10h201l.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..bfe116d | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/zxv10h201l.h | ||||||
|  | @@ -0,0 +1,77 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2011 Daniel Schwierzeck, daniel.schwierzeck@googlemail.com | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"ZXV10 H201L" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"ZTE ZXV10 H201L" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART			/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET		/* Enable ethernet */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NOR_FLASH		/* Have a parallel NOR flash */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_SPL_NOR_FLASH	/* Build NOR flash SPL */ | ||||||
|  | +#define CONFIG_LTQ_SPL_COMP_LZO			/* Compress SPL with LZO */ | ||||||
|  | +#define CONFIG_LTQ_SPL_CONSOLE			/* Enable SPL console */ | ||||||
|  | + | ||||||
|  | +/* Switch devices */ | ||||||
|  | +#define CONFIG_SWITCH_MULTI | ||||||
|  | +#define CONFIG_SWITCH_RTL8306 | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_NOR) | ||||||
|  | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(256 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(64 * 1024) | ||||||
|  | +#elif defined(CONFIG_SYS_BOOT_NORSPL) | ||||||
|  | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(128 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(64 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_ZTE) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80800000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_ZTE) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80800000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NOR \ | ||||||
|  | +	"update-uboot-nor=run load-uboot-norspl-lzo write-uboot-nor\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NOR | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,324 @@ | |||||||
|  | From a18f994f373db4467a4680f83ead997c8122908e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Wed, 22 May 2013 17:48:08 +0200 | ||||||
|  | Subject: MIPS: add board support for ZyXEL P-661HNU-Fx | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/board/zyxel/p661hnufx/Makefile b/board/zyxel/p661hnufx/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p661hnufx/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/zyxel/p661hnufx/config.mk b/board/zyxel/p661hnufx/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d33739 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p661hnufx/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/zyxel/p661hnufx/ddr_settings.h b/board/zyxel/p661hnufx/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..83693b8 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p661hnufx/ddr_settings.h | ||||||
|  | @@ -0,0 +1,55 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * The values have been extracted from original ZyXEL U-Boot. | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define MC_DC00_VALUE	0x1B1B | ||||||
|  | +#define MC_DC01_VALUE	0x0 | ||||||
|  | +#define MC_DC02_VALUE	0x0 | ||||||
|  | +#define MC_DC03_VALUE	0x0 | ||||||
|  | +#define MC_DC04_VALUE	0x0 | ||||||
|  | +#define MC_DC05_VALUE	0x200 | ||||||
|  | +#define MC_DC06_VALUE	0x307 | ||||||
|  | +#define MC_DC07_VALUE	0x303 | ||||||
|  | +#define MC_DC08_VALUE	0x103 | ||||||
|  | +#define MC_DC09_VALUE	0x80B | ||||||
|  | +#define MC_DC10_VALUE	0x203 | ||||||
|  | +#define MC_DC11_VALUE	0xE02 | ||||||
|  | +#define MC_DC12_VALUE	0x2C8 | ||||||
|  | +#define MC_DC13_VALUE	0x1 | ||||||
|  | +#define MC_DC14_VALUE	0x0 | ||||||
|  | +#define MC_DC15_VALUE	0x100 | ||||||
|  | +#define MC_DC16_VALUE	0xC800 | ||||||
|  | +#define MC_DC17_VALUE	0xF | ||||||
|  | +#define MC_DC18_VALUE	0x301 | ||||||
|  | +#define MC_DC19_VALUE	0x200 | ||||||
|  | +#define MC_DC20_VALUE	0xA04 | ||||||
|  | +#define MC_DC21_VALUE	0x1600 | ||||||
|  | +#define MC_DC22_VALUE	0x1616 | ||||||
|  | +#define MC_DC23_VALUE	0x0 | ||||||
|  | +#define MC_DC24_VALUE	0x5D | ||||||
|  | +#define MC_DC25_VALUE	0x0 | ||||||
|  | +#define MC_DC26_VALUE	0x0 | ||||||
|  | +#define MC_DC27_VALUE	0x0 | ||||||
|  | +#define MC_DC28_VALUE	0x5FB | ||||||
|  | +#define MC_DC29_VALUE	0x35DF | ||||||
|  | +#define MC_DC30_VALUE	0x99E9 | ||||||
|  | +#define MC_DC31_VALUE	0x0 | ||||||
|  | +#define MC_DC32_VALUE	0x0 | ||||||
|  | +#define MC_DC33_VALUE	0x0 | ||||||
|  | +#define MC_DC34_VALUE	0x0 | ||||||
|  | +#define MC_DC35_VALUE	0x0 | ||||||
|  | +#define MC_DC36_VALUE	0x0 | ||||||
|  | +#define MC_DC37_VALUE	0x0 | ||||||
|  | +#define MC_DC38_VALUE	0x0 | ||||||
|  | +#define MC_DC39_VALUE	0x0 | ||||||
|  | +#define MC_DC40_VALUE	0x0 | ||||||
|  | +#define MC_DC41_VALUE	0x0 | ||||||
|  | +#define MC_DC42_VALUE	0x0 | ||||||
|  | +#define MC_DC43_VALUE	0x0 | ||||||
|  | +#define MC_DC44_VALUE	0x0 | ||||||
|  | +#define MC_DC45_VALUE	0x600 | ||||||
|  | +#define MC_DC46_VALUE	0x0 | ||||||
|  | diff --git a/board/zyxel/p661hnufx/p661hnufx.c b/board/zyxel/p661hnufx/p661hnufx.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..dfaca51 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p661hnufx/p661hnufx.c | ||||||
|  | @@ -0,0 +1,102 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <spi.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/reset.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | + | ||||||
|  | +static void gpio_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* SPI CS 0.4 to serial flash */ | ||||||
|  | +	gpio_direction_output(10, 1); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	gpio_init(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* MAC0: Lantiq Tantos switch */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_SWITCH, PHY_INTERFACE_MODE_RMII }, | ||||||
|  | +	/* MAC1: unused */ | ||||||
|  | +	{ 1, 0x0, LTQ_ETH_PORT_NONE, PHY_INTERFACE_MODE_NONE }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t *bis) | ||||||
|  | +{ | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct switch_device psb697x_dev = { | ||||||
|  | +	.name = "psb697x", | ||||||
|  | +	.cpu_port = 5, | ||||||
|  | +	.port_mask = 0xF, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_switch_init(void) | ||||||
|  | +{ | ||||||
|  | +	printf("%s\n", __func__); | ||||||
|  | + | ||||||
|  | +#if 0 | ||||||
|  | +	ltq_reset_once(LTQ_RESET_HARD, 200000); | ||||||
|  | +	__udelay(50000); | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +	return switch_device_register(&psb697x_dev); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int spi_cs_is_valid(unsigned int bus, unsigned int cs) | ||||||
|  | +{ | ||||||
|  | +	if (bus) | ||||||
|  | +		return 0; | ||||||
|  | + | ||||||
|  | +	if (cs == 4) | ||||||
|  | +		return 1; | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +void spi_cs_activate(struct spi_slave *slave) | ||||||
|  | +{ | ||||||
|  | +	switch (slave->cs) { | ||||||
|  | +	case 4: | ||||||
|  | +		gpio_set_value(10, 0); | ||||||
|  | +		break; | ||||||
|  | +	default: | ||||||
|  | +		break; | ||||||
|  | +	} | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +void spi_cs_deactivate(struct spi_slave *slave) | ||||||
|  | +{ | ||||||
|  | +	switch (slave->cs) { | ||||||
|  | +	case 4: | ||||||
|  | +		gpio_set_value(10, 1); | ||||||
|  | +		break; | ||||||
|  | +	default: | ||||||
|  | +		break; | ||||||
|  | +	} | ||||||
|  | +} | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index 4362856..e505203 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -499,6 +499,9 @@ Active  mips        mips32         -           micronas        vct | ||||||
|  |  Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_nor                       zxv10h201l:SYS_BOOT_NOR                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_ram                       zxv10h201l:SYS_BOOT_RAM                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_zte                       zxv10h201l:SYS_BOOT_ZTE                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zyxel           p661hnufx           p661hnufx_ram                        p661hnufx:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zyxel           p661hnufx           p661hnufx_sfspl                      p661hnufx:SYS_BOOT_SFSPL                                                                                                          Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zyxel           p661hnufx           p661hnufx_zyxel                      p661hnufx:SYS_BOOT_ZYXEL                                                                                                          Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         au1x00      -               dbau1x00            dbau1000                             dbau1x00:DBAU1000                                                                                                                 Thomas Lange <thomas@corelatus.se> | ||||||
|  |  Active  mips        mips32         au1x00      -               dbau1x00            dbau1100                             dbau1x00:DBAU1100                                                                                                                 Thomas Lange <thomas@corelatus.se> | ||||||
|  |  Active  mips        mips32         au1x00      -               dbau1x00            dbau1500                             dbau1x00:DBAU1500                                                                                                                 Thomas Lange <thomas@corelatus.se> | ||||||
|  | diff --git a/include/configs/p661hnufx.h b/include/configs/p661hnufx.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..85e3e1e | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/p661hnufx.h | ||||||
|  | @@ -0,0 +1,79 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"P-661HNU-Fx" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"ZyXEL P-661HNU-Fx" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_SPI_FLASH | ||||||
|  | +#define CONFIG_SPI_FLASH_MACRONIX	/* Supports Macronix serial flash */ | ||||||
|  | +#define CONFIG_SPI_FLASH_4BYTE_MODE | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_SPL_SPI_FLASH	/* Build SPI flash SPL */ | ||||||
|  | +#define CONFIG_LTQ_SPL_COMP_LZO			/* Compress SPL with LZO */ | ||||||
|  | +#define CONFIG_LTQ_SPL_CONSOLE			/* Enable SPL console */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_SPL_SPI_BUS		0 | ||||||
|  | +#define CONFIG_SPL_SPI_CS		4 | ||||||
|  | +#define CONFIG_SPL_SPI_MAX_HZ		25000000 | ||||||
|  | +#define CONFIG_SPL_SPI_MODE		0 | ||||||
|  | + | ||||||
|  | +/* Switch devices */ | ||||||
|  | +#define CONFIG_SWITCH_MULTI | ||||||
|  | +#define CONFIG_SWITCH_PSB697X | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#define CONFIG_ENV_SPI_BUS		CONFIG_SPL_SPI_BUS | ||||||
|  | +#define CONFIG_ENV_SPI_CS		CONFIG_SPL_SPI_CS | ||||||
|  | +#define CONFIG_ENV_SPI_MAX_HZ		CONFIG_SPL_SPI_MAX_HZ | ||||||
|  | +#define CONFIG_ENV_SPI_MODE		CONFIG_SPL_SPI_MODE | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_SFSPL) | ||||||
|  | +#define CONFIG_ENV_IS_IN_SPI_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(512 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(256 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_ZYXEL) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80800000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_SF					\ | ||||||
|  | +	"update-uboot-sf=run load-uboot-sfspl-lzo write-uboot-sf\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_SF | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,262 @@ | |||||||
|  | From 4bfa74583bc938d2da41f255f22baa1845332893 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Luka Perkov <luka@openwrt.org> | ||||||
|  | Date: Tue, 12 Mar 2013 01:42:46 +0100 | ||||||
|  | Subject: MIPS: add board support for ZyXEL P-2601HN-Fx | ||||||
|  |  | ||||||
|  | Signed-off-by: Luka Perkov <luka@openwrt.org> | ||||||
|  |  | ||||||
|  | diff --git a/board/zyxel/p2601hnfx/Makefile b/board/zyxel/p2601hnfx/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p2601hnfx/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/zyxel/p2601hnfx/config.mk b/board/zyxel/p2601hnfx/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d33739 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p2601hnfx/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/zyxel/p2601hnfx/ddr_settings.h b/board/zyxel/p2601hnfx/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..92af4fa | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p2601hnfx/ddr_settings.h | ||||||
|  | @@ -0,0 +1,55 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * The values have been extracted from original ZyXEL U-Boot. | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define MC_DC00_VALUE	0x1B1B | ||||||
|  | +#define MC_DC01_VALUE	0x0 | ||||||
|  | +#define MC_DC02_VALUE	0x0 | ||||||
|  | +#define MC_DC03_VALUE	0x0 | ||||||
|  | +#define MC_DC04_VALUE	0x0 | ||||||
|  | +#define MC_DC05_VALUE	0x200 | ||||||
|  | +#define MC_DC06_VALUE	0x306 | ||||||
|  | +#define MC_DC07_VALUE	0x303 | ||||||
|  | +#define MC_DC08_VALUE	0x102 | ||||||
|  | +#define MC_DC09_VALUE	0x70A | ||||||
|  | +#define MC_DC10_VALUE	0x203 | ||||||
|  | +#define MC_DC11_VALUE	0xC02 | ||||||
|  | +#define MC_DC12_VALUE	0x1C8 | ||||||
|  | +#define MC_DC13_VALUE	0x1 | ||||||
|  | +#define MC_DC14_VALUE	0x0 | ||||||
|  | +#define MC_DC15_VALUE	0x144 | ||||||
|  | +#define MC_DC16_VALUE	0xC800 | ||||||
|  | +#define MC_DC17_VALUE	0xD | ||||||
|  | +#define MC_DC18_VALUE	0x301 | ||||||
|  | +#define MC_DC19_VALUE	0x200 | ||||||
|  | +#define MC_DC20_VALUE	0xA03 | ||||||
|  | +#define MC_DC21_VALUE	0x1900 | ||||||
|  | +#define MC_DC22_VALUE	0x1919 | ||||||
|  | +#define MC_DC23_VALUE	0x0 | ||||||
|  | +#define MC_DC24_VALUE	0x66 | ||||||
|  | +#define MC_DC25_VALUE	0x0 | ||||||
|  | +#define MC_DC26_VALUE	0x0 | ||||||
|  | +#define MC_DC27_VALUE	0x0 | ||||||
|  | +#define MC_DC28_VALUE	0x50A | ||||||
|  | +#define MC_DC29_VALUE	0x2D65 | ||||||
|  | +#define MC_DC30_VALUE	0x81B1 | ||||||
|  | +#define MC_DC31_VALUE	0x0 | ||||||
|  | +#define MC_DC32_VALUE	0x0 | ||||||
|  | +#define MC_DC33_VALUE	0x0 | ||||||
|  | +#define MC_DC34_VALUE	0x0 | ||||||
|  | +#define MC_DC35_VALUE	0x0 | ||||||
|  | +#define MC_DC36_VALUE	0x0 | ||||||
|  | +#define MC_DC37_VALUE	0x0 | ||||||
|  | +#define MC_DC38_VALUE	0x0 | ||||||
|  | +#define MC_DC39_VALUE	0x0 | ||||||
|  | +#define MC_DC40_VALUE	0x0 | ||||||
|  | +#define MC_DC41_VALUE	0x0 | ||||||
|  | +#define MC_DC42_VALUE	0x0 | ||||||
|  | +#define MC_DC43_VALUE	0x0 | ||||||
|  | +#define MC_DC44_VALUE	0x0 | ||||||
|  | +#define MC_DC45_VALUE	0x600 | ||||||
|  | +#define MC_DC46_VALUE	0x0 | ||||||
|  | diff --git a/board/zyxel/p2601hnfx/p2601hnfx.c b/board/zyxel/p2601hnfx/p2601hnfx.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..6a69af9 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p2601hnfx/p2601hnfx.c | ||||||
|  | @@ -0,0 +1,51 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/reset.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* MAC0: REALTEK RTL8306 switch */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_SWITCH, PHY_INTERFACE_MODE_RMII }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t *bis) | ||||||
|  | +{ | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct switch_device rtl8306_dev = { | ||||||
|  | +	.name = "rtl8306", | ||||||
|  | +	.cpu_port = 5, | ||||||
|  | +	.port_mask = 0xF, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_switch_init(void) | ||||||
|  | +{ | ||||||
|  | +	return switch_device_register(&rtl8306_dev); | ||||||
|  | +} | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index e505203..45c2aa0 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -499,6 +499,10 @@ Active  mips        mips32         -           micronas        vct | ||||||
|  |  Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_nor                       zxv10h201l:SYS_BOOT_NOR                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_ram                       zxv10h201l:SYS_BOOT_RAM                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         arx100      zte             zxv10h201l          zxv10h201l_zte                       zxv10h201l:SYS_BOOT_ZTE                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zyxel           p2601hnfx           p2601hnfx_nor                        p2601hnfx:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zyxel           p2601hnfx           p2601hnfx_norspl                     p2601hnfx:SYS_BOOT_NORSPL                                                                                                         Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zyxel           p2601hnfx           p2601hnfx_ram                        p2601hnfx:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         arx100      zyxel           p2601hnfx           p2601hnfx_zyxel                      p2601hnfx:SYS_BOOT_ZYXEL                                                                                                          Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         arx100      zyxel           p661hnufx           p661hnufx_ram                        p661hnufx:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         arx100      zyxel           p661hnufx           p661hnufx_sfspl                      p661hnufx:SYS_BOOT_SFSPL                                                                                                          Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         arx100      zyxel           p661hnufx           p661hnufx_zyxel                      p661hnufx:SYS_BOOT_ZYXEL                                                                                                          Luka Perkov <luka@openwrt.org> | ||||||
|  | diff --git a/include/configs/p2601hnfx.h b/include/configs/p2601hnfx.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..5cba30f | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/p2601hnfx.h | ||||||
|  | @@ -0,0 +1,67 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"P-2601HN-Fx" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"ZyXEL P-2601HN-Fx" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART			/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NOR_FLASH		/* Have a parallel NOR flash */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_SPL_NOR_FLASH	/* Build NOR flash SPL */ | ||||||
|  | +#define CONFIG_LTQ_SPL_COMP_LZO			/* Compress SPL with LZO */ | ||||||
|  | +#define CONFIG_LTQ_SPL_CONSOLE			/* Enable SPL console */ | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_NOR) | ||||||
|  | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(256 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(128 * 1024) | ||||||
|  | +#elif defined(CONFIG_SYS_BOOT_NORSPL) | ||||||
|  | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(128 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(128 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_ZYXEL) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80800000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NOR \ | ||||||
|  | +	"update-uboot-nor=run load-uboot-norspl-lzo write-uboot-nor\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NOR	\ | ||||||
|  | +	"kernel_addr=0xB0040000\0" | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,321 @@ | |||||||
|  | From 3f7be04a148d23cdb5fd320e0e2923983f8bd1f4 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Luka Perkov <luka@openwrt.org> | ||||||
|  | Date: Tue, 6 Aug 2013 22:51:00 +0200 | ||||||
|  | Subject: MIPS: add board support for ZyXEL P-2812HNU-Fx | ||||||
|  |  | ||||||
|  | Signed-off-by: Luka Perkov <luka@openwrt.org> | ||||||
|  |  | ||||||
|  | diff --git a/board/zyxel/p2812hnufx/Makefile b/board/zyxel/p2812hnufx/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p2812hnufx/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/zyxel/p2812hnufx/config.mk b/board/zyxel/p2812hnufx/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d33739 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p2812hnufx/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/zyxel/p2812hnufx/ddr_settings.h b/board/zyxel/p2812hnufx/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..128c42e | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p2812hnufx/ddr_settings.h | ||||||
|  | @@ -0,0 +1,70 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * The values have been extracted from original ZyXEL U-Boot. | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define	MC_CCR00_VALUE	0x101 | ||||||
|  | +#define	MC_CCR01_VALUE	0x1000100 | ||||||
|  | +#define	MC_CCR02_VALUE	0x1010000 | ||||||
|  | +#define	MC_CCR03_VALUE	0x101 | ||||||
|  | +#define	MC_CCR04_VALUE	0x1000000 | ||||||
|  | +#define	MC_CCR05_VALUE	0x1000101 | ||||||
|  | +#define	MC_CCR06_VALUE	0x1000100 | ||||||
|  | +#define	MC_CCR07_VALUE	0x1010000 | ||||||
|  | +#define	MC_CCR08_VALUE	0x1000101 | ||||||
|  | +#define	MC_CCR09_VALUE	0x0 | ||||||
|  | +#define	MC_CCR10_VALUE	0x2000100 | ||||||
|  | +#define	MC_CCR11_VALUE	0x2000300 | ||||||
|  | +#define	MC_CCR12_VALUE	0x30000 | ||||||
|  | +#define	MC_CCR13_VALUE	0x202 | ||||||
|  | +#define	MC_CCR14_VALUE	0x7080A0F | ||||||
|  | +#define	MC_CCR15_VALUE	0x2040F | ||||||
|  | +#define	MC_CCR16_VALUE	0x40000 | ||||||
|  | +#define	MC_CCR17_VALUE	0x70102 | ||||||
|  | +#define	MC_CCR18_VALUE	0x4020002 | ||||||
|  | +#define	MC_CCR19_VALUE	0x30302 | ||||||
|  | +#define	MC_CCR20_VALUE	0x8000700 | ||||||
|  | +#define	MC_CCR21_VALUE	0x40F020A | ||||||
|  | +#define	MC_CCR22_VALUE	0x0 | ||||||
|  | +#define	MC_CCR23_VALUE	0xC020000 | ||||||
|  | +#define	MC_CCR24_VALUE	0x4401B04 | ||||||
|  | +#define	MC_CCR25_VALUE	0x0 | ||||||
|  | +#define	MC_CCR26_VALUE	0x0 | ||||||
|  | +#define	MC_CCR27_VALUE	0x6420000 | ||||||
|  | +#define	MC_CCR28_VALUE	0x0 | ||||||
|  | +#define	MC_CCR29_VALUE	0x0 | ||||||
|  | +#define	MC_CCR30_VALUE	0x798 | ||||||
|  | +#define	MC_CCR31_VALUE	0x0 | ||||||
|  | +#define	MC_CCR32_VALUE	0x0 | ||||||
|  | +#define	MC_CCR33_VALUE	0x650000 | ||||||
|  | +#define	MC_CCR34_VALUE	0x200C8 | ||||||
|  | +#define	MC_CCR35_VALUE	0x1D445D | ||||||
|  | +#define	MC_CCR36_VALUE	0xC8 | ||||||
|  | +#define	MC_CCR37_VALUE	0xC351 | ||||||
|  | +#define	MC_CCR38_VALUE	0x0 | ||||||
|  | +#define	MC_CCR39_VALUE	0x141F04 | ||||||
|  | +#define	MC_CCR40_VALUE	0x142704 | ||||||
|  | +#define	MC_CCR41_VALUE	0x141B42 | ||||||
|  | +#define	MC_CCR42_VALUE	0x141B42 | ||||||
|  | +#define	MC_CCR43_VALUE	0x566504 | ||||||
|  | +#define	MC_CCR44_VALUE	0x566504 | ||||||
|  | +#define	MC_CCR45_VALUE	0x565F17 | ||||||
|  | +#define	MC_CCR46_VALUE	0x565F17 | ||||||
|  | +#define	MC_CCR47_VALUE	0x0 | ||||||
|  | +#define	MC_CCR48_VALUE	0x0 | ||||||
|  | +#define	MC_CCR49_VALUE	0x0 | ||||||
|  | +#define	MC_CCR50_VALUE	0x0 | ||||||
|  | +#define	MC_CCR51_VALUE	0x0 | ||||||
|  | +#define	MC_CCR52_VALUE	0x133 | ||||||
|  | +#define	MC_CCR53_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR54_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR55_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR56_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR57_VALUE	0x7800301 | ||||||
|  | +#define	MC_CCR58_VALUE	0x7800301 | ||||||
|  | +#define	MC_CCR59_VALUE	0x7800301 | ||||||
|  | +#define	MC_CCR60_VALUE	0x7800301 | ||||||
|  | +#define	MC_CCR61_VALUE	0x4 | ||||||
|  | diff --git a/board/zyxel/p2812hnufx/p2812hnufx.c b/board/zyxel/p2812hnufx/p2812hnufx.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..cd2f819 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/zyxel/p2812hnufx/p2812hnufx.c | ||||||
|  | @@ -0,0 +1,97 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | +#include <asm/lantiq/cpu.h> | ||||||
|  | +#include <asm/arch/gphy.h> | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SPL_BUILD) | ||||||
|  | +#define do_gpio_init	1 | ||||||
|  | +#define do_pll_init	1 | ||||||
|  | +#define do_dcdc_init	0 | ||||||
|  | +#elif defined(CONFIG_SYS_BOOT_RAM) | ||||||
|  | +#define do_gpio_init	1 | ||||||
|  | +#define do_pll_init	0 | ||||||
|  | +#define do_dcdc_init	1 | ||||||
|  | +#else | ||||||
|  | +#define do_gpio_init	0 | ||||||
|  | +#define do_pll_init	0 | ||||||
|  | +#define do_dcdc_init	1 | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +static void gpio_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* EBU.FL_CS1 as output for NAND CE */ | ||||||
|  | +	gpio_set_altfunc(23, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* EBU.FL_A23 as output for NAND CLE */ | ||||||
|  | +	gpio_set_altfunc(24, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* EBU.FL_A24 as output for NAND ALE */ | ||||||
|  | +	gpio_set_altfunc(13, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* GPIO 3.0 as input for NAND Ready Busy */ | ||||||
|  | +	gpio_set_altfunc(48, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_IN); | ||||||
|  | +	/* GPIO 3.1 as output for NAND Read */ | ||||||
|  | +	gpio_set_altfunc(49, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	if (do_gpio_init) | ||||||
|  | +		gpio_init(); | ||||||
|  | + | ||||||
|  | +	if (do_pll_init) | ||||||
|  | +		ltq_pll_init(); | ||||||
|  | + | ||||||
|  | +	if (do_dcdc_init) | ||||||
|  | +		ltq_dcdc_init(0x7F); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* GMAC0: external Lantiq PEF7071 10/100/1000 PHY for LAN port 0 */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_RGMII }, | ||||||
|  | +	/* GMAC1: external Lantiq PEF7071 10/100/1000 PHY for LAN port 1 */ | ||||||
|  | +	{ 1, 0x1, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_RGMII }, | ||||||
|  | +	/* GMAC2: internal GPHY0 with 10/100/1000 firmware for LAN port 2 */ | ||||||
|  | +	{ 2, 0x11, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_GMII }, | ||||||
|  | +	/* GMAC3: unused */ | ||||||
|  | +	{ 3, 0x0, LTQ_ETH_PORT_NONE, PHY_INTERFACE_MODE_NONE }, | ||||||
|  | +	/* GMAC4: internal GPHY1 with 10/100/1000 firmware for LAN port 3 */ | ||||||
|  | +	{ 4, 0x13, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_GMII }, | ||||||
|  | +	/* GMAC5: external Lantiq PEF7071 10/100/1000 PHY for WANoE port */ | ||||||
|  | +	{ 5, 0x5, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_RGMII }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t * bis) | ||||||
|  | +{ | ||||||
|  | +	const enum ltq_gphy_clk clk = LTQ_GPHY_CLK_25MHZ_PLL0; | ||||||
|  | +	const ulong fw_addr = 0x80FF0000; | ||||||
|  | + | ||||||
|  | +	ltq_gphy_phy11g_a1x_load(fw_addr); | ||||||
|  | + | ||||||
|  | +	ltq_cgu_gphy_clk_src(clk); | ||||||
|  | + | ||||||
|  | +	ltq_rcu_gphy_boot(0, fw_addr); | ||||||
|  | +	ltq_rcu_gphy_boot(1, fw_addr); | ||||||
|  | + | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index 45c2aa0..0cbf756 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -540,6 +540,8 @@ Active  mips        mips32         vrx200      lantiq          easy80920 | ||||||
|  |  Active  mips        mips32         vrx200      zte             zxhnh367n           zxhnh367n_nandspl                    zxhnh367n:SYS_BOOT_NANDSPL                                                                                                        Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         vrx200      zte             zxhnh367n           zxhnh367n_ram                        zxhnh367n:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         vrx200      zte             zxhnh367n           zxhnh367n_zte                        zxhnh367n:SYS_BOOT_ZTE                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         vrx200      zyxel           p2812hnufx          p2812hnufx_nandspl                   p2812hnufx:SYS_BOOT_NANDSPL                                                                                                       Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         vrx200      zyxel           p2812hnufx          p2812hnufx_ram                       p2812hnufx:SYS_BOOT_RAM                                                                                                           Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips64         -           -               qemu-mips           qemu_mips64                          qemu-mips64:SYS_BIG_ENDIAN                                                                                                        - | ||||||
|  |  Active  mips        mips64         -           -               qemu-mips           qemu_mips64el                        qemu-mips64:SYS_LITTLE_ENDIAN                                                                                                     - | ||||||
|  |  Active  nds32       n1213          ag101       AndesTech       adp-ag101           adp-ag101                            -                                                                                                                                 Andes <uboot@andestech.com> | ||||||
|  | diff --git a/include/configs/p2812hnufx.h b/include/configs/p2812hnufx.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..6806eb1 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/p2812hnufx.h | ||||||
|  | @@ -0,0 +1,67 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"P-2812HNU-Fx" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"ZyXEL P-2812HNU-Fx" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART			/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET		/* Enable ethernet */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NAND_FLASH		/* Have a K9F1G08U0D NAND flash */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_SPL_NAND_FLASH	/* Build NAND flash SPL */ | ||||||
|  | +#define CONFIG_LTQ_SPL_COMP_LZO			/* Compress SPL with LZO */ | ||||||
|  | +#define CONFIG_LTQ_SPL_CONSOLE			/* Enable SPL console */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_SYS_NAND_PAGE_COUNT	64 | ||||||
|  | +#define CONFIG_SYS_NAND_PAGE_SIZE	2048 | ||||||
|  | +#define CONFIG_SYS_NAND_OOBSIZE		64 | ||||||
|  | +#define CONFIG_SYS_NAND_BLOCK_SIZE	(128 * 1024) | ||||||
|  | +#define CONFIG_SYS_NAND_BAD_BLOCK_POS	NAND_LARGE_BADBLOCK_POS | ||||||
|  | +#define CONFIG_SYS_NAND_U_BOOT_OFFS	0x4000 | ||||||
|  | + | ||||||
|  | +#define CONFIG_SYS_DRAM_PROBE | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_NANDSPL) | ||||||
|  | +#define CONFIG_ENV_IS_IN_NAND | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(256 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(128 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY VRX200 */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NAND					\ | ||||||
|  | +	"update-uboot-nand=run load-uboot-nandspl-lzo write-uboot-nand\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NAND | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,297 @@ | |||||||
|  | From 60856fa8f9866f292df740ea98752a70738eb59a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Fri, 9 Aug 2013 18:11:07 +0200 | ||||||
|  | Subject: MIPS: add board support for Arcadyan Easybox 904 | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/board/arcadyan/easybox904/Makefile b/board/arcadyan/easybox904/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..0380dea | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/easybox904/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/arcadyan/easybox904/config.mk b/board/arcadyan/easybox904/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d8953b | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/easybox904/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/arcadyan/easybox904/ddr_settings.h b/board/arcadyan/easybox904/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..24541bc | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/easybox904/ddr_settings.h | ||||||
|  | @@ -0,0 +1,68 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define	MC_CCR00_VALUE	0x101 | ||||||
|  | +#define	MC_CCR01_VALUE	0x1000100 | ||||||
|  | +#define	MC_CCR02_VALUE	0x1010000 | ||||||
|  | +#define	MC_CCR03_VALUE	0x101 | ||||||
|  | +#define	MC_CCR04_VALUE	0x1000000 | ||||||
|  | +#define	MC_CCR05_VALUE	0x1000101 | ||||||
|  | +#define	MC_CCR06_VALUE	0x1000100 | ||||||
|  | +#define	MC_CCR07_VALUE	0x1010000 | ||||||
|  | +#define	MC_CCR08_VALUE	0x1000101 | ||||||
|  | +#define	MC_CCR09_VALUE	0x1000000 | ||||||
|  | +#define	MC_CCR10_VALUE	0x2000100 | ||||||
|  | +#define	MC_CCR11_VALUE	0x2000300 | ||||||
|  | +#define	MC_CCR12_VALUE	0x30000 | ||||||
|  | +#define	MC_CCR13_VALUE	0x202 | ||||||
|  | +#define	MC_CCR14_VALUE	0x7080A0F | ||||||
|  | +#define	MC_CCR15_VALUE	0x2040F | ||||||
|  | +#define	MC_CCR16_VALUE	0x40000 | ||||||
|  | +#define	MC_CCR17_VALUE	0x70102 | ||||||
|  | +#define	MC_CCR18_VALUE	0x4020002 | ||||||
|  | +#define	MC_CCR19_VALUE	0x30302 | ||||||
|  | +#define	MC_CCR20_VALUE	0x8000700 | ||||||
|  | +#define	MC_CCR21_VALUE	0x40F020A | ||||||
|  | +#define	MC_CCR22_VALUE	0x0 | ||||||
|  | +#define	MC_CCR23_VALUE	0xC020000 | ||||||
|  | +#define	MC_CCR24_VALUE	0x4401503 | ||||||
|  | +#define	MC_CCR25_VALUE	0x0 | ||||||
|  | +#define	MC_CCR26_VALUE	0x0 | ||||||
|  | +#define	MC_CCR27_VALUE	0x6420000 | ||||||
|  | +#define	MC_CCR28_VALUE	0x0 | ||||||
|  | +#define	MC_CCR29_VALUE	0x0 | ||||||
|  | +#define	MC_CCR30_VALUE	0x798 | ||||||
|  | +#define	MC_CCR31_VALUE	0x0 | ||||||
|  | +#define	MC_CCR32_VALUE	0x0 | ||||||
|  | +#define	MC_CCR33_VALUE	0x650000 | ||||||
|  | +#define	MC_CCR34_VALUE	0x200C8 | ||||||
|  | +#define	MC_CCR35_VALUE	0x1536B0 | ||||||
|  | +#define	MC_CCR36_VALUE	0xC8 | ||||||
|  | +#define	MC_CCR37_VALUE	0xC351 | ||||||
|  | +#define	MC_CCR38_VALUE	0x0 | ||||||
|  | +#define	MC_CCR39_VALUE	0x142404 | ||||||
|  | +#define	MC_CCR40_VALUE	0x142604 | ||||||
|  | +#define	MC_CCR41_VALUE	0x141B42 | ||||||
|  | +#define	MC_CCR42_VALUE	0x141B42 | ||||||
|  | +#define	MC_CCR43_VALUE	0x566504 | ||||||
|  | +#define	MC_CCR44_VALUE	0x566504 | ||||||
|  | +#define	MC_CCR45_VALUE	0x565F17 | ||||||
|  | +#define	MC_CCR46_VALUE	0x565F17 | ||||||
|  | +#define	MC_CCR47_VALUE	0x0 | ||||||
|  | +#define	MC_CCR48_VALUE	0x0 | ||||||
|  | +#define	MC_CCR49_VALUE	0x0 | ||||||
|  | +#define	MC_CCR50_VALUE	0x0 | ||||||
|  | +#define	MC_CCR51_VALUE	0x0 | ||||||
|  | +#define	MC_CCR52_VALUE	0x133 | ||||||
|  | +#define	MC_CCR53_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR54_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR55_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR56_VALUE	0xF3014B27 | ||||||
|  | +#define	MC_CCR57_VALUE	0x7C00301 | ||||||
|  | +#define	MC_CCR58_VALUE	0x7C00301 | ||||||
|  | +#define	MC_CCR59_VALUE	0x7C00301 | ||||||
|  | +#define	MC_CCR60_VALUE	0x7C00301 | ||||||
|  | +#define	MC_CCR61_VALUE	0x4 | ||||||
|  | diff --git a/board/arcadyan/easybox904/easybox904.c b/board/arcadyan/easybox904/easybox904.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..4dbe044 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/easybox904/easybox904.c | ||||||
|  | @@ -0,0 +1,98 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <spi.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | +#include <asm/lantiq/cpu.h> | ||||||
|  | +#include <asm/arch/gphy.h> | ||||||
|  | + | ||||||
|  | +#if defined(CONFIG_SPL_BUILD) | ||||||
|  | +#define do_gpio_init	1 | ||||||
|  | +#define do_pll_init	1 | ||||||
|  | +#define do_dcdc_init	0 | ||||||
|  | +#elif defined(CONFIG_SYS_BOOT_RAM) | ||||||
|  | +#define do_gpio_init	1 | ||||||
|  | +#define do_pll_init	0 | ||||||
|  | +#define do_dcdc_init	1 | ||||||
|  | +#else | ||||||
|  | +#define do_gpio_init	0 | ||||||
|  | +#define do_pll_init	0 | ||||||
|  | +#define do_dcdc_init	1 | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +static inline void gpio_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* EBU.FL_CS1 as output for NAND CE */ | ||||||
|  | +	gpio_set_altfunc(23, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* EBU.FL_A23 as output for NAND CLE */ | ||||||
|  | +	gpio_set_altfunc(24, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* EBU.FL_A24 as output for NAND ALE */ | ||||||
|  | +	gpio_set_altfunc(13, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +	/* GPIO 3.0 as input for NAND Ready Busy */ | ||||||
|  | +	gpio_set_altfunc(48, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_IN); | ||||||
|  | +	/* GPIO 3.1 as output for NAND Read */ | ||||||
|  | +	gpio_set_altfunc(49, GPIO_ALTSEL_SET, GPIO_ALTSEL_CLR, GPIO_DIR_OUT); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	if (do_gpio_init) | ||||||
|  | +		gpio_init(); | ||||||
|  | + | ||||||
|  | +	if (do_pll_init) | ||||||
|  | +		ltq_pll_init(); | ||||||
|  | + | ||||||
|  | +	if (do_dcdc_init) | ||||||
|  | +		ltq_dcdc_init(0x7F); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* GMAC0: ??? */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_NONE, LTQ_ETH_PORT_NONE }, | ||||||
|  | +	/* GMAC1: ??? */ | ||||||
|  | +	{ 1, 0x1, LTQ_ETH_PORT_NONE, LTQ_ETH_PORT_NONE }, | ||||||
|  | +	/* GMAC2: ??? */ | ||||||
|  | +	{ 2, 0x11, LTQ_ETH_PORT_NONE, LTQ_ETH_PORT_NONE }, | ||||||
|  | +	/* GMAC3: unused */ | ||||||
|  | +	{ 3, 0x0, LTQ_ETH_PORT_NONE, LTQ_ETH_PORT_NONE }, | ||||||
|  | +	/* GMAC4: internal GPHY1 with 10/100/1000 firmware for WANoE port */ | ||||||
|  | +	{ 4, 0x13, LTQ_ETH_PORT_PHY, PHY_INTERFACE_MODE_GMII }, | ||||||
|  | +	/* GMAC5: ??? */ | ||||||
|  | +	{ 5, 0x5, LTQ_ETH_PORT_NONE, LTQ_ETH_PORT_NONE }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t * bis) | ||||||
|  | +{ | ||||||
|  | +	const enum ltq_gphy_clk clk = LTQ_GPHY_CLK_25MHZ_PLL0; | ||||||
|  | +	const ulong fw_ge_addr = 0x80FE0000; | ||||||
|  | + | ||||||
|  | +	ltq_gphy_phy11g_a2x_load(fw_ge_addr); | ||||||
|  | + | ||||||
|  | +	ltq_cgu_gphy_clk_src(clk); | ||||||
|  | + | ||||||
|  | +	ltq_rcu_gphy_boot(0, fw_ge_addr); | ||||||
|  | +	ltq_rcu_gphy_boot(1, fw_ge_addr); | ||||||
|  | + | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index 0cbf756..f10be39 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -529,6 +529,7 @@ Active  mips        mips32         incaip      -               incaip | ||||||
|  |  Active  mips        mips32         incaip      -               incaip              incaip_100MHz                        incaip:CPU_CLOCK_RATE=100000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
|  |  Active  mips        mips32         incaip      -               incaip              incaip_133MHz                        incaip:CPU_CLOCK_RATE=133000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
|  |  Active  mips        mips32         incaip      -               incaip              incaip_150MHz                        incaip:CPU_CLOCK_RATE=150000000                                                                                                   Wolfgang Denk <wd@denx.de> | ||||||
|  | +Active  mips        mips32         vrx200      arcadyan        easybox904          easybox904_ram                       easybox904:SYS_BOOT_RAM                                                                                                           Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         vrx200      avm             fb3370              fb3370_eva                           fb3370:SYS_BOOT_EVA                                                                                                               Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         vrx200      avm             fb3370              fb3370_ram                           fb3370:SYS_BOOT_RAM                                                                                                               Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  Active  mips        mips32         vrx200      avm             fb3370              fb3370_sfspl                         fb3370:SYS_BOOT_SFSPL                                                                                                             Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | diff --git a/include/configs/easybox904.h b/include/configs/easybox904.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..c892d77 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/easybox904.h | ||||||
|  | @@ -0,0 +1,45 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"EASYBOX904" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"Arcadyan EasyBox 904" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART			/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET		/* Enable ethernet */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NAND_FLASH | ||||||
|  | + | ||||||
|  | +#define CONFIG_SYS_DRAM_PROBE | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY VRX200 */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,262 @@ | |||||||
|  | From fbdbf2ddf2b34d675d53de679c179788b0604c1a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Oliver Muth <dr.o.muth@gmx.de> | ||||||
|  | Date: Sat, 12 Oct 2013 16:49:53 +0200 | ||||||
|  | Subject: MIPS: add board support for Arcadyan ARV752DPW | ||||||
|  |  | ||||||
|  | Signed-off-by: Oliver Muth <dr.o.muth@gmx.de> | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/board/arcadyan/arv752dpw/Makefile b/board/arcadyan/arv752dpw/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv752dpw/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/arcadyan/arv752dpw/arv752dpw.c b/board/arcadyan/arv752dpw/arv752dpw.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..d555904 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv752dpw/arv752dpw.c | ||||||
|  | @@ -0,0 +1,51 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * Copyright (C) 2013 Oliver Muth <dr.o.muth@gmx.de> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/reset.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* MAC0: Realtek rtl8306 switch */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_SWITCH, PHY_INTERFACE_MODE_RMII }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t *bis) | ||||||
|  | +{ | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | +static struct switch_device rtl8306_dev = { | ||||||
|  | +	.name = "rtl8306", | ||||||
|  | +	.cpu_port = 5, | ||||||
|  | +	.port_mask = 0xF, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_switch_init(void) | ||||||
|  | +{ | ||||||
|  | +	return switch_device_register(&rtl8306_dev); | ||||||
|  | +} | ||||||
|  | diff --git a/board/arcadyan/arv752dpw/config.mk b/board/arcadyan/arv752dpw/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d8953b | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv752dpw/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/arcadyan/arv752dpw/ddr_settings.h b/board/arcadyan/arv752dpw/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..a226322 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv752dpw/ddr_settings.h | ||||||
|  | @@ -0,0 +1,55 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * This file has been generated with lantiq_ram_extract_magic.awk script.      | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define MC_DC00_VALUE	0x1B1B | ||||||
|  | +#define MC_DC01_VALUE	0x0 | ||||||
|  | +#define MC_DC02_VALUE	0x0 | ||||||
|  | +#define MC_DC03_VALUE	0x0 | ||||||
|  | +#define MC_DC04_VALUE	0x0 | ||||||
|  | +#define MC_DC05_VALUE	0x200 | ||||||
|  | +#define MC_DC06_VALUE	0x605 | ||||||
|  | +#define MC_DC07_VALUE	0x303 | ||||||
|  | +#define MC_DC08_VALUE	0x102 | ||||||
|  | +#define MC_DC09_VALUE	0x70A | ||||||
|  | +#define MC_DC10_VALUE	0x203 | ||||||
|  | +#define MC_DC11_VALUE	0xC02 | ||||||
|  | +#define MC_DC12_VALUE	0x1C8 | ||||||
|  | +#define MC_DC13_VALUE	0x1 | ||||||
|  | +#define MC_DC14_VALUE	0x0 | ||||||
|  | +#define MC_DC15_VALUE	0x134 | ||||||
|  | +#define MC_DC16_VALUE	0xC800 | ||||||
|  | +#define MC_DC17_VALUE	0xD | ||||||
|  | +#define MC_DC18_VALUE	0x301 | ||||||
|  | +#define MC_DC19_VALUE	0x200 | ||||||
|  | +#define MC_DC20_VALUE	0xA03 | ||||||
|  | +#define MC_DC21_VALUE	0x1400 | ||||||
|  | +#define MC_DC22_VALUE	0x1414 | ||||||
|  | +#define MC_DC23_VALUE	0x0 | ||||||
|  | +#define MC_DC24_VALUE	0x5B | ||||||
|  | +#define MC_DC25_VALUE	0x0 | ||||||
|  | +#define MC_DC26_VALUE	0x0 | ||||||
|  | +#define MC_DC27_VALUE	0x0 | ||||||
|  | +#define MC_DC28_VALUE	0x510 | ||||||
|  | +#define MC_DC29_VALUE	0x4E20 | ||||||
|  | +#define MC_DC30_VALUE	0x8235 | ||||||
|  | +#define MC_DC31_VALUE	0x0 | ||||||
|  | +#define MC_DC32_VALUE	0x0 | ||||||
|  | +#define MC_DC33_VALUE	0x0 | ||||||
|  | +#define MC_DC34_VALUE	0x0 | ||||||
|  | +#define MC_DC35_VALUE	0x0 | ||||||
|  | +#define MC_DC36_VALUE	0x0 | ||||||
|  | +#define MC_DC37_VALUE	0x0 | ||||||
|  | +#define MC_DC38_VALUE	0x0 | ||||||
|  | +#define MC_DC39_VALUE	0x0 | ||||||
|  | +#define MC_DC40_VALUE	0x0 | ||||||
|  | +#define MC_DC41_VALUE	0x0 | ||||||
|  | +#define MC_DC42_VALUE	0x0 | ||||||
|  | +#define MC_DC43_VALUE	0x0 | ||||||
|  | +#define MC_DC44_VALUE	0x0 | ||||||
|  | +#define MC_DC45_VALUE	0x500 | ||||||
|  | +#define MC_DC46_VALUE	0x0 | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index f10be39..79cba2d 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -518,6 +518,9 @@ Active  mips        mips32         danube      arcadyan        arv4519pw | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_brn                        arv7518pw:SYS_BOOT_BRN                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_nor                        arv7518pw:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_ram                        arv7518pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv752dpw           arv752dpw_brn                        arv752dpw:SYS_BOOT_BRN                                                                                                            - | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv752dpw           arv752dpw_nor                        arv752dpw:SYS_BOOT_NOR                                                                                                            - | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv752dpw           arv752dpw_ram                        arv752dpw:SYS_BOOT_RAM                                                                                                            - | ||||||
|  |  Active  mips        mips32         danube      audiocodes      acmp252             acmp252_nor                          acmp252:SYS_BOOT_NOR                                                                                                              Daniel Golle <daniel.golle@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      audiocodes      acmp252             acmp252_ram                          acmp252:SYS_BOOT_RAM                                                                                                              Daniel Golle <daniel.golle@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      gigaset         sx76x               gigasx76x_nor                        sx76x:SYS_BOOT_NOR                                                                                                                Luka Perkov <luka@openwrt.org> | ||||||
|  | diff --git a/include/configs/arv752dpw.h b/include/configs/arv752dpw.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..f6d6092 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/arv752dpw.h | ||||||
|  | @@ -0,0 +1,67 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2012-2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"ARV752DPW" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"Arcadyan ARV752DPW" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NOR_FLASH	/* Have a parallel NOR flash */ | ||||||
|  | + | ||||||
|  | +/* Switch devices */ | ||||||
|  | +#define CONFIG_SWITCH_MULTI | ||||||
|  | +#define CONFIG_SWITCH_RTL8206 | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_NOR) | ||||||
|  | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(192 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(64 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +/* Brnboot loadable image */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_BRN) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80002000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#define CONFIG_SYS_DISABLE_CACHE | ||||||
|  | +#define CONFIG_ENV_OVERWRITE 1 | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\ | ||||||
|  | +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NOR	\ | ||||||
|  | +	"kernel_addr=0xB0040000\0" | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,264 @@ | |||||||
|  | From 09f411b4d10f10a62f147264121bb853b4649c3e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Oliver Muth <dr.o.muth@gmx.de> | ||||||
|  | Date: Sat, 12 Oct 2013 16:49:53 +0200 | ||||||
|  | Subject: MIPS: add board support for Arcadyan ARV752DPW22 | ||||||
|  |  | ||||||
|  | Signed-off-by: Oliver Muth <dr.o.muth@gmx.de> | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/board/arcadyan/arv752dpw22/Makefile b/board/arcadyan/arv752dpw22/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv752dpw22/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/arcadyan/arv752dpw22/arv752dpw22.c b/board/arcadyan/arv752dpw22/arv752dpw22.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9b2d89f | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv752dpw22/arv752dpw22.c | ||||||
|  | @@ -0,0 +1,52 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2012 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * Copyright (C) 2013 Oliver Muth <dr.o.muth@gmx.de> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/reset.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* MAC0: Atheros ar8216 switch */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_SWITCH, PHY_INTERFACE_MODE_MII }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t *bis) | ||||||
|  | +{ | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct switch_device ar8216_dev = { | ||||||
|  | +	.name = "ar8216", | ||||||
|  | +	.cpu_port = 0, | ||||||
|  | +	.port_mask = 0xF, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_switch_init(void) | ||||||
|  | +{ | ||||||
|  | +	return switch_device_register(&ar8216_dev); | ||||||
|  | +} | ||||||
|  | diff --git a/board/arcadyan/arv752dpw22/config.mk b/board/arcadyan/arv752dpw22/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d8953b | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv752dpw22/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/arcadyan/arv752dpw22/ddr_settings.h b/board/arcadyan/arv752dpw22/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..a226322 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv752dpw22/ddr_settings.h | ||||||
|  | @@ -0,0 +1,55 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2011-2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * This file has been generated with lantiq_ram_extract_magic.awk script.      | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define MC_DC00_VALUE	0x1B1B | ||||||
|  | +#define MC_DC01_VALUE	0x0 | ||||||
|  | +#define MC_DC02_VALUE	0x0 | ||||||
|  | +#define MC_DC03_VALUE	0x0 | ||||||
|  | +#define MC_DC04_VALUE	0x0 | ||||||
|  | +#define MC_DC05_VALUE	0x200 | ||||||
|  | +#define MC_DC06_VALUE	0x605 | ||||||
|  | +#define MC_DC07_VALUE	0x303 | ||||||
|  | +#define MC_DC08_VALUE	0x102 | ||||||
|  | +#define MC_DC09_VALUE	0x70A | ||||||
|  | +#define MC_DC10_VALUE	0x203 | ||||||
|  | +#define MC_DC11_VALUE	0xC02 | ||||||
|  | +#define MC_DC12_VALUE	0x1C8 | ||||||
|  | +#define MC_DC13_VALUE	0x1 | ||||||
|  | +#define MC_DC14_VALUE	0x0 | ||||||
|  | +#define MC_DC15_VALUE	0x134 | ||||||
|  | +#define MC_DC16_VALUE	0xC800 | ||||||
|  | +#define MC_DC17_VALUE	0xD | ||||||
|  | +#define MC_DC18_VALUE	0x301 | ||||||
|  | +#define MC_DC19_VALUE	0x200 | ||||||
|  | +#define MC_DC20_VALUE	0xA03 | ||||||
|  | +#define MC_DC21_VALUE	0x1400 | ||||||
|  | +#define MC_DC22_VALUE	0x1414 | ||||||
|  | +#define MC_DC23_VALUE	0x0 | ||||||
|  | +#define MC_DC24_VALUE	0x5B | ||||||
|  | +#define MC_DC25_VALUE	0x0 | ||||||
|  | +#define MC_DC26_VALUE	0x0 | ||||||
|  | +#define MC_DC27_VALUE	0x0 | ||||||
|  | +#define MC_DC28_VALUE	0x510 | ||||||
|  | +#define MC_DC29_VALUE	0x4E20 | ||||||
|  | +#define MC_DC30_VALUE	0x8235 | ||||||
|  | +#define MC_DC31_VALUE	0x0 | ||||||
|  | +#define MC_DC32_VALUE	0x0 | ||||||
|  | +#define MC_DC33_VALUE	0x0 | ||||||
|  | +#define MC_DC34_VALUE	0x0 | ||||||
|  | +#define MC_DC35_VALUE	0x0 | ||||||
|  | +#define MC_DC36_VALUE	0x0 | ||||||
|  | +#define MC_DC37_VALUE	0x0 | ||||||
|  | +#define MC_DC38_VALUE	0x0 | ||||||
|  | +#define MC_DC39_VALUE	0x0 | ||||||
|  | +#define MC_DC40_VALUE	0x0 | ||||||
|  | +#define MC_DC41_VALUE	0x0 | ||||||
|  | +#define MC_DC42_VALUE	0x0 | ||||||
|  | +#define MC_DC43_VALUE	0x0 | ||||||
|  | +#define MC_DC44_VALUE	0x0 | ||||||
|  | +#define MC_DC45_VALUE	0x500 | ||||||
|  | +#define MC_DC46_VALUE	0x0 | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index 79cba2d..287f974 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -521,6 +521,9 @@ Active  mips        mips32         danube      arcadyan        arv7518pw | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv752dpw           arv752dpw_brn                        arv752dpw:SYS_BOOT_BRN                                                                                                            - | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv752dpw           arv752dpw_nor                        arv752dpw:SYS_BOOT_NOR                                                                                                            - | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv752dpw           arv752dpw_ram                        arv752dpw:SYS_BOOT_RAM                                                                                                            - | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv752dpw22         arv752dpw22_brn                      arv752dpw22:SYS_BOOT_BRN                                                                                                          - | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv752dpw22         arv752dpw22_nor                      arv752dpw22:SYS_BOOT_NOR                                                                                                          - | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv752dpw22         arv752dpw22_ram                      arv752dpw22:SYS_BOOT_RAM                                                                                                          - | ||||||
|  |  Active  mips        mips32         danube      audiocodes      acmp252             acmp252_nor                          acmp252:SYS_BOOT_NOR                                                                                                              Daniel Golle <daniel.golle@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      audiocodes      acmp252             acmp252_ram                          acmp252:SYS_BOOT_RAM                                                                                                              Daniel Golle <daniel.golle@gmail.com> | ||||||
|  |  Active  mips        mips32         danube      gigaset         sx76x               gigasx76x_nor                        sx76x:SYS_BOOT_NOR                                                                                                                Luka Perkov <luka@openwrt.org> | ||||||
|  | diff --git a/include/configs/arv752dpw22.h b/include/configs/arv752dpw22.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..f17aa70 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/arv752dpw22.h | ||||||
|  | @@ -0,0 +1,68 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2012-2013 Luka Perkov <luka@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"ARV752DPW22" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"Arcadyan ARV752DPW22" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */ | ||||||
|  | + | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NOR_FLASH	/* Have a parallel NOR flash */ | ||||||
|  | + | ||||||
|  | +/* Switch devices */ | ||||||
|  | +#define CONFIG_SWITCH_MULTI | ||||||
|  | +#define CONFIG_SWITCH_AR8216 | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_NOR) | ||||||
|  | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(192 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(64 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +/* Burnboot loadable image */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_BRN) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80002000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#define CONFIG_SYS_DISABLE_CACHE | ||||||
|  | +#define CONFIG_ENV_OVERWRITE 1 | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\ | ||||||
|  | +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS	\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS	\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NOR	\ | ||||||
|  | +	"kernel_addr=0xB0040000\0" | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,289 @@ | |||||||
|  | From ba27086a5174130d138d645c2f4a49b08c3f2386 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Matti Laakso <malaakso@elisanet.fi> | ||||||
|  | Date: Sat, 2 Mar 2013 23:34:00 +0100 | ||||||
|  | Subject: MIPS: add board support for Arcadyan ARV7510 | ||||||
|  |  | ||||||
|  | Signed-off-by: Matti Laakso <malaakso@elisanet.fi> | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/board/arcadyan/arv7510pw/Makefile b/board/arcadyan/arv7510pw/Makefile | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..3a547c2 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv7510pw/Makefile | ||||||
|  | @@ -0,0 +1,27 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +include $(TOPDIR)/config.mk | ||||||
|  | + | ||||||
|  | +LIB	= $(obj)lib$(BOARD).o | ||||||
|  | + | ||||||
|  | +COBJS	= $(BOARD).o | ||||||
|  | + | ||||||
|  | +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) | ||||||
|  | +OBJS	:= $(addprefix $(obj),$(COBJS)) | ||||||
|  | +SOBJS	:= $(addprefix $(obj),$(SOBJS)) | ||||||
|  | + | ||||||
|  | +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) | ||||||
|  | +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | + | ||||||
|  | +# defines $(obj).depend target | ||||||
|  | +include $(SRCTREE)/rules.mk | ||||||
|  | + | ||||||
|  | +sinclude $(obj).depend | ||||||
|  | + | ||||||
|  | +######################################################################### | ||||||
|  | diff --git a/board/arcadyan/arv7510pw/arv7510pw.c b/board/arcadyan/arv7510pw/arv7510pw.c | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..6880b4c | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv7510pw/arv7510pw.c | ||||||
|  | @@ -0,0 +1,72 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Matti Laakso <malaakso@elisanet.fi> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <common.h> | ||||||
|  | +#include <switch.h> | ||||||
|  | +#include <asm/gpio.h> | ||||||
|  | +#include <asm/lantiq/eth.h> | ||||||
|  | +#include <asm/lantiq/reset.h> | ||||||
|  | +#include <asm/lantiq/chipid.h> | ||||||
|  | +#include <asm/lantiq/cpu.h> | ||||||
|  | + | ||||||
|  | +static void gpio_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* Initialize SSIO GPIOs */ | ||||||
|  | +	gpio_set_altfunc(4, 1, 0, 1); | ||||||
|  | +	gpio_set_altfunc(5, 1, 0, 1); | ||||||
|  | +	gpio_set_altfunc(6, 1, 0, 1); | ||||||
|  | +	ltq_gpio_init(); | ||||||
|  | + | ||||||
|  | +	/* Power led on */ | ||||||
|  | +	gpio_direction_output(76, 1); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int board_early_init_f(void) | ||||||
|  | +{ | ||||||
|  | +	gpio_init(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +int checkboard(void) | ||||||
|  | +{ | ||||||
|  | +	puts("Board: " CONFIG_BOARD_NAME "\n"); | ||||||
|  | +	ltq_chip_print_info(); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_port_config eth_port_config[] = { | ||||||
|  | +	/* MAC0: ADM6996I */ | ||||||
|  | +	{ 0, 0x0, LTQ_ETH_PORT_SWITCH, PHY_INTERFACE_MODE_RMII }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static const struct ltq_eth_board_config eth_board_config = { | ||||||
|  | +	.ports = eth_port_config, | ||||||
|  | +	.num_ports = ARRAY_SIZE(eth_port_config), | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_eth_init(bd_t *bis) | ||||||
|  | +{ | ||||||
|  | +	return ltq_eth_initialize(ð_board_config); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static struct switch_device adm6996i_dev = { | ||||||
|  | +	.name = "adm6996i", | ||||||
|  | +	.cpu_port = 5, | ||||||
|  | +	.port_mask = 0xF, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int board_switch_init(void) | ||||||
|  | +{ | ||||||
|  | +	/* Deactivate HRST line to release reset of ADM6996I switch */ | ||||||
|  | +	ltq_reset_once(LTQ_RESET_HARD, 200000); | ||||||
|  | + | ||||||
|  | +	/* ADM6996I needs some time to come out of reset */ | ||||||
|  | +	__udelay(50000); | ||||||
|  | + | ||||||
|  | +	return switch_device_register(&adm6996i_dev); | ||||||
|  | +} | ||||||
|  | diff --git a/board/arcadyan/arv7510pw/config.mk b/board/arcadyan/arv7510pw/config.mk | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9d8953b | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv7510pw/config.mk | ||||||
|  | @@ -0,0 +1,7 @@ | ||||||
|  | +# | ||||||
|  | +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com | ||||||
|  | +# | ||||||
|  | +# SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | +# | ||||||
|  | + | ||||||
|  | +PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(BOARDDIR) | ||||||
|  | diff --git a/board/arcadyan/arv7510pw/ddr_settings.h b/board/arcadyan/arv7510pw/ddr_settings.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..e63f591 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/board/arcadyan/arv7510pw/ddr_settings.h | ||||||
|  | @@ -0,0 +1,53 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Matti Laakso <malaakso@elisanet.fi> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#define MC_DC00_VALUE	0x1B1B | ||||||
|  | +#define MC_DC01_VALUE	0x0 | ||||||
|  | +#define MC_DC02_VALUE	0x0 | ||||||
|  | +#define MC_DC03_VALUE	0x0 | ||||||
|  | +#define MC_DC04_VALUE	0x0 | ||||||
|  | +#define MC_DC05_VALUE	0x200 | ||||||
|  | +#define MC_DC06_VALUE	0x605 | ||||||
|  | +#define MC_DC07_VALUE	0x303 | ||||||
|  | +#define MC_DC08_VALUE	0x102 | ||||||
|  | +#define MC_DC09_VALUE	0x70A | ||||||
|  | +#define MC_DC10_VALUE	0x203 | ||||||
|  | +#define MC_DC11_VALUE	0xC02 | ||||||
|  | +#define MC_DC12_VALUE	0x1C8 | ||||||
|  | +#define MC_DC13_VALUE	0x1 | ||||||
|  | +#define MC_DC14_VALUE	0x0 | ||||||
|  | +#define MC_DC15_VALUE	0x120 | ||||||
|  | +#define MC_DC16_VALUE	0xC800 | ||||||
|  | +#define MC_DC17_VALUE	0xD | ||||||
|  | +#define MC_DC18_VALUE	0x301 | ||||||
|  | +#define MC_DC19_VALUE	0x200 | ||||||
|  | +#define MC_DC20_VALUE	0xA04 | ||||||
|  | +#define MC_DC21_VALUE	0x1700 | ||||||
|  | +#define MC_DC22_VALUE	0x1717 | ||||||
|  | +#define MC_DC23_VALUE	0x0 | ||||||
|  | +#define MC_DC24_VALUE	0x52 | ||||||
|  | +#define MC_DC25_VALUE	0x0 | ||||||
|  | +#define MC_DC26_VALUE	0x0 | ||||||
|  | +#define MC_DC27_VALUE	0x0 | ||||||
|  | +#define MC_DC28_VALUE	0x510 | ||||||
|  | +#define MC_DC29_VALUE	0x4E20 | ||||||
|  | +#define MC_DC30_VALUE	0x8235 | ||||||
|  | +#define MC_DC31_VALUE	0x0 | ||||||
|  | +#define MC_DC32_VALUE	0x0 | ||||||
|  | +#define MC_DC33_VALUE	0x0 | ||||||
|  | +#define MC_DC34_VALUE	0x0 | ||||||
|  | +#define MC_DC35_VALUE	0x0 | ||||||
|  | +#define MC_DC36_VALUE	0x0 | ||||||
|  | +#define MC_DC37_VALUE	0x0 | ||||||
|  | +#define MC_DC38_VALUE	0x0 | ||||||
|  | +#define MC_DC39_VALUE	0x0 | ||||||
|  | +#define MC_DC40_VALUE	0x0 | ||||||
|  | +#define MC_DC41_VALUE	0x0 | ||||||
|  | +#define MC_DC42_VALUE	0x0 | ||||||
|  | +#define MC_DC43_VALUE	0x0 | ||||||
|  | +#define MC_DC44_VALUE	0x0 | ||||||
|  | +#define MC_DC45_VALUE	0x500 | ||||||
|  | +#define MC_DC46_VALUE	0x0 | ||||||
|  | diff --git a/boards.cfg b/boards.cfg | ||||||
|  | index 287f974..29156d4 100644 | ||||||
|  | --- a/boards.cfg | ||||||
|  | +++ b/boards.cfg | ||||||
|  | @@ -515,6 +515,9 @@ Active  mips        mips32         au1x00      -               pb1x00 | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_brn                        arv4519pw:SYS_BOOT_BRN                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_nor                        arv4519pw:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv4519pw           arv4519pw_ram                        arv4519pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv7510pw           arv7510pw_brn                        arv7510pw:SYS_BOOT_BRN                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv7510pw           arv7510pw_nor                        arv7510pw:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | +Active  mips        mips32         danube      arcadyan        arv7510pw           arv7510pw_ram                        arv7510pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_brn                        arv7518pw:SYS_BOOT_BRN                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_nor                        arv7518pw:SYS_BOOT_NOR                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  |  Active  mips        mips32         danube      arcadyan        arv7518pw           arv7518pw_ram                        arv7518pw:SYS_BOOT_RAM                                                                                                            Luka Perkov <luka@openwrt.org> | ||||||
|  | diff --git a/include/configs/arv7510pw.h b/include/configs/arv7510pw.h | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000..9eacfa1 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/include/configs/arv7510pw.h | ||||||
|  | @@ -0,0 +1,75 @@ | ||||||
|  | +/* | ||||||
|  | + * Copyright (C) 2013 Matti Laakso <malaakso@elisanet.fi> | ||||||
|  | + * | ||||||
|  | + * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#ifndef __CONFIG_H | ||||||
|  | +#define __CONFIG_H | ||||||
|  | + | ||||||
|  | +#define CONFIG_MACH_TYPE	"ARV7510PW" | ||||||
|  | +#define CONFIG_IDENT_STRING	" "CONFIG_MACH_TYPE | ||||||
|  | +#define CONFIG_BOARD_NAME	"Arcadyan ARV7510PW" | ||||||
|  | + | ||||||
|  | +/* Configure SoC */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_UART		/* Enable ASC and UART */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_ETHERNET	/* Enable ethernet */ | ||||||
|  | +#define CONFIG_LTQ_SUPPORT_NOR_FLASH	/* Have a parallel NOR flash */ | ||||||
|  | + | ||||||
|  | +/* Switch devices */ | ||||||
|  | +#define CONFIG_SWITCH_MULTI | ||||||
|  | +#define CONFIG_SWITCH_ADM6996I | ||||||
|  | + | ||||||
|  | +/* SSIO */ | ||||||
|  | +#define CONFIG_LTQ_SSIO_SHIFT_REGS | ||||||
|  | +#define CONFIG_LTQ_SSIO_EDGE_FALLING | ||||||
|  | +#define CONFIG_LTQ_SSIO_GPHY1_MODE	0 | ||||||
|  | +#define CONFIG_LTQ_SSIO_GPHY2_MODE	0 | ||||||
|  | +#define CONFIG_LTQ_SSIO_INIT_VALUE	0 | ||||||
|  | + | ||||||
|  | +/* Environment */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_NOR) | ||||||
|  | +#define CONFIG_ENV_IS_IN_FLASH | ||||||
|  | +#define CONFIG_ENV_OVERWRITE | ||||||
|  | +#define CONFIG_ENV_OFFSET		(256 * 1024) | ||||||
|  | +#define CONFIG_ENV_SECT_SIZE		(128 * 1024) | ||||||
|  | +#else | ||||||
|  | +#define CONFIG_ENV_IS_NOWHERE | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_SIZE			(8 * 1024) | ||||||
|  | +#define CONFIG_LOADADDR			CONFIG_SYS_LOAD_ADDR | ||||||
|  | + | ||||||
|  | +/* Brnboot loadable image */ | ||||||
|  | +#if defined(CONFIG_SYS_BOOT_BRN) | ||||||
|  | +#define CONFIG_SYS_TEXT_BASE		0x80002000 | ||||||
|  | +#define CONFIG_SKIP_LOWLEVEL_INIT | ||||||
|  | +#define CONFIG_SYS_DISABLE_CACHE | ||||||
|  | +#define CONFIG_ENV_OVERWRITE 1 | ||||||
|  | +#endif | ||||||
|  | + | ||||||
|  | +/* Console */ | ||||||
|  | +#define CONFIG_LTQ_ADVANCED_CONSOLE | ||||||
|  | +#define CONFIG_BAUDRATE			115200 | ||||||
|  | +#define CONFIG_CONSOLE_ASC		1 | ||||||
|  | +#define CONFIG_CONSOLE_DEV		"ttyLTQ1" | ||||||
|  | + | ||||||
|  | +/* Pull in default board configs for Lantiq XWAY Danube */ | ||||||
|  | +#include <asm/lantiq/config.h> | ||||||
|  | +#include <asm/arch/config.h> | ||||||
|  | + | ||||||
|  | +/* Buffered write broken in ARV7510PW */ | ||||||
|  | +#undef CONFIG_SYS_FLASH_USE_BUFFER_WRITE | ||||||
|  | + | ||||||
|  | +/* Pull in default OpenWrt configs for Lantiq SoC */ | ||||||
|  | +#include "openwrt-lantiq-common.h" | ||||||
|  | + | ||||||
|  | +#define CONFIG_ENV_UPDATE_UBOOT_NOR		\ | ||||||
|  | +	"update-uboot-nor=run load-uboot-nor write-uboot-nor\0" | ||||||
|  | + | ||||||
|  | +#define CONFIG_EXTRA_ENV_SETTINGS		\ | ||||||
|  | +	CONFIG_ENV_LANTIQ_DEFAULTS		\ | ||||||
|  | +	CONFIG_ENV_UPDATE_UBOOT_NOR		\ | ||||||
|  | +	"kernel_addr=0xB0060000\0" | ||||||
|  | + | ||||||
|  | +#endif /* __CONFIG_H */ | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,23 @@ | |||||||
|  | From 7e2f79bc40b572763a4a1ed69f63aa2eaa6df254 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  | Date: Sun, 20 Oct 2013 19:39:17 +0200 | ||||||
|  | Subject: Makefile: prepare u-boot-lantiq-v2013.10-openwrt4 | ||||||
|  |  | ||||||
|  | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | ||||||
|  |  | ||||||
|  | diff --git a/Makefile b/Makefile | ||||||
|  | index 0445035..d5a55f8 100644 | ||||||
|  | --- a/Makefile | ||||||
|  | +++ b/Makefile | ||||||
|  | @@ -8,7 +8,7 @@ | ||||||
|  |  VERSION = 2013 | ||||||
|  |  PATCHLEVEL = 10 | ||||||
|  |  SUBLEVEL = | ||||||
|  | -EXTRAVERSION = | ||||||
|  | +EXTRAVERSION = -openwrt4 | ||||||
|  |  ifneq "$(SUBLEVEL)" "" | ||||||
|  |  U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) | ||||||
|  |  else | ||||||
|  | --  | ||||||
|  | 1.8.3.2 | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user
	 John Crispin
					John Crispin