Compare commits
	
		
			No commits in common. "2016.05-am335x-netmodule" and "nmhw21-env-fix" have entirely different histories.
		
	
	
		
			2016.05-am
			...
			nmhw21-env
		
	
		|  | @ -391,12 +391,12 @@ config TARGET_AM335X_NETBIRD_V2 | ||||||
| 	select DM_GPIO | 	select DM_GPIO | ||||||
| 
 | 
 | ||||||
| config TARGET_AM335X_NRHW20 | config TARGET_AM335X_NRHW20 | ||||||
| 	bool "Support am335x_nrhw20" |         bool "Support am335x_nrhw20" | ||||||
| 	select CPU_V7 |         select CPU_V7 | ||||||
| 	select SUPPORT_SPL |         select SUPPORT_SPL | ||||||
| 	select DM |         select DM | ||||||
| 	select DM_SERIAL |         select DM_SERIAL | ||||||
| 	select DM_GPIO |         select DM_GPIO | ||||||
| 
 | 
 | ||||||
| config TARGET_AM335X_NMHW21 | config TARGET_AM335X_NMHW21 | ||||||
|         bool "Support am335x_nmhw21" |         bool "Support am335x_nmhw21" | ||||||
|  | @ -406,22 +406,6 @@ config TARGET_AM335X_NMHW21 | ||||||
|         select DM_SERIAL |         select DM_SERIAL | ||||||
|         select DM_GPIO |         select DM_GPIO | ||||||
| 
 | 
 | ||||||
| config TARGET_AM335X_NRHW24 |  | ||||||
| 	bool "Support am335x_nrhw24" |  | ||||||
| 	select CPU_V7 |  | ||||||
| 	select SUPPORT_SPL |  | ||||||
| 	select DM |  | ||||||
| 	select DM_SERIAL |  | ||||||
| 	select DM_GPIO |  | ||||||
| 
 |  | ||||||
| config TARGET_AM335X_HW25 |  | ||||||
| 	bool "Support am335x_hw25" |  | ||||||
| 	select CPU_V7 |  | ||||||
| 	select SUPPORT_SPL |  | ||||||
| 	select DM |  | ||||||
| 	select DM_SERIAL |  | ||||||
| 	select DM_GPIO |  | ||||||
| 
 |  | ||||||
| config TARGET_AM335X_SL50 | config TARGET_AM335X_SL50 | ||||||
| 	bool "Support am335x_sl50" | 	bool "Support am335x_sl50" | ||||||
| 	select CPU_V7 | 	select CPU_V7 | ||||||
|  | @ -922,8 +906,6 @@ source "board/nm/netbird/Kconfig" | ||||||
| source "board/nm/netbird_v2/Kconfig" | source "board/nm/netbird_v2/Kconfig" | ||||||
| source "board/nm/nrhw20/Kconfig" | source "board/nm/nrhw20/Kconfig" | ||||||
| source "board/nm/nmhw21/Kconfig" | source "board/nm/nmhw21/Kconfig" | ||||||
| source "board/nm/nrhw24/Kconfig" |  | ||||||
| source "board/nm/hw25/Kconfig" |  | ||||||
| source "board/olimex/mx23_olinuxino/Kconfig" | source "board/olimex/mx23_olinuxino/Kconfig" | ||||||
| source "board/phytec/pcm051/Kconfig" | source "board/phytec/pcm051/Kconfig" | ||||||
| source "board/phytec/pcm052/Kconfig" | source "board/phytec/pcm052/Kconfig" | ||||||
|  |  | ||||||
|  | @ -45,9 +45,12 @@ static const struct ns16550_platdata am33xx_serial[] = { | ||||||
| 	{ .base = CONFIG_SYS_NS16550_COM2, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | 	{ .base = CONFIG_SYS_NS16550_COM2, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | ||||||
| #  ifdef CONFIG_SYS_NS16550_COM3 | #  ifdef CONFIG_SYS_NS16550_COM3 | ||||||
| 	{ .base = CONFIG_SYS_NS16550_COM3, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | 	{ .base = CONFIG_SYS_NS16550_COM3, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | ||||||
|  | 
 | ||||||
|  | #   if 0 /* TODO: @@@rs */ | ||||||
| 	{ .base = CONFIG_SYS_NS16550_COM4, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | 	{ .base = CONFIG_SYS_NS16550_COM4, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | ||||||
| 	{ .base = CONFIG_SYS_NS16550_COM5, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | 	{ .base = CONFIG_SYS_NS16550_COM5, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | ||||||
| 	{ .base = CONFIG_SYS_NS16550_COM6, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | 	{ .base = CONFIG_SYS_NS16550_COM6, .reg_shift = 2, .clock = CONFIG_SYS_NS16550_CLK }, | ||||||
|  | #   endif | ||||||
| #  endif | #  endif | ||||||
| # endif | # endif | ||||||
| }; | }; | ||||||
|  | @ -58,9 +61,11 @@ U_BOOT_DEVICES(am33xx_uarts) = { | ||||||
| 	{ "ns16550_serial", &am33xx_serial[1] }, | 	{ "ns16550_serial", &am33xx_serial[1] }, | ||||||
| #   ifdef CONFIG_SYS_NS16550_COM3 | #   ifdef CONFIG_SYS_NS16550_COM3 | ||||||
| 	{ "ns16550_serial", &am33xx_serial[2] }, | 	{ "ns16550_serial", &am33xx_serial[2] }, | ||||||
|  | #    if 0 /* TODO: @@@rs */ | ||||||
| 	{ "ns16550_serial", &am33xx_serial[3] }, | 	{ "ns16550_serial", &am33xx_serial[3] }, | ||||||
| 	{ "ns16550_serial", &am33xx_serial[4] }, | 	{ "ns16550_serial", &am33xx_serial[4] }, | ||||||
| 	{ "ns16550_serial", &am33xx_serial[5] }, | 	{ "ns16550_serial", &am33xx_serial[5] }, | ||||||
|  | #    endif | ||||||
| #   endif | #   endif | ||||||
| #  endif | #  endif | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -170,7 +170,7 @@ void enable_basic_clocks(void) | ||||||
| 		&cmper->usb0clkctrl, | 		&cmper->usb0clkctrl, | ||||||
| 		&cmper->emiffwclkctrl, | 		&cmper->emiffwclkctrl, | ||||||
| 		&cmper->emifclkctrl, | 		&cmper->emifclkctrl, | ||||||
| 		&cmper->i2c2clkctrl, | 		&cmper->i2c2clkctrl,	/* TODO: Check whether required now that I2C1 is used */ | ||||||
| 		&cmper->spi1clkctrl, | 		&cmper->spi1clkctrl, | ||||||
| 		0 | 		0 | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  | @ -47,7 +47,6 @@ | ||||||
| #define BOOT_DEVICE_UART	0x41 | #define BOOT_DEVICE_UART	0x41 | ||||||
| #define BOOT_DEVICE_USBETH	0x44 | #define BOOT_DEVICE_USBETH	0x44 | ||||||
| #define BOOT_DEVICE_CPGMAC	0x46 | #define BOOT_DEVICE_CPGMAC	0x46 | ||||||
| #define BOOT_DEVICE_JTAG        0x58 |  | ||||||
| 
 | 
 | ||||||
| #define MMC_BOOT_DEVICES_START	BOOT_DEVICE_MMC1 | #define MMC_BOOT_DEVICES_START	BOOT_DEVICE_MMC1 | ||||||
| #define MMC_BOOT_DEVICES_END	BOOT_DEVICE_MMC2 | #define MMC_BOOT_DEVICES_END	BOOT_DEVICE_MMC2 | ||||||
|  |  | ||||||
|  | @ -30,8 +30,6 @@ | ||||||
|  *                         Fixed wrong sizeof type in GetPartition() |  *                         Fixed wrong sizeof type in GetPartition() | ||||||
|  *                         Changed 64 bit type to "long long" from struct |  *                         Changed 64 bit type to "long long" from struct | ||||||
|  *                         Added BD_VerifySha1Hmac() function |  *                         Added BD_VerifySha1Hmac() function | ||||||
|  *  20200615  rs           Added BD_Hw_Type tag |  | ||||||
|  *  |  | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | @ -162,32 +160,22 @@ typedef enum _BD_Tags | ||||||
| 
 | 
 | ||||||
|   BD_BOM_Patch          =    33,   /**<  "UInt8"      -> Hardware BOM patch of the equipment (BOM changes, same PCB, not SW relevant) */ |   BD_BOM_Patch          =    33,   /**<  "UInt8"      -> Hardware BOM patch of the equipment (BOM changes, same PCB, not SW relevant) */ | ||||||
|   BD_Prod_Variant_Name  =    34,   /**<  "String"     -> Product variant */ |   BD_Prod_Variant_Name  =    34,   /**<  "String"     -> Product variant */ | ||||||
|   BD_Hw_Type            =    35,   /*<<  "UInt16"     -> Hardware Type, e.g. 24 for HW24, 26 for HW26 */ | 
 | ||||||
|    |  | ||||||
|   BD_Ui_Adapter_Type    =  4096,   /**<  "UInt16"     -> IV OG2 UI adapterboard type (0 = not present) */ |   BD_Ui_Adapter_Type    =  4096,   /**<  "UInt16"     -> IV OG2 UI adapterboard type (0 = not present) */ | ||||||
|   BD_Voltage            =  4098,   /**<  "UInt8"      -> Primary Voltage (1=12-60V, 2=40-160V, 3=24-60V, 4=?, 5=12-24V) */ | 
 | ||||||
|    |   BD_Pd_Module0         =  4100, | ||||||
|   BD_Pd_Module0         =  4100,   /**<  "String"     -> */ |  | ||||||
|   BD_Pd_Module1         =  4101, |   BD_Pd_Module1         =  4101, | ||||||
|   BD_Pd_Module2         =  4102, |   BD_Pd_Module2         =  4102, | ||||||
|   BD_Pd_Module3         =  4103, |   BD_Pd_Module3         =  4103, | ||||||
|   BD_Pd_Module4         =  4104, |   BD_Pd_Module4         =  4104, | ||||||
|   BD_Pd_Module5         =  4105, |   BD_Pd_Module5         =  4105, | ||||||
|   BD_Pd_Phy0            =  4110,   /**<  "String"     -> */ |   BD_Pd_Sim             =  4122, | ||||||
|   BD_Pd_Phy1            =  4111,   /**<  "String"     -> */ |  | ||||||
|   BD_Pd_DIO             =  4120,   /**<  "String"     -> */ |  | ||||||
|   BD_Pd_Serial          =  4121,   /**<  "String"     -> */ |  | ||||||
|   BD_Pd_Sim             =  4122,   /**<  "String"     -> */ |  | ||||||
|   BD_Pd_Led             =  4123,   /**<  "String"     -> */ |  | ||||||
|   BD_Pd_UsbHost         =  4124,   /**<  "String"     -> */ |  | ||||||
|   PD_Dev_Tree           =  4125,   /**<  "String"     -> Devicetree file name */ |   PD_Dev_Tree           =  4125,   /**<  "String"     -> Devicetree file name */ | ||||||
|   BD_Patch              =  4126,   /**<  "UInt8"      -> Board patch level (after production) */ |   PD_SerDes             =  4128,   /**<  "Uint16"     -> SERDES Configuration (e.g. NB1800) */ | ||||||
|   BD_Pd_Phy2            =  4127,   /**<  "String"     -> */ |   PD_Shield             =  4129,   /**<  "String"     -> Shield Population (e.g. CAN/RS485) for NB800 */ | ||||||
|   PD_SerDes             =  4128,   /**<  "UInt16"     -> SERDES Configuration (e.g. NB1800) */ |  | ||||||
|   PD_Shield             =  4129,   /**<  "UInt16"     -> Assembled Shield (0=COM/IO, 1=DualCAN), 2=CAN/GNSS, 3=DualCAN Passive */ |  | ||||||
| 
 | 
 | ||||||
|   /* project specific tags */ |   /* project specific tags */ | ||||||
|   BD_BootPart           = 32768,   /**<  "UInt8" */ |   BD_BootPart			= 32768,   /**<  "UInt8" */ | ||||||
| 
 | 
 | ||||||
|   BD_None_Type          = 65535,   /**<  "Void"       -> None */ |   BD_None_Type          = 65535,   /**<  "Void"       -> None */ | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,14 +1,14 @@ | ||||||
| /******************************************************************************
 | /******************************************************************************
 | ||||||
|  * (c) COPYRIGHT 2010-2019 by NetModule AG, Switzerland. |  * (c) COPYRIGHT 2010 by NetModule AG, Switzerland.  All rights reserved. | ||||||
|  * |  * | ||||||
|  * The program(s) may only be used and/or copied with the written permission |  * The program(s) may only be used and/or copied with the written permission | ||||||
|  * from NetModule AG or in accordance with the terms and conditions stipulated |  * from NetModule AG or in accordance with the terms and conditions stipulated | ||||||
|  * in the agreement contract under which the program(s) have been supplied. |  * in the agreement contract under which the program(s) have been supplied. | ||||||
|  * |  * | ||||||
|  * PACKAGE : NetModule Common Hardware Abstraction |  * PACKAGE : NetBox HW08 | ||||||
|  * |  * | ||||||
|  * ABSTRACT: |  * ABSTRACT: | ||||||
|  *  Board descriptor library |  *  Implements functions for settings | ||||||
|  * |  * | ||||||
|  * HISTORY: |  * HISTORY: | ||||||
|  *  Date      Author       Description |  *  Date      Author       Description | ||||||
|  | @ -16,129 +16,18 @@ | ||||||
|  *  20100903  rs           reading carrier board descriptor from EEPROM at 54. |  *  20100903  rs           reading carrier board descriptor from EEPROM at 54. | ||||||
|  *                         code cleanup (tabs/indentation) |  *                         code cleanup (tabs/indentation) | ||||||
|  *  20110211  rs           partition table handling |  *  20110211  rs           partition table handling | ||||||
|  *  20190330  rs           cleanup after years of chaotic development |  | ||||||
|  *  20200615  rs           added bd_get_hw_type() |  | ||||||
|  * |  * | ||||||
|  *****************************************************************************/ |  *****************************************************************************/ | ||||||
| #include <common.h> | #include <common.h> | ||||||
| #include <i2c.h> | #include <i2c.h> | ||||||
| #include <malloc.h> | #include <malloc.h> | ||||||
| 
 | 
 | ||||||
| #include "board_descriptor.h"	/* own header file */ | #include "bdparser.h"		/* tlv parser */ | ||||||
| 
 | 
 | ||||||
|  | #define MAX_PARTITION_ENTRIES			4 | ||||||
| 
 | 
 | ||||||
| #define MAX_PARTITION_ENTRIES	4 | static const BD_Context		*bdctx_list;		/* The board descriptor context */ | ||||||
| 
 | static size_t				bdctx_count = 0; | ||||||
| 
 |  | ||||||
| static const BD_Context		*bdctx_list; |  | ||||||
| static size_t			bdctx_count = 0; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static bd_bool_t _get_string(bd_uint16_t tag, bd_uint_t index, char* pResult, bd_size_t bufLen) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < bdctx_count; i++) { |  | ||||||
| 		if (BD_GetString(&bdctx_list[i], tag, index, pResult, bufLen)) { |  | ||||||
| 			return BD_TRUE; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return BD_FALSE; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static bd_bool_t _get_mac(bd_uint16_t tag, bd_uint_t index, bd_uint8_t pResult[6]) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < bdctx_count; i++) { |  | ||||||
| 		if (BD_GetMAC(&bdctx_list[i], tag, index, pResult)) { |  | ||||||
| 			return BD_TRUE; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return BD_FALSE; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static bd_bool_t _get_uint8(bd_uint16_t tag, bd_uint_t index, bd_uint8_t* pResult) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < bdctx_count; i++) { |  | ||||||
| 		if (BD_GetUInt8(&bdctx_list[i], tag, index, pResult)) { |  | ||||||
| 			return BD_TRUE; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return BD_FALSE; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static bd_bool_t _get_uint16(bd_uint16_t tag, bd_uint_t index, bd_uint16_t* pResult) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < bdctx_count; i++) { |  | ||||||
| 		if (BD_GetUInt16(&bdctx_list[i], tag, index, pResult)) { |  | ||||||
| 			return BD_TRUE; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return BD_FALSE; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static bd_bool_t _get_uint32(bd_uint16_t tag, bd_uint_t index, bd_uint32_t* pResult) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < bdctx_count; i++) { |  | ||||||
| 		if (BD_GetUInt32(&bdctx_list[i], tag, index, pResult)) { |  | ||||||
| 			return BD_TRUE; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return BD_FALSE; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static bd_bool_t _get_partition64(bd_uint16_t tag, bd_uint_t index, BD_PartitionEntry64 *pResult) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < bdctx_count; i++) { |  | ||||||
| 		if (BD_GetPartition64(&bdctx_list[i], tag, index, pResult)) { |  | ||||||
| 			return BD_TRUE; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return BD_FALSE; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static uint8_t _try_partition_read(void) |  | ||||||
| { |  | ||||||
| 	BD_PartitionEntry64 partition; |  | ||||||
| 	int i; |  | ||||||
| 	int rc; |  | ||||||
| 	int partition_count = 0; |  | ||||||
| 	int boot_partition = 0; |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < MAX_PARTITION_ENTRIES; i++) |  | ||||||
| 	{ |  | ||||||
| 		rc = _get_partition64(BD_Partition64, i, &partition); |  | ||||||
| 		if (rc) { |  | ||||||
| 			partition_count++; |  | ||||||
| 			if (((partition.flags & BD_Partition_Flags_Active) != 0) && |  | ||||||
| 			    (i > 0)) { |  | ||||||
| 				boot_partition = i; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (partition_count < 1) { |  | ||||||
| 		printf("ERROR: Too few partitions defined, taking default 0\n"); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return boot_partition; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| void bd_register_context_list(const BD_Context *list, size_t count) | void bd_register_context_list(const BD_Context *list, size_t count) | ||||||
| { | { | ||||||
|  | @ -190,7 +79,8 @@ int bd_get_context(BD_Context *bdctx, uint32_t i2caddress, uint32_t offset) | ||||||
| 	return 0; | 	return 0; | ||||||
| 
 | 
 | ||||||
| exit1: | exit1: | ||||||
| 	if (pBdData != NULL) { | 	if (pBdData != NULL) | ||||||
|  | 	{ | ||||||
| 		free(pBdData); | 		free(pBdData); | ||||||
| 		pBdData = NULL; | 		pBdData = NULL; | ||||||
| 	} | 	} | ||||||
|  | @ -198,6 +88,84 @@ exit1: | ||||||
| 	return -1; | 	return -1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static bd_bool_t _get_string(bd_uint16_t tag, bd_uint_t index, char* pResult, bd_size_t bufLen ) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	for (i = 0; i < bdctx_count; i++) { | ||||||
|  | 		if (BD_GetString(&bdctx_list[i], tag, index, pResult, bufLen)) { | ||||||
|  | 			return BD_TRUE; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return BD_FALSE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static bd_bool_t _get_mac( bd_uint16_t tag, bd_uint_t index, bd_uint8_t pResult[6] ) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	for (i = 0; i < bdctx_count; i++) { | ||||||
|  | 		if (BD_GetMAC(&bdctx_list[i], tag, index, pResult)) { | ||||||
|  | 			return BD_TRUE; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return BD_FALSE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static bd_bool_t _get_uint8( bd_uint16_t tag, bd_uint_t index, bd_uint8_t* pResult ) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	for (i = 0; i < bdctx_count; i++) { | ||||||
|  | 		if (BD_GetUInt8(&bdctx_list[i], tag, index, pResult)) { | ||||||
|  | 			return BD_TRUE; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return BD_FALSE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static bd_bool_t _get_uint16( bd_uint16_t tag, bd_uint_t index, bd_uint16_t* pResult ) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	for (i = 0; i < bdctx_count; i++) { | ||||||
|  | 		if (BD_GetUInt16(&bdctx_list[i], tag, index, pResult)) { | ||||||
|  | 			return BD_TRUE; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return BD_FALSE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static bd_bool_t _get_uint32( bd_uint16_t tag, bd_uint_t index, bd_uint32_t* pResult ) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	for (i = 0; i < bdctx_count; i++) { | ||||||
|  | 		if (BD_GetUInt32(&bdctx_list[i], tag, index, pResult)) { | ||||||
|  | 			return BD_TRUE; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return BD_FALSE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static bd_bool_t _get_partition64( bd_uint16_t tag, bd_uint_t index, BD_PartitionEntry64 *pResult) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	for (i = 0; i < bdctx_count; i++) { | ||||||
|  | 		if (BD_GetPartition64(&bdctx_list[i], tag, index, pResult)) { | ||||||
|  | 			return BD_TRUE; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return BD_FALSE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int bd_get_prodname(char *prodname, size_t len) | int bd_get_prodname(char *prodname, size_t len) | ||||||
| { | { | ||||||
| 	if ( !_get_string( BD_Prod_Name, 0, prodname, len) ) { | 	if ( !_get_string( BD_Prod_Name, 0, prodname, len) ) { | ||||||
|  | @ -208,30 +176,11 @@ int bd_get_prodname(char *prodname, size_t len) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int bd_get_variantname(char *variantname, size_t len) |  | ||||||
| { |  | ||||||
| 	if ( !_get_string( BD_Prod_Variant_Name, 0, variantname, len) ) { |  | ||||||
| 		debug("%s() Variant name not found\n", __func__); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void bd_get_hw_type(int* type) |  | ||||||
| { |  | ||||||
| 	uint16_t hwtype = 0; |  | ||||||
| 
 |  | ||||||
| 	if ( !_get_uint16( BD_Hw_Type, 0, &hwtype) ) |  | ||||||
| 		debug("%s() no Hw Type found\n", __func__); |  | ||||||
| 
 |  | ||||||
| 	*type = hwtype; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void bd_get_hw_version(int* ver, int* rev) | void bd_get_hw_version(int* ver, int* rev) | ||||||
| { | { | ||||||
| 	uint8_t hwver = 0; | 	// TODO: Warum static?
 | ||||||
| 	uint8_t hwrev = 0; | 	static uint8_t hwver; | ||||||
|  | 	static uint8_t hwrev; | ||||||
| 
 | 
 | ||||||
| 	if ( !_get_uint8( BD_Hw_Ver, 0, &hwver) ) | 	if ( !_get_uint8( BD_Hw_Ver, 0, &hwver) ) | ||||||
| 		debug("%s() no Hw Version found\n", __func__); | 		debug("%s() no Hw Version found\n", __func__); | ||||||
|  | @ -245,7 +194,7 @@ void bd_get_hw_version(int* ver, int* rev) | ||||||
| 
 | 
 | ||||||
| void bd_get_hw_patch(int* patch) | void bd_get_hw_patch(int* patch) | ||||||
| { | { | ||||||
| 	uint8_t hwpatch = 0; | 	uint8_t hwpatch; | ||||||
| 
 | 
 | ||||||
| 	if ( !_get_uint8( BD_BOM_Patch, 0, &hwpatch) ) | 	if ( !_get_uint8( BD_BOM_Patch, 0, &hwpatch) ) | ||||||
| 		debug("%s() no Hw Patch found\n", __func__); | 		debug("%s() no Hw Patch found\n", __func__); | ||||||
|  | @ -255,7 +204,7 @@ void bd_get_hw_patch(int* patch) | ||||||
| 
 | 
 | ||||||
| int bd_get_mac(int index, uint8_t *macaddr, size_t len) | int bd_get_mac(int index, uint8_t *macaddr, size_t len) | ||||||
| { | { | ||||||
| 	if ( len != 6 ) { | 	if (len != 6) { | ||||||
| 		debug("macaddr size must be 6 (is %d)", len); | 		debug("macaddr size must be 6 (is %d)", len); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  | @ -269,37 +218,17 @@ int bd_get_mac(int index, uint8_t *macaddr, size_t len) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| uint32_t bd_get_fpgainfo(void) | u32 bd_get_fpgainfo(void) | ||||||
| { | { | ||||||
| 	uint32_t fpgainfo = 0xFFFFFFFF; | 	uint32_t fpgainfo = 0xFFFFFFFF; | ||||||
| 
 | 
 | ||||||
| 	if ( !_get_uint32( BD_Fpga_Info, 0, &fpgainfo) ) | 	if ( !_get_uint32( BD_Fpga_Info, 0, &fpgainfo) ) | ||||||
| 		debug("%s() no FGPA Info found\n", __func__); | 		debug("%s() no Fpga Info found\n", __func__); | ||||||
| 
 | 
 | ||||||
| 	return fpgainfo; | 	return fpgainfo; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int bd_get_pd_dio(char *config, size_t len) | int bd_get_pd_module(int slot, char *config, size_t len) | ||||||
| { |  | ||||||
| 	if ( !_get_string(BD_Pd_DIO, 0, config, len) ) { |  | ||||||
| 		debug("%s() no DIO info\n", __func__); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int bd_get_pd_serial(char *config, size_t len) |  | ||||||
| { |  | ||||||
| 	if ( !_get_string(BD_Pd_Serial, 0, config, len) ) { |  | ||||||
| 		debug("%s() no serial port info\n", __func__); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int bd_get_pd_module(uint32_t slot, char *config, size_t len) |  | ||||||
| { | { | ||||||
| 	if ( !_get_string(BD_Pd_Module0 + slot, 0, config, len) ) { | 	if ( !_get_string(BD_Pd_Module0 + slot, 0, config, len) ) { | ||||||
| 		debug("%s() could not read module configuration on slot %d\n", | 		debug("%s() could not read module configuration on slot %d\n", | ||||||
|  | @ -313,7 +242,7 @@ int bd_get_pd_module(uint32_t slot, char *config, size_t len) | ||||||
| int bd_get_sim_config(char* simconfig, size_t len) | int bd_get_sim_config(char* simconfig, size_t len) | ||||||
| { | { | ||||||
| 	if (!_get_string(BD_Pd_Sim, 0, simconfig, len)) { | 	if (!_get_string(BD_Pd_Sim, 0, simconfig, len)) { | ||||||
| 		debug("%s() no valid SIM config found\n", __func__); | 		debug("%s() No valid SIM Config found\n", __func__); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -323,14 +252,14 @@ int bd_get_sim_config(char* simconfig, size_t len) | ||||||
| int bd_get_devicetree(char* devicetreename, size_t len) | int bd_get_devicetree(char* devicetreename, size_t len) | ||||||
| { | { | ||||||
| 	if (!_get_string(PD_Dev_Tree, 0, devicetreename, len)) { | 	if (!_get_string(PD_Dev_Tree, 0, devicetreename, len)) { | ||||||
| 		debug("%s() no valid devicetree name found\n", __func__); | 		debug("%s() No valid Devicetree name found\n", __func__); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int bd_get_shield(uint32_t shieldnr) | int bd_get_shield(int shieldnr) | ||||||
| { | { | ||||||
| 	bd_uint16_t shield = 0; | 	bd_uint16_t shield = 0; | ||||||
| 
 | 
 | ||||||
|  | @ -342,17 +271,46 @@ int bd_get_shield(uint32_t shieldnr) | ||||||
| 	return shield; | 	return shield; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| uint8_t bd_get_boot_partition(void) | static u8 try_partition_read(void) | ||||||
| { | { | ||||||
| 	uint8_t boot_part; | 	BD_PartitionEntry64 partition; | ||||||
|  | 	int i; | ||||||
|  | 	int rc; | ||||||
|  | 	int partition_count = 0; | ||||||
|  | 	int boot_partition = 0; | ||||||
| 
 | 
 | ||||||
| 	/* If we have a Bootpartition entry take this as boot part */ | 	for (i = 0; i < MAX_PARTITION_ENTRIES; i++) | ||||||
| 	if (_get_uint8( BD_BootPart, 0, &boot_part) ) { | 	{ | ||||||
|  | 		rc = _get_partition64(BD_Partition64, i, &partition); | ||||||
|  | 		if (rc) { | ||||||
|  | 			partition_count++; | ||||||
|  | 			if (((partition.flags & BD_Partition_Flags_Active) != 0) && | ||||||
|  | 					(i > 0)) { | ||||||
|  | 				boot_partition = i; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if (partition_count < 1) | ||||||
|  | 	{ | ||||||
|  | 		printf("ERROR: Too few partitions defined, taking default 0\n"); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return boot_partition; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int bd_get_boot_partition(void) | ||||||
|  | { | ||||||
|  | 	u8 boot_part; | ||||||
|  | 
 | ||||||
|  | 	/* If we have a new Bootpartition entry take this as boot part */ | ||||||
|  | 	if ( _get_uint8( BD_BootPart, 0, &boot_part) ) { | ||||||
| 		if (boot_part >= 0 && boot_part <= 1) { | 		if (boot_part >= 0 && boot_part <= 1) { | ||||||
| 			return boot_part; | 			return boot_part; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* If we don't have a Bootpartition entry, perhaps we have a partition table */ | 	/* If we not have a Bootpartition entry, perhaps we have a partition table */ | ||||||
| 	return _try_partition_read(); | 	return try_partition_read(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Board descriptor library |  * Library to support early TI EVM EEPROM handling | ||||||
|  * |  * | ||||||
|  * (c) COPYRIGHT 2010-2019 by NetModule AG, Switzerland. |  * Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com
 | ||||||
|  * |  * | ||||||
|  * SPDX-License-Identifier:	GPL-2.0+ |  * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  */ |  */ | ||||||
|  | @ -9,25 +9,15 @@ | ||||||
| #ifndef __BOARD_DESCRIPTOR_H | #ifndef __BOARD_DESCRIPTOR_H | ||||||
| #define __BOARD_DESCRIPTOR_H | #define __BOARD_DESCRIPTOR_H | ||||||
| 
 | 
 | ||||||
| #include "bdparser.h"		/* BD_Context */ | int bd_read(int bus_addr, int dev_addr); | ||||||
| 
 | u8 bd_get_boot_partition(void); | ||||||
| 
 | int bd_get_mac(uint index, u8 *mac_address, u32 len); | ||||||
| void bd_register_context_list(const BD_Context *list, size_t count); | int bd_get_hw_version(int* ver, int* rev); | ||||||
| int bd_get_context(BD_Context *bdctx, uint32_t i2caddress, uint32_t offset); |  | ||||||
| 
 |  | ||||||
| int bd_get_prodname(char *prodname, size_t len); |  | ||||||
| int bd_get_variantname(char *variantname, size_t len); |  | ||||||
| void bd_get_hw_type(int* type); |  | ||||||
| void bd_get_hw_version(int* ver, int* rev); |  | ||||||
| void bd_get_hw_patch(int* patch); | void bd_get_hw_patch(int* patch); | ||||||
| int bd_get_mac(int index, uint8_t *macaddr, size_t len); |  | ||||||
| uint32_t bd_get_fpgainfo(void); |  | ||||||
| int bd_get_pd_dio(char *config, size_t len); |  | ||||||
| int bd_get_pd_serial(char *config, size_t len); |  | ||||||
| int bd_get_pd_module(uint32_t slot, char *config, size_t len); |  | ||||||
| int bd_get_sim_config(char* simconfig, size_t len); |  | ||||||
| int bd_get_devicetree(char* devicetreename, size_t len); | int bd_get_devicetree(char* devicetreename, size_t len); | ||||||
| int bd_get_shield(uint32_t shieldnr); | int bd_get_context(BD_Context *bdctx, uint32_t i2caddress, uint32_t offset); | ||||||
| uint8_t bd_get_boot_partition(void); | void bd_register_context_list(const BD_Context *list, size_t count); | ||||||
|  | u8 bd_get_boot_partition(void); | ||||||
|  | int bd_get_shield(int shieldnr); | ||||||
| 
 | 
 | ||||||
| #endif	/* __BOARD_DESCRIPTOR_H */ | #endif	/* __BOARD_DESCRIPTOR_H */ | ||||||
|  |  | ||||||
|  | @ -1,36 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * ether_crc.c |  | ||||||
|  * |  | ||||||
|  * Ethernet CRC computation |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2018-2020 NetModule AG - http://www.netmodule.com/
 |  | ||||||
|  * |  | ||||||
|  * SPDX-License-Identifier:	GPL-2.0+ |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #include <common.h> |  | ||||||
| 
 |  | ||||||
| #include "ether_crc.h" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| uint32_t ether_crc(size_t len, uint8_t const *p) |  | ||||||
| { |  | ||||||
| 	uint32_t crc; |  | ||||||
| 	unsigned i; |  | ||||||
| 
 |  | ||||||
| 	crc = ~0; |  | ||||||
| 	while (len--) { |  | ||||||
| 		crc ^= *p++; |  | ||||||
| 		for (i = 0; i < 8; i++) |  | ||||||
| 			crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* an reverse the bits, cuz of way they arrive -- last-first */ |  | ||||||
| 	crc = (crc >> 16) | (crc << 16); |  | ||||||
| 	crc = (crc >> 8 & 0x00ff00ff) | (crc << 8 & 0xff00ff00); |  | ||||||
| 	crc = (crc >> 4 & 0x0f0f0f0f) | (crc << 4 & 0xf0f0f0f0); |  | ||||||
| 	crc = (crc >> 2 & 0x33333333) | (crc << 2 & 0xcccccccc); |  | ||||||
| 	crc = (crc >> 1 & 0x55555555) | (crc << 1 & 0xaaaaaaaa); |  | ||||||
| 	 |  | ||||||
| 	return crc; |  | ||||||
| } |  | ||||||
|  | @ -1,18 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * ether_crc.h |  | ||||||
|  * |  | ||||||
|  * Ethernet CRC computation |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2018-2020 NetModule AG - http://www.netmodule.com/
 |  | ||||||
|  * |  | ||||||
|  * SPDX-License-Identifier:	GPL-2.0+ |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #ifndef ETHER_CRC_H |  | ||||||
| #define ETHER_CRC_H |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| extern uint32_t ether_crc(size_t len, uint8_t const *p); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #endif /* ETHER_CRC_H */ |  | ||||||
|  | @ -1,26 +0,0 @@ | ||||||
| if TARGET_AM335X_HW25 |  | ||||||
| 
 |  | ||||||
| config SYS_BOARD |  | ||||||
|         default "hw25" |  | ||||||
| 
 |  | ||||||
| config SYS_VENDOR |  | ||||||
|         default "nm" |  | ||||||
| 
 |  | ||||||
| config SYS_SOC |  | ||||||
|         default "am33xx" |  | ||||||
| 
 |  | ||||||
| config SYS_CONFIG_NAME |  | ||||||
|         default "am335x_hw25" |  | ||||||
| 
 |  | ||||||
| config CONS_INDEX |  | ||||||
|         int "UART used for console" |  | ||||||
|         range 1 6 |  | ||||||
|         default 1 |  | ||||||
|         help |  | ||||||
|           The AM335x SoC has a total of 6 UARTs (UART0 to UART5 as referenced |  | ||||||
|           in documentation, etc) available to it.  Depending on your specific |  | ||||||
|           board you may want something other than UART0 as for example the IDK |  | ||||||
|           uses UART3 so enter 4 here. |  | ||||||
| 
 |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
|  | @ -1,13 +0,0 @@ | ||||||
| #
 |  | ||||||
| # Makefile
 |  | ||||||
| #
 |  | ||||||
| # Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  | ||||||
| #
 |  | ||||||
| # SPDX-License-Identifier:	GPL-2.0+
 |  | ||||||
| #
 |  | ||||||
| 
 |  | ||||||
| ifeq ($(CONFIG_SKIP_LOWLEVEL_INIT),) |  | ||||||
| obj-y	:= mux.o |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
| obj-y	+= board.o ../common/bdparser.o ../common/board_descriptor.o ../common/da9063.o ../common/ether_crc.o fileaccess.o |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,26 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * board.h |  | ||||||
|  * |  | ||||||
|  * TI AM335x boards information header |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
 |  | ||||||
|  * |  | ||||||
|  * SPDX-License-Identifier:	GPL-2.0+ |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #ifndef _BOARD_H_ |  | ||||||
| #define _BOARD_H_ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * We have three pin mux functions that must exist.  We must be able to enable |  | ||||||
|  * uart0, for initial output and i2c2 to read the main EEPROM.  We then have a |  | ||||||
|  * main pinmux function that can be overridden to enable all other pinmux that |  | ||||||
|  * is required on the board. |  | ||||||
|  */ |  | ||||||
| void enable_uart0_pin_mux(void); |  | ||||||
| 
 |  | ||||||
| void enable_board_pin_mux(void); |  | ||||||
| 
 |  | ||||||
| #define GPIO_TO_PIN(bank, gpio)		(32 * (bank) + (gpio)) |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
|  | @ -1,40 +0,0 @@ | ||||||
| #include <common.h> |  | ||||||
| #include <fs.h> |  | ||||||
| 
 |  | ||||||
| #define BLOCK_DEVICE "mmc" |  | ||||||
| #define OVERLAY_PART "1:3" |  | ||||||
| 
 |  | ||||||
| int read_file(const char* filename, char *buf, int size) |  | ||||||
| { |  | ||||||
| 	loff_t filesize = 0; |  | ||||||
| 	loff_t len; |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	if (fs_set_blk_dev(BLOCK_DEVICE, OVERLAY_PART, FS_TYPE_EXT) != 0) { |  | ||||||
| 		puts("Error, can not set blk device\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* Read at most file size bytes */ |  | ||||||
| 	if (fs_size(filename, &filesize)) { |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (filesize < size) |  | ||||||
| 		size = filesize; |  | ||||||
| 
 |  | ||||||
| 	/* For very unclear reasons the block device needs to be set again after the call to fs_size() */ |  | ||||||
| 	if (fs_set_blk_dev(BLOCK_DEVICE, OVERLAY_PART, FS_TYPE_EXT) != 0) { |  | ||||||
| 		puts("Error, can not set blk device\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if ((ret = fs_read(filename, (ulong)buf, 0, size, &len))) { |  | ||||||
| 		printf("Can't read file %s (size %d, len %lld, ret %d)\n", filename, size, len, ret); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	buf[len] = 0; |  | ||||||
| 
 |  | ||||||
| 	return len; |  | ||||||
| } |  | ||||||
|  | @ -1,14 +0,0 @@ | ||||||
| /**@file	/home/eichenberger/projects/nbhw16/u-boot/board/nm/netbird_v2/fileaccess.h
 |  | ||||||
|  * @author	eichenberger |  | ||||||
|  * @version	704 |  | ||||||
|  * @date |  | ||||||
|  * 	Created:	Tue 06 Jun 2017 02:02:33 PM CEST \n |  | ||||||
|  * 	Last Update:	Tue 06 Jun 2017 02:02:33 PM CEST |  | ||||||
|  */ |  | ||||||
| #ifndef FILEACCESS_H |  | ||||||
| #define FILEACCESS_H |  | ||||||
| 
 |  | ||||||
| void fs_set_console(void); |  | ||||||
| int read_file(const char* filename, char *buf, int size); |  | ||||||
| 
 |  | ||||||
| #endif // FILEACCESS_H
 |  | ||||||
|  | @ -1,223 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * mux.c |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2018-2019 NetModule AG - http://www.netmodule.com/
 |  | ||||||
|  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  | ||||||
|  * |  | ||||||
|  * This program is free software; you can redistribute it and/or |  | ||||||
|  * modify it under the terms of the GNU General Public License as |  | ||||||
|  * published by the Free Software Foundation version 2. |  | ||||||
|  * |  | ||||||
|  * This program is distributed "as is" WITHOUT ANY WARRANTY of any |  | ||||||
|  * kind, whether express or implied; without even the implied warranty |  | ||||||
|  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #include <common.h> |  | ||||||
| #include <asm/arch/sys_proto.h> |  | ||||||
| #include <asm/arch/hardware.h> |  | ||||||
| #include <asm/arch/mux.h> |  | ||||||
| #include <asm/io.h> |  | ||||||
| #include "board.h" |  | ||||||
| 
 |  | ||||||
| static struct module_pin_mux gpio_pin_mux[] = { |  | ||||||
| 	/*
 |  | ||||||
| 	* CPU GPIOs |  | ||||||
| 	* |  | ||||||
| 	* (J18) GPIO0_16: RST_PHY~ |  | ||||||
| 	* (U10) GPIO0_22: SEL_RS232/RS485~ |  | ||||||
| 	* (T10) GPIO0_23: EN_RS485_TERM~ |  | ||||||
| 	* (T11) GPIO0_26: IO_OUT1 |  | ||||||
| 	* (U12) GPIO0_27: IO_OUT2 |  | ||||||
| 	* |  | ||||||
| 	* (T12) GPIO1_12: IO_IN0 |  | ||||||
| 	* (T13) GPIO1_13: IO_IN1 |  | ||||||
| 	* (T14) GPIO1_14: IO_IN2 |  | ||||||
| 	* (T15) GPIO1_15: IO_IN3 |  | ||||||
| 	* |  | ||||||
| 	* (T13) GPIO2_0: RST_SDCARD~ |  | ||||||
| 	* (L17) GPIO2_18: GSM_PWR_EN |  | ||||||
| 	* (L16) GPIO2_19: RST_GSM |  | ||||||
| 	* |  | ||||||
| 	* (K18) GPIO3_9: WLAN_IRQ |  | ||||||
| 	* (L18) GPIO3_10: WLAN_EN |  | ||||||
| 	* (C12) GPIO3_17: SIM_SEL |  | ||||||
| 	*/ |  | ||||||
| 
 |  | ||||||
| 	/* Bank 0 */ |  | ||||||
| 	{OFFSET(mii1_txd3), (MODE(7) | PULLUDDIS)},				/* (J18) gpio0[16] */  /* RST_PHY~ */ |  | ||||||
| 	{OFFSET(gpmc_ad8), (MODE(7) | PULLUDDIS)},				/* (U10) gpio0[22] */  /* SEL_RS232/RS485~ */ |  | ||||||
| 	{OFFSET(gpmc_ad9), (MODE(7) | PULLUDDIS)},				/* (T10) gpio0[23] */  /* EN_RS485_TERM~ */ |  | ||||||
| 	{OFFSET(gpmc_ad10), (MODE(7) | PULLUDDIS)},				/* (T11) gpio0[26] */  /* IO_OUT1 */ |  | ||||||
| 	{OFFSET(gpmc_ad11), (MODE(7) | PULLUDDIS)},				/* (U12) gpio0[27] */  /* IO_OUT2 */ |  | ||||||
| 
 |  | ||||||
| 	/* Bank 1 */ |  | ||||||
| 	{OFFSET(gpmc_ad12), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (T12) gpio1[12] */  /* IO_IN0 */ |  | ||||||
| 	{OFFSET(gpmc_ad13), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (R12) gpio1[13] */  /* IO_IN1 */ |  | ||||||
| 	{OFFSET(gpmc_ad14), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (V13) gpio1[14] */  /* IO_IN2 */ |  | ||||||
| 	{OFFSET(gpmc_ad15), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (U13) gpio1[15] */  /* IO_IN3 */ |  | ||||||
| 
 |  | ||||||
| 	/* TODO: What about all the unused GPMC pins ? */ |  | ||||||
| 
 |  | ||||||
| 	/* Bank 2 */ |  | ||||||
| 	{OFFSET(gpmc_be1n), (MODE(7) | PULLUDDIS)},				/* (T13) gpio2[0] */  /* RST_SDCARD~ */ |  | ||||||
| 	{OFFSET(mii1_rxd3), (MODE(7) | PULLUDDIS)},				/* (L17) gpio2[18] */  /* GSM_PWR_EN */ |  | ||||||
| 	{OFFSET(mii1_rxd2),  (MODE(7) | PULLUDDIS)},				/* (L16) gpio2[19] */  /* RST_GSM */ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #if 0 |  | ||||||
| 	/* TODO: What is this meant for? */ |  | ||||||
| 	{OFFSET(lcd_data3), (MODE(7) | PULLUDEN | PULLUP_EN)},	/* (R4) gpio2[9] */  /* SYSBOOT_3 */ |  | ||||||
| 	{OFFSET(lcd_data4), (MODE(7) | PULLUDEN | PULLUP_EN)},	/* (T1) gpio2[10] */  /* SYSBOOT_4 */ |  | ||||||
| 
 |  | ||||||
| 	/* TODO: Check other unued pins from sysboot block */ |  | ||||||
| 	/* Ensure PU/PD does not work against external signal */ |  | ||||||
| 	/*
 |  | ||||||
| 	 * SYSBOOT 0,1,5,12,13 = Low |  | ||||||
| 	 * SYSBOOT 2 = High |  | ||||||
| 	 */ |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	/* Bank 3 */ |  | ||||||
| 	{OFFSET(mii1_txclk),  (MODE(7) | PULLUDDIS | RXACTIVE)},		/* (K18) gpio3[9] */  /* WLAN_IRQ */ |  | ||||||
| 	{OFFSET(mii1_rxclk), (MODE(7) | PULLUDDIS)},				/* (L18) gpio3[10] */  /* WLAN_EN */ |  | ||||||
| 	{OFFSET(mcasp0_ahclkr), (MODE(7) | PULLUDEN | PULLDOWN_EN)},		/* (C12) gpio3[17] */  /* SIM_SEL */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* I2C0 PMIC */ |  | ||||||
| static struct module_pin_mux i2c0_pin_mux[] = { |  | ||||||
| 	{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C17) I2C0_SDA */ |  | ||||||
| 	{OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C16) I2C0_SCL */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* I2C2 System */ |  | ||||||
| static struct module_pin_mux i2c2_pin_mux[] = { |  | ||||||
| 	{OFFSET(uart1_rtsn), (MODE(3) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (D17) I2C2_SCL */ |  | ||||||
| 	{OFFSET(uart1_ctsn), (MODE(3) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (D18) I2C2_SDA */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* RMII1: Ethernet */ |  | ||||||
| static struct module_pin_mux rmii1_pin_mux[] = { |  | ||||||
| 	/* RMII */ |  | ||||||
| 	{OFFSET(mii1_crs), MODE(1) | PULLUDDIS | RXACTIVE},			/* (H17) rmii1_crs */ |  | ||||||
| 	{OFFSET(mii1_rxerr), MODE(7) | PULLUDEN | PULLDOWN_EN | RXACTIVE},	/* (J15) gpio (rxerr) */ |  | ||||||
| 	{OFFSET(mii1_rxd0), MODE(1) | PULLUDDIS | RXACTIVE},			/* (M16) rmii1_rxd0 */ |  | ||||||
| 	{OFFSET(mii1_rxd1), MODE(1) | PULLUDDIS | RXACTIVE},			/* (L15) rmii1_rxd1 */ |  | ||||||
| 	{OFFSET(mii1_txen), MODE(1) | PULLUDDIS},				/* (J16) rmii1_txen */ |  | ||||||
| 	{OFFSET(mii1_txd0), MODE(1) | PULLUDDIS},				/* (K17) rmii1_txd0 */ |  | ||||||
| 	{OFFSET(mii1_txd1), MODE(1) | PULLUDDIS},				/* (K16) rmii1_txd1 */ |  | ||||||
| 	{OFFSET(rmii1_refclk), MODE(0) | PULLUDDIS | RXACTIVE},			/* (H18) rmii1_refclk */ |  | ||||||
| 
 |  | ||||||
| 	/* SMI */ |  | ||||||
| 	{OFFSET(mdio_clk), MODE(0) | PULLUDDIS},				/* (M18) mdio_clk */ |  | ||||||
| 	{OFFSET(mdio_data), MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE},		/* (M17) mdio_data */ |  | ||||||
| 
 |  | ||||||
| 	/* 25MHz Clock Output */ |  | ||||||
| 	{OFFSET(xdma_event_intr0), MODE(3)},					/* (A15) clkout1 (25 MHz clk for PHY) */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* RMII2: Ethernet */ |  | ||||||
| static struct module_pin_mux rmii2_pin_mux[] = { |  | ||||||
| 	/* RMII */ |  | ||||||
| 	{OFFSET(gpmc_a9), MODE(3) | PULLUDDIS | RXACTIVE},			/* (U16) rmii2_crs */ |  | ||||||
| 	{OFFSET(gpmc_wpn), MODE(7) | PULLUDEN | PULLDOWN_EN | RXACTIVE},	/* (U17) gpio (rxerr) */ |  | ||||||
| 	{OFFSET(gpmc_a11), MODE(3) | PULLUDDIS | RXACTIVE},			/* (V17) rmii2_rxd0 */ |  | ||||||
| 	{OFFSET(gpmc_a10), MODE(3) | PULLUDDIS | RXACTIVE},			/* (T16) rmii2_rxd1 */ |  | ||||||
| 	{OFFSET(gpmc_a0), MODE(3) | PULLUDDIS},					/* (R13) rmii2_txen */ |  | ||||||
| 	{OFFSET(gpmc_a5), MODE(3) | PULLUDDIS},					/* (V15) rmii2_txd0 */ |  | ||||||
| 	{OFFSET(gpmc_a4), MODE(3) | PULLUDDIS},					/* (R14) rmii2_txd1 */ |  | ||||||
| 	{OFFSET(mii1_col), MODE(1) | PULLUDDIS | RXACTIVE},			/* (H16) rmii2_refclk */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* MMC0: WiFi */ |  | ||||||
| static struct module_pin_mux mmc0_sdio_pin_mux[] = { |  | ||||||
| 	{OFFSET(mmc0_clk), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G17) MMC0_CLK */ |  | ||||||
| 	{OFFSET(mmc0_cmd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G18) MMC0_CMD */ |  | ||||||
| 	{OFFSET(mmc0_dat0), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G16) MMC0_DAT0 */ |  | ||||||
| 	{OFFSET(mmc0_dat1), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G15) MMC0_DAT1 */ |  | ||||||
| 	{OFFSET(mmc0_dat2), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (F18) MMC0_DAT2 */ |  | ||||||
| 	{OFFSET(mmc0_dat3), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (F17) MMC0_DAT3 */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* MMC1: eMMC */ |  | ||||||
| static struct module_pin_mux mmc1_emmc_pin_mux[] = { |  | ||||||
| 	{OFFSET(gpmc_csn1), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U9) MMC1_CLK */ |  | ||||||
| 	{OFFSET(gpmc_csn2), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V9) MMC1_CMD */ |  | ||||||
| 	{OFFSET(gpmc_ad0), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U7) MMC1_DAT0 */ |  | ||||||
| 	{OFFSET(gpmc_ad1), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V7) MMC1_DAT1 */ |  | ||||||
| 	{OFFSET(gpmc_ad2), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (R8) MMC1_DAT2 */ |  | ||||||
| 	{OFFSET(gpmc_ad3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T8) MMC1_DAT3 */ |  | ||||||
| 	{OFFSET(gpmc_ad4), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U8) MMC1_DAT4 */ |  | ||||||
| 	{OFFSET(gpmc_ad5), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V8) MMC1_DAT5 */ |  | ||||||
| 	{OFFSET(gpmc_ad6), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (R9) MMC1_DAT6 */ |  | ||||||
| 	{OFFSET(gpmc_ad7), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T9) MMC1_DAT7 */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* USB_DRVBUS not used -> configure as GPIO */ |  | ||||||
| static struct module_pin_mux usb_pin_mux[] = { |  | ||||||
| 	{OFFSET(usb0_drvvbus), (MODE(7) | PULLUDDIS)},				/* (F16) USB0_DRVVBUS */ |  | ||||||
| 	{OFFSET(usb1_drvvbus), (MODE(7) | PULLUDDIS)},				/* (F15) USB1_DRVVBUS */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* UART0: User (Debug/Console) */ |  | ||||||
| static struct module_pin_mux uart0_pin_mux[] = { |  | ||||||
| 	{OFFSET(uart0_rxd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (E15) UART0_RXD */ |  | ||||||
| 	{OFFSET(uart0_txd), (MODE(0) | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (E16) UART0_TXD */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* UART5: RS232/RS485 */ |  | ||||||
| /* CTS is unused - set to GPIO mode */ |  | ||||||
| static struct module_pin_mux uart5_pin_mux[] = { |  | ||||||
| 	{OFFSET(lcd_data9), (MODE(4) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U2) UART5_RXD */ |  | ||||||
| 	{OFFSET(lcd_data8), (MODE(4) | PULLUDEN | PULLUP_EN)},			/* (U1) UART5_TXD */ |  | ||||||
| 	{OFFSET(lcd_data14), (MODE(7) | PULLUDEN | PULLDOWN_EN)},			/* (V4) uart5_ctsn */ |  | ||||||
| 	{OFFSET(lcd_data15), (MODE(6) | PULLUDEN | PULLUP_EN)},			/* (T5) uart5_rtsn */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static struct module_pin_mux unused_pin_mux[] = { |  | ||||||
| 	/* SYSBOOT6, 7, 10, 11: Not used pulldown active, receiver disabled */ |  | ||||||
| 	{OFFSET(lcd_data6), (MODE(7) | PULLUDEN | PULLDOWN_EN)}, |  | ||||||
| 	{OFFSET(lcd_data7), (MODE(7) | PULLUDEN | PULLDOWN_EN)}, |  | ||||||
| 	{OFFSET(lcd_data10), (MODE(7) | PULLUDEN | PULLDOWN_EN)}, |  | ||||||
| 	{OFFSET(lcd_data11), (MODE(7) | PULLUDEN | PULLDOWN_EN)}, |  | ||||||
| 
 |  | ||||||
| 	/* TODO: GPMCA1..3, A6..8 */ |  | ||||||
| 
 |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| void enable_board_pin_mux(void) |  | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(gpio_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	configure_module_pin_mux(rmii1_pin_mux); |  | ||||||
| 	configure_module_pin_mux(rmii2_pin_mux); |  | ||||||
| 	configure_module_pin_mux(mmc0_sdio_pin_mux); |  | ||||||
| 	configure_module_pin_mux(mmc1_emmc_pin_mux); |  | ||||||
| 	configure_module_pin_mux(usb_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	configure_module_pin_mux(i2c0_pin_mux); |  | ||||||
| 	configure_module_pin_mux(i2c2_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	configure_module_pin_mux(uart5_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	configure_module_pin_mux(unused_pin_mux); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void enable_uart0_pin_mux(void) |  | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(uart0_pin_mux); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
|  | @ -1,158 +0,0 @@ | ||||||
| /* |  | ||||||
|  * Copyright (c) 2004-2008 Texas Instruments |  | ||||||
|  * |  | ||||||
|  * (C) Copyright 2002 |  | ||||||
|  * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> |  | ||||||
|  * |  | ||||||
|  * See file CREDITS for list of people who contributed to this |  | ||||||
|  * project. |  | ||||||
|  * |  | ||||||
|  * This program is free software; you can redistribute it and/or |  | ||||||
|  * modify it under the terms of the GNU General Public License as |  | ||||||
|  * published by the Free Software Foundation; either version 2 of |  | ||||||
|  * the License, or (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program; if not, write to the Free Software |  | ||||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |  | ||||||
|  * MA 02111-1307 USA |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") |  | ||||||
| OUTPUT_ARCH(arm) |  | ||||||
| ENTRY(_start) |  | ||||||
| SECTIONS |  | ||||||
| { |  | ||||||
| 	. = 0x00000000; |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 	.text : |  | ||||||
| 	{ |  | ||||||
| 		*(.__image_copy_start) |  | ||||||
| 		*(.vectors) |  | ||||||
| 		CPUDIR/start.o (.text*) |  | ||||||
|                 board/nm/hw25/built-in.o (.text*) |  | ||||||
| 		*(.text*) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 	.data : { |  | ||||||
| 		*(.data*) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 
 |  | ||||||
| 	. = .; |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 	.u_boot_list : { |  | ||||||
| 		KEEP(*(SORT(.u_boot_list*))); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 
 |  | ||||||
| 	.__efi_runtime_start : { |  | ||||||
| 		*(.__efi_runtime_start) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.efi_runtime : { |  | ||||||
| 		*(efi_runtime_text) |  | ||||||
| 		*(efi_runtime_data) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.__efi_runtime_stop : { |  | ||||||
| 		*(.__efi_runtime_stop) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.efi_runtime_rel_start : |  | ||||||
| 	{ |  | ||||||
| 		*(.__efi_runtime_rel_start) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.efi_runtime_rel : { |  | ||||||
| 		*(.relefi_runtime_text) |  | ||||||
| 		*(.relefi_runtime_data) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.efi_runtime_rel_stop : |  | ||||||
| 	{ |  | ||||||
| 		*(.__efi_runtime_rel_stop) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 
 |  | ||||||
| 	.image_copy_end : |  | ||||||
| 	{ |  | ||||||
| 		*(.__image_copy_end) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.rel_dyn_start : |  | ||||||
| 	{ |  | ||||||
| 		*(.__rel_dyn_start) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.rel.dyn : { |  | ||||||
| 		*(.rel*) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.rel_dyn_end : |  | ||||||
| 	{ |  | ||||||
| 		*(.__rel_dyn_end) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.hash : { *(.hash*) } |  | ||||||
| 
 |  | ||||||
| 	.end : |  | ||||||
| 	{ |  | ||||||
| 		*(.__end) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	_image_binary_end = .; |  | ||||||
| 
 |  | ||||||
| 	/* |  | ||||||
| 	 * Deprecated: this MMU section is used by pxa at present but |  | ||||||
| 	 * should not be used by new boards/CPUs. |  | ||||||
| 	 */ |  | ||||||
| 	. = ALIGN(4096); |  | ||||||
| 	.mmutable : { |  | ||||||
| 		*(.mmutable) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c |  | ||||||
|  * __bss_base and __bss_limit are for linker only (overlay ordering) |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { |  | ||||||
| 		KEEP(*(.__bss_start)); |  | ||||||
| 		__bss_base = .; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.bss __bss_base (OVERLAY) : { |  | ||||||
| 		*(.bss*) |  | ||||||
| 		 . = ALIGN(4); |  | ||||||
| 		 __bss_limit = .; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.bss_end __bss_limit (OVERLAY) : { |  | ||||||
| 		KEEP(*(.__bss_end)); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.dynsym _image_binary_end : { *(.dynsym) } |  | ||||||
| 	.dynbss : { *(.dynbss) } |  | ||||||
| 	.dynstr : { *(.dynstr*) } |  | ||||||
| 	.dynamic : { *(.dynamic*) } |  | ||||||
| 	.gnu.hash : { *(.gnu.hash) } |  | ||||||
| 	.plt : { *(.plt*) } |  | ||||||
| 	.interp : { *(.interp*) } |  | ||||||
| 	.gnu : { *(.gnu*) } |  | ||||||
| 	.ARM.exidx : { *(.ARM.exidx*) } |  | ||||||
| } |  | ||||||
|  | @ -400,7 +400,7 @@ int board_late_init(void) | ||||||
| 		boot_partition = 0; | 		boot_partition = 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* mmcblk1p1 => root0, mmcblk1p2 => root1 so +1 */ | 	/* mmcblk0p1 => root0, mmcblk0p2 => root1 so +1 */ | ||||||
| 	setenv_ulong("root_part", boot_partition + 1); | 	setenv_ulong("root_part", boot_partition + 1); | ||||||
| 
 | 
 | ||||||
| 	check_reset_button(); | 	check_reset_button(); | ||||||
|  |  | ||||||
|  | @ -80,6 +80,8 @@ static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE; | ||||||
| 
 | 
 | ||||||
| static BD_Context   bdctx[3];		/* The descriptor context */ | static BD_Context   bdctx[3];		/* The descriptor context */ | ||||||
| 
 | 
 | ||||||
|  | #define SHIELD_COM_IO	0 | ||||||
|  | #define SHIELD_DUALCAN	1 | ||||||
| 
 | 
 | ||||||
| static int _bd_init(void) | static int _bd_init(void) | ||||||
| { | { | ||||||
|  | @ -589,16 +591,6 @@ static struct shield_command known_shield_commands[] = { | ||||||
| 		"fdt set $can1 status okay;", | 		"fdt set $can1 status okay;", | ||||||
| 		can_shield_init | 		can_shield_init | ||||||
| 	}, | 	}, | ||||||
| 	{ |  | ||||||
| 		SHIELD_DUALCAN_PASSIVE, |  | ||||||
| 		"dualcan", |  | ||||||
| 		"shield dualcan termination off off", |  | ||||||
| 		"fdt get value can0 /aliases d_can0;" \ |  | ||||||
| 		"fdt get value can1 /aliases d_can1;" \ |  | ||||||
| 		"fdt set $can0 status okay;" \ |  | ||||||
| 		"fdt set $can1 status okay;", |  | ||||||
| 		can_shield_init |  | ||||||
| 	} |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static const struct shield_command* get_shield_command(int shield_id) | static const struct shield_command* get_shield_command(int shield_id) | ||||||
|  | @ -673,7 +665,7 @@ int board_late_init(void) | ||||||
| 		boot_partition = 0; | 		boot_partition = 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* mmcblk1p1 => root0, mmcblk1p2 => root1 so +1 */ | 	/* mmcblk0p1 => root0, mmcblk0p2 => root1 so +1 */ | ||||||
| 	setenv_ulong("root_part", boot_partition + 1); | 	setenv_ulong("root_part", boot_partition + 1); | ||||||
| 
 | 
 | ||||||
| 	check_reset_button(); | 	check_reset_button(); | ||||||
|  |  | ||||||
|  | @ -8,11 +8,6 @@ | ||||||
| #ifndef SHIELD_H | #ifndef SHIELD_H | ||||||
| #define SHIELD_H | #define SHIELD_H | ||||||
| 
 | 
 | ||||||
| #define SHIELD_COM_IO		0 |  | ||||||
| #define SHIELD_DUALCAN		1 |  | ||||||
| #define SHIELD_CAN_GNSS		2 |  | ||||||
| #define SHIELD_DUALCAN_PASSIVE	3 |  | ||||||
| 
 |  | ||||||
| struct shield_t{ | struct shield_t{ | ||||||
|     char name[64]; |     char name[64]; | ||||||
|     int (*setmode)(char * const argv[], int argc); |     int (*setmode)(char * const argv[], int argc); | ||||||
|  |  | ||||||
|  | @ -9,8 +9,8 @@ | ||||||
| 
 | 
 | ||||||
| #define NETBIRD_GPIO_RST_SHIELD_N GPIO_TO_PIN(0, 27) | #define NETBIRD_GPIO_RST_SHIELD_N GPIO_TO_PIN(0, 27) | ||||||
| #define NETBIRD_GPIO_LATCH GPIO_TO_PIN(0, 7) | #define NETBIRD_GPIO_LATCH GPIO_TO_PIN(0, 7) | ||||||
| #define NETBIRD_GPIO_MODE_0 GPIO_TO_PIN(1, 10) | #define NETBIRD_GPIO_MODE_0 GPIO_TO_PIN(1, 8) | ||||||
| #define NETBIRD_GPIO_MODE_1 GPIO_TO_PIN(1, 8) | #define NETBIRD_GPIO_MODE_1 GPIO_TO_PIN(1, 10) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static int shield_slot_initialized = 0; | static int shield_slot_initialized = 0; | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ config SYS_CONFIG_NAME | ||||||
| config CONS_INDEX | config CONS_INDEX | ||||||
|         int "UART used for console" |         int "UART used for console" | ||||||
|         range 1 6 |         range 1 6 | ||||||
|         default 3 | 	default 3 | ||||||
|         help |         help | ||||||
|           The AM335x SoC has a total of 6 UARTs (UART0 to UART5 as referenced |           The AM335x SoC has a total of 6 UARTs (UART0 to UART5 as referenced | ||||||
|           in documentation, etc) available to it.  Depending on your specific |           in documentation, etc) available to it.  Depending on your specific | ||||||
|  |  | ||||||
|  | @ -10,4 +10,4 @@ ifeq ($(CONFIG_SKIP_LOWLEVEL_INIT),) | ||||||
| obj-y	:= mux.o | obj-y	:= mux.o | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| obj-y	+= board.o ../common/bdparser.o ../common/board_descriptor.o ../common/da9063.o ../common/ether_crc.o fileaccess.o sja1105.o ui.o um.o reset_reason.o | obj-y	+= board.o ../common/bdparser.o ../common/board_descriptor.o fileaccess.o da9063.o sja1105.o ui.o um.o | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -13,10 +13,8 @@ | ||||||
| 
 | 
 | ||||||
| void enable_uart0_pin_mux(void); | void enable_uart0_pin_mux(void); | ||||||
| void enable_uart2_pin_mux(void); | void enable_uart2_pin_mux(void); | ||||||
| void enable_uart4_pin_mux(void); |  | ||||||
| void enable_spi1_mux(void); | void enable_spi1_mux(void); | ||||||
| void enable_led_mux(void); | 
 | ||||||
| void enable_led_mux_v32(void); |  | ||||||
| void enable_board_pin_mux(void); | void enable_board_pin_mux(void); | ||||||
| 
 | 
 | ||||||
| #define GPIO_TO_PIN(bank, gpio)		(32 * (bank) + (gpio)) | #define GPIO_TO_PIN(bank, gpio)		(32 * (bank) + (gpio)) | ||||||
|  |  | ||||||
|  | @ -58,10 +58,10 @@ void da9063_release_i2c_bus(int bus) | ||||||
| 	revert_i2c_bus(bus); | 	revert_i2c_bus(bus); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int da9063_get_reg(uint32_t reg, uint8_t* val) | int da9063_get_reg(uint32_t reg, u8* val) | ||||||
| { | { | ||||||
| 	int ret; | 	int ret; | ||||||
| 	uint8_t temp; | 	u8 temp; | ||||||
| 
 | 
 | ||||||
| 	/* Argument check */ | 	/* Argument check */ | ||||||
| 	if ((reg >= 0x200) || (val==0)) { | 	if ((reg >= 0x200) || (val==0)) { | ||||||
|  | @ -86,7 +86,7 @@ int da9063_get_reg(uint32_t reg, uint8_t* val) | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int da9063_set_reg(uint32_t reg, uint8_t val) | int da9063_set_reg(uint32_t reg, u8 val) | ||||||
| { | { | ||||||
| 	int ret; | 	int ret; | ||||||
| 
 | 
 | ||||||
|  | @ -116,8 +116,8 @@ void da9063_set_gpio(unsigned bit, int state) | ||||||
| { | { | ||||||
| 	int pmic_reg; | 	int pmic_reg; | ||||||
| 	int ret; | 	int ret; | ||||||
| 	uint8_t bitmask; | 	u8 bitmask; | ||||||
| 	uint8_t reg = 0x00; | 	u8 reg = 0x00; | ||||||
| 
 | 
 | ||||||
| 	if (bit <= 7) { | 	if (bit <= 7) { | ||||||
| 		pmic_reg = PMIC_REG_GPIO_MODE0_7; | 		pmic_reg = PMIC_REG_GPIO_MODE0_7; | ||||||
|  | @ -15,30 +15,9 @@ | ||||||
| #define CONFIG_PMIC_I2C_BUS	0 | #define CONFIG_PMIC_I2C_BUS	0 | ||||||
| #define CONFIG_PMIC_I2C_ADDR	0x58	/* Pages 0 and 1, Pages 2 and 3 -> 0x59 */ | #define CONFIG_PMIC_I2C_ADDR	0x58	/* Pages 0 and 1, Pages 2 and 3 -> 0x59 */ | ||||||
| 
 | 
 | ||||||
| #define PMIC_REG_STATUS_A		0x01	/* Status of ON_KEY, WAKE, COMP1V2, DVC */ | #define PMIC_REG_STATUS_A	0x01	/* Status of ON_KEY, WAKE, COMP1V2, DVC */ | ||||||
| #define PMIC_REG_STATUS_A_COMP1V2_MASK	0x08 | #define PMIC_REG_CONTROL_D      0x11    /* Control register for blink/watchdog */ | ||||||
| 
 | #define PMIC_REG_GPIO14_15      0x1C    /* Configuration of GPIO14/15 (mode, wake) */ | ||||||
| #define PMIC_REG_FAULT_LOG		0x05	/* PMIC fault log register, holding reset reason */ |  | ||||||
| #define PMIC_FAULT_TWD_ERROR_MASK	0x01	/* Watchdog timeout detected */ |  | ||||||
| #define PMIC_FAULT_POR_MASK		0x02	/* Startup from No-Power/RTC/Delivery mode */ |  | ||||||
| 
 |  | ||||||
| #define PMIC_REG_EVENT_A		0x06 |  | ||||||
| #define PMIC_REG_EVENT_ONKEY_MASK	0x01 |  | ||||||
| #define PMIC_REG_EVENT_RTC_ALARM_MASK	0x02 |  | ||||||
| #define PMIC_REG_EVENT_RTC_TICK_MASK	0x04 |  | ||||||
| #define PMIC_REG_EVENT_EVENTS_B_MASK	0x20 |  | ||||||
| 
 |  | ||||||
| #define PMIC_REG_EVENT_B		0x07 |  | ||||||
| #define PMIC_REG_EVENT_COMP1V2_MASK	0x04 |  | ||||||
| 
 |  | ||||||
| #define PMIC_REG_IRQ_MASK_A	0x0A |  | ||||||
| #define PMIC_REG_IRQ_MASK_B	0x0B |  | ||||||
| #define PMIC_REG_IRQ_MASK_C	0x0C |  | ||||||
| #define PMIC_REG_IRQ_MASK_D	0x0D |  | ||||||
| 
 |  | ||||||
| #define PMIC_REG_CONTROL_A      0x0E    /* Control register for power states */ |  | ||||||
| #define PMIC_REG_CONTROL_D	0x11    /* Control register for blink/watchdog */ |  | ||||||
| #define PMIC_REG_GPIO14_15	0x1C    /* Configuration of GPIO14/15 (mode, wake) */ |  | ||||||
| #define PMIC_REG_GPIO_MODE0_7	0x1D	/* Control register for GPIOs 0..7 */ | #define PMIC_REG_GPIO_MODE0_7	0x1D	/* Control register for GPIOs 0..7 */ | ||||||
| #define PMIC_REG_GPIO_MODE8_15	0x1E	/* Control register for GPIOs 8..15 */ | #define PMIC_REG_GPIO_MODE8_15	0x1E	/* Control register for GPIOs 8..15 */ | ||||||
| 
 | 
 | ||||||
|  | @ -57,24 +36,11 @@ | ||||||
| #define PMIC_LDOx_CONF_MASK	0x80 | #define PMIC_LDOx_CONF_MASK	0x80 | ||||||
| 
 | 
 | ||||||
| #define PMIC_REG_ID_4_3		0x84 | #define PMIC_REG_ID_4_3		0x84 | ||||||
| #define PMIC_REG_ID_6_5		0x85 |  | ||||||
| 
 | 
 | ||||||
| #define PMIC_REG_BUCK_ILIM_A	0x9A | #define PMIC_REG_BUCK_ILIM_A	0x9A | ||||||
| #define PMIC_REG_BUCK_ILIM_B	0x9B | #define PMIC_REG_BUCK_ILIM_B	0x9B | ||||||
| #define PMIC_REG_BUCK_ILIM_C	0x9C | #define PMIC_REG_BUCK_ILIM_C	0x9C | ||||||
| 
 | 
 | ||||||
| #define PMIC_REG_BCORE1_CONF	0x9E	/* Configuration register of BCORE1 */ |  | ||||||
| #define PMIC_REG_BCORE2_CONF	0x9D	/* Configuration register of BCORE2 */ |  | ||||||
| #define PMIC_REG_BPERI_CONF	0xA2	/* Configuration register of BPERI */ |  | ||||||
| #define PMIC_REG_BIO_CONF	0xA0	/* Configuration register of BIO */ |  | ||||||
| #define PMIC_REG_BMEM_CONF	0xA1	/* Configuration register of BMEM */ |  | ||||||
| 
 |  | ||||||
| #define PMIC_CONF_MODE_MASK	0xC0 |  | ||||||
| #define PMIC_CONF_MODE_SLEEP	0x40 |  | ||||||
| #define PMIC_CONF_MODE_SYNC	0x80 |  | ||||||
| #define PMIC_CONF_MODE_AUTO	0xC0 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #define PMIC_REG_BBAT_CONT	0xC5	/* Control register for backup battery */ | #define PMIC_REG_BBAT_CONT	0xC5	/* Control register for backup battery */ | ||||||
| 
 | 
 | ||||||
| #define PMIC_REG_CONFIG_E	0x10A | #define PMIC_REG_CONFIG_E	0x10A | ||||||
|  | @ -83,9 +49,6 @@ | ||||||
| 
 | 
 | ||||||
| #define PMIC_REG_TRIM_CLDR	0x120	/* Calendar Trim register, 2's complement, 1.9ppm per bit */ | #define PMIC_REG_TRIM_CLDR	0x120	/* Calendar Trim register, 2's complement, 1.9ppm per bit */ | ||||||
| 
 | 
 | ||||||
| #define PMIC_GP_ID_0		0x121	/* General purpose ID 0 (R/W) */ |  | ||||||
| #define PMIC_GP_ID_1		0x122	/* General purpose ID 1 (R/W) */ |  | ||||||
| 
 |  | ||||||
| #define PMIC_REG_CONFIG_ID	0x184	/* OTP Config ID <ver.rev> */ | #define PMIC_REG_CONFIG_ID	0x184	/* OTP Config ID <ver.rev> */ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -94,8 +57,8 @@ extern void da9063_init(int i2c_bus); | ||||||
| extern int da9063_claim_i2c_bus(void); | extern int da9063_claim_i2c_bus(void); | ||||||
| extern void da9063_release_i2c_bus(int bus); | extern void da9063_release_i2c_bus(int bus); | ||||||
| 
 | 
 | ||||||
| extern int da9063_get_reg(uint32_t reg, uint8_t* val); | extern int da9063_get_reg(uint32_t reg, u8* val); | ||||||
| extern int da9063_set_reg(uint32_t reg, uint8_t val); | extern int da9063_set_reg(uint32_t reg, u8 val); | ||||||
| 
 | 
 | ||||||
| extern void da9063_set_gpio(unsigned bit, int state); | extern void da9063_set_gpio(unsigned bit, int state); | ||||||
| 
 | 
 | ||||||
|  | @ -1,7 +1,6 @@ | ||||||
| #include <common.h> | #include <common.h> | ||||||
| #include <fs.h> | #include <fs.h> | ||||||
| 
 | 
 | ||||||
| #define BLOCK_DEVICE "mmc" |  | ||||||
| #define OVERLAY_PART "1:3" | #define OVERLAY_PART "1:3" | ||||||
| 
 | 
 | ||||||
| int read_file(const char* filename, char *buf, int size) | int read_file(const char* filename, char *buf, int size) | ||||||
|  | @ -10,12 +9,14 @@ int read_file(const char* filename, char *buf, int size) | ||||||
| 	loff_t len; | 	loff_t len; | ||||||
| 	int ret; | 	int ret; | ||||||
| 
 | 
 | ||||||
| 	if (fs_set_blk_dev(BLOCK_DEVICE, OVERLAY_PART, FS_TYPE_EXT) != 0) { | 	/* If consoldev is set take this as productive conosle instead of default console */ | ||||||
|  | 	if (fs_set_blk_dev("mmc", OVERLAY_PART, FS_TYPE_EXT) != 0) { | ||||||
| 		puts("Error, can not set blk device\n"); | 		puts("Error, can not set blk device\n"); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Read at most file size bytes */ | 
 | ||||||
|  | 	/* File does not exist, do not print an error message */ | ||||||
| 	if (fs_size(filename, &filesize)) { | 	if (fs_size(filename, &filesize)) { | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  | @ -23,12 +24,13 @@ int read_file(const char* filename, char *buf, int size) | ||||||
| 	if (filesize < size) | 	if (filesize < size) | ||||||
| 		size = filesize; | 		size = filesize; | ||||||
| 
 | 
 | ||||||
| 	/* For very unclear reasons the block device needs to be set again after the call to fs_size() */ | 	/* If consoldev is set take this as productive conosle instead of default console */ | ||||||
| 	if (fs_set_blk_dev(BLOCK_DEVICE, OVERLAY_PART, FS_TYPE_EXT) != 0) { | 	if (fs_set_blk_dev("mmc", OVERLAY_PART, FS_TYPE_EXT) != 0) { | ||||||
| 		puts("Error, can not set blk device\n"); | 		puts("Error, can not set blk device\n"); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| 	if ((ret = fs_read(filename, (ulong)buf, 0, size, &len))) { | 	if ((ret = fs_read(filename, (ulong)buf, 0, size, &len))) { | ||||||
| 		printf("Can't read file %s (size %d, len %lld, ret %d)\n", filename, size, len, ret); | 		printf("Can't read file %s (size %d, len %lld, ret %d)\n", filename, size, len, ret); | ||||||
| 		return -1; | 		return -1; | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * mux.c |  * mux.c | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2018-2019 NetModule AG - http://www.netmodule.com/
 |  * Copyright (C) 2018 NetModule AG - http://www.netmodule.com/
 | ||||||
|  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 | ||||||
|  * |  * | ||||||
|  * This program is free software; you can redistribute it and/or |  * This program is free software; you can redistribute it and/or | ||||||
|  | @ -23,22 +23,24 @@ | ||||||
| 
 | 
 | ||||||
| static struct module_pin_mux gpio_pin_mux[] = { | static struct module_pin_mux gpio_pin_mux[] = { | ||||||
| 	/*
 | 	/*
 | ||||||
| 	* (V2)  GPIO0_8: RS232_485n_SEL (V3.2) |  | ||||||
| 	* (V3)  GPIO0_9: RS485_DE (V3.2) |  | ||||||
| 	* (J18) GPIO0_16: ETH_SW_RST~ (V2.0) | 	* (J18) GPIO0_16: ETH_SW_RST~ (V2.0) | ||||||
| 	* (K15) GPIO0_17: CTRL.INT~ | 	* (K15) GPIO0_17: CTRL.INT~ | ||||||
| 	* (T10) GPIO0_23: CAN_TERM1~ (V1.0) | 	* (T10) GPIO0_23: CAN_TERM1~ (V1.0) | ||||||
|  | 	* (T17) GPIO0_30: LED0.GN | ||||||
| 	* | 	* | ||||||
| 	* (T12) GPIO1_12: SIM_SW | 	* (T12) GPIO1_12: SIM_SW | ||||||
| 	* (V13) GPIO1_14: GNSS_RST~ | 	* (V13) GPIO1_14: GNSS_RST~ | ||||||
| 	* (U13) GPIO1_15: CAN_TERM0~ (V1.0) | 	* (U13) GPIO1_15: CAN_TERM0~ (V1.0) | ||||||
| 	* (R14) GPIO1_20: BT_EN | 	* (R14) GPIO1_20: BT_EN | ||||||
| 	* (V15) GPIO1_21: GSM_PWR_EN | 	* (V15) GPIO1_21: GSM_PWR_EN | ||||||
|  | 	* (U15) GPIO1_22: LED1.RD | ||||||
|  | 	* (V16) GPIO1_24: LED1.GN | ||||||
| 	* (U16) GPIO1_25: RST_GSM | 	* (U16) GPIO1_25: RST_GSM | ||||||
| 	* (T16) GPIO1_26: WLAN_EN | 	* (T16) GPIO1_26: WLAN_EN | ||||||
| 	* (V17) GPIO1_27: WLAN_IRQ | 	* (V17) GPIO1_27: WLAN_IRQ | ||||||
|  | 	* (U18) GPIO1_28: LED0.RD | ||||||
| 	* | 	* | ||||||
| 	* (U3) GPIO2_16: TIMEPULSE (HW26), see note [1] | 	* (U3) GPIO2_16: SIM_PRES~ (V2.0) | ||||||
| 	* (R6) GPIO2_25: RST_ETH~ | 	* (R6) GPIO2_25: RST_ETH~ | ||||||
| 	* | 	* | ||||||
| 	* (J17) GPIO3_4: GNSS_EXTINT | 	* (J17) GPIO3_4: GNSS_EXTINT | ||||||
|  | @ -46,31 +48,47 @@ static struct module_pin_mux gpio_pin_mux[] = { | ||||||
| 	* (L18) GPIO3_10: CTRL.RST | 	* (L18) GPIO3_10: CTRL.RST | ||||||
| 	* (C12) GPIO3_17: UI_RST~ | 	* (C12) GPIO3_17: UI_RST~ | ||||||
| 	* (A14) GPIO3_21: RST_HUB~ (USB) | 	* (A14) GPIO3_21: RST_HUB~ (USB) | ||||||
| 	* |  | ||||||
| 	* [1] No PU/PD allowed as TIMEPULSE is internally connected with SAFEBOOT_N. |  | ||||||
| 	*     SAFEBOOT_N must be left open/floating. |  | ||||||
| 	*/ | 	*/ | ||||||
| 
 | 
 | ||||||
| 	/* Bank 0 */ | 	/* Bank 0 */ | ||||||
| 	{OFFSET(mii1_txd3), (MODE(7) | PULLUDDIS)},				/* (J18) GPIO0_16: ETH_SW_RST~ (V2.0) */ | 	{OFFSET(mii1_txd3), (MODE(7) | PULLUDDIS)},				/* (J18) GPIO0_16: ETH_SW_RST~ (V2.0) */ | ||||||
| 	{OFFSET(mii1_txd2), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (K15) GPIO0_17: CTRL.INT~ */ | 	{OFFSET(mii1_txd2), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (K15) GPIO0_17: CTRL.INT~ */ | ||||||
| 	{OFFSET(gpmc_ad9), (MODE(7) | PULLUDDIS)},				/* (T10) GPIO0_23: CAN_TERM1~ */ | 	{OFFSET(gpmc_ad9), (MODE(7) | PULLUDDIS)},				/* (T10) GPIO0_23: CAN_TERM1~ */ | ||||||
|  | 	{OFFSET(gpmc_wait0), (MODE(7) | PULLUDDIS)},				/* (T17) GPIO0_30: LED0.GN */ | ||||||
| 
 | 
 | ||||||
| 	/* Bank 1 */ | 	/* Bank 1 */ | ||||||
| 	{OFFSET(gpmc_ad12), (MODE(7) | PULLUDEN | PULLUP_EN)},			/* (T12) GPIO1_12: SIM_SW */ | 	{OFFSET(gpmc_ad12), (MODE(7) | PULLUDDIS)},				/* (T12) GPIO1_12: SIM_SW */ | ||||||
| 	{OFFSET(gpmc_ad14), (MODE(7) | PULLUDDIS)},				/* (V13) GPIO1_14: GNSS_RST~ */ | 	{OFFSET(gpmc_ad14), (MODE(7) | PULLUDDIS)},				/* (V13) GPIO1_14: GNSS_RST~ */ | ||||||
| 	{OFFSET(gpmc_ad15), (MODE(7) | PULLUDDIS)},				/* (U13) GPIO1_15: CAN_TERM0~ */ | 	{OFFSET(gpmc_ad15), (MODE(7) | PULLUDDIS)},				/* (U13) GPIO1_15: CAN_TERM0~ */ | ||||||
| 
 | 
 | ||||||
| 	{OFFSET(gpmc_a4), (MODE(7) | PULLUDDIS)},				/* (R14) gpio1_20: BT_EN */ | 	{OFFSET(gpmc_a4), (MODE(7) | PULLUDDIS)},				/* (R14) gpio1_20: BT_EN */ | ||||||
| 	{OFFSET(gpmc_a5), (MODE(7) | PULLUDDIS)},				/* (V15) gpio1_21: GSM_PWR_EN */ | 	{OFFSET(gpmc_a5), (MODE(7) | PULLUDDIS)},				/* (V15) gpio1_21: GSM_PWR_EN */ | ||||||
|  | 	{OFFSET(gpmc_a6), (MODE(7) | PULLUDDIS)},				/* (U15) GPIO1_22: LED1.RD */ | ||||||
|  | 	{OFFSET(gpmc_a8), (MODE(7) | PULLUDDIS)},				/* (V16) GPIO1_24: LED1.GN */ | ||||||
| 	{OFFSET(gpmc_a9), (MODE(7) | PULLUDDIS)},				/* (U16) gpio1_25: RST_GSM */ | 	{OFFSET(gpmc_a9), (MODE(7) | PULLUDDIS)},				/* (U16) gpio1_25: RST_GSM */ | ||||||
| 	{OFFSET(gpmc_a10), (MODE(7) | PULLUDDIS)},				/* (T16) gpio1_26: WLAN_EN */ | 	{OFFSET(gpmc_a10), (MODE(7) | PULLUDDIS)},				/* (T16) gpio1_26: WLAN_EN */ | ||||||
| 	{OFFSET(gpmc_a11), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (V17) gpio1_27: WLAN_IRQ */ | 	{OFFSET(gpmc_a11), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (V17) gpio1_27: WLAN_IRQ */ | ||||||
|  | 	{OFFSET(gpmc_be1n), (MODE(7) | PULLUDDIS)},				/* (U18) GPIO1_28: LED0.RD */ | ||||||
|  | 
 | ||||||
|  | 	/* TODO: What about all the unused GPMC pins ? */ | ||||||
| 
 | 
 | ||||||
| 	/* Bank 2 */ | 	/* Bank 2 */ | ||||||
| 	{OFFSET(lcd_data10), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (U3) GPIO2_16: TIMEPULSE */ | 	{OFFSET(lcd_data10), (MODE(7) | PULLUDDIS)},				/* (U3) GPIO2_16: SIM_PRES~ */ | ||||||
| 	{OFFSET(lcd_ac_bias_en), (MODE(7) | PULLUDDIS)},			/* (R6) GPIO2_25: RST_ETH~ */ | 	{OFFSET(lcd_ac_bias_en), (MODE(7) | PULLUDDIS)},			/* (R6) GPIO2_25: RST_ETH~ */ | ||||||
| 
 | 
 | ||||||
|  | #if 0 | ||||||
|  | 	/* TODO: What is this meant for? */ | ||||||
|  | 	{OFFSET(lcd_data3), (MODE(7) | PULLUDEN | PULLUP_EN)},	/* (R4) gpio2[9] */  /* SYSBOOT_3 */ | ||||||
|  | 	{OFFSET(lcd_data4), (MODE(7) | PULLUDEN | PULLUP_EN)},	/* (T1) gpio2[10] */  /* SYSBOOT_4 */ | ||||||
|  | 
 | ||||||
|  | 	/* TODO: Check other unued pins from sysboot block */ | ||||||
|  | 	/* Ensure PU/PD does not work against external signal */ | ||||||
|  | 	/*
 | ||||||
|  | 	 * SYSBOOT 0,1,5,12,13 = Low | ||||||
|  | 	 * SYSBOOT 2 = High | ||||||
|  | 	 */ | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| 	/* Bank 3 */ | 	/* Bank 3 */ | ||||||
| 	{OFFSET(mii1_rxdv), (MODE(7) | PULLUDDIS)},			/* (J17) GPIO3_4: GNSS_EXTINT */ | 	{OFFSET(mii1_rxdv), (MODE(7) | PULLUDDIS)},			/* (J17) GPIO3_4: GNSS_EXTINT */ | ||||||
| 	{OFFSET(mii1_txclk), (MODE(7) | PULLUDDIS)},			/* (K18) GPIO3_9: CTRL.W_DIS */ | 	{OFFSET(mii1_txclk), (MODE(7) | PULLUDDIS)},			/* (K18) GPIO3_9: CTRL.W_DIS */ | ||||||
|  | @ -80,39 +98,6 @@ static struct module_pin_mux gpio_pin_mux[] = { | ||||||
| 	{-1} | 	{-1} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static struct module_pin_mux led_pin_mux[] = { |  | ||||||
| 	/*
 |  | ||||||
| 	* (T17) GPIO0_30: LED0.GN |  | ||||||
| 	* (U15) GPIO1_22: LED1.RD |  | ||||||
| 	* (V16) GPIO1_24: LED1.GN |  | ||||||
| 	* (U18) GPIO1_28: LED0.RD |  | ||||||
| 	*/ |  | ||||||
| 
 |  | ||||||
| 	{OFFSET(gpmc_wait0), (MODE(7) | PULLUDDIS)},				/* (T17) GPIO0_30: LED0.GN */ |  | ||||||
| 	{OFFSET(gpmc_a6), (MODE(7) | PULLUDDIS)},				/* (U15) GPIO1_22: LED1.RD */ |  | ||||||
| 	{OFFSET(gpmc_a8), (MODE(7) | PULLUDDIS)},				/* (V16) GPIO1_24: LED1.GN */ |  | ||||||
| 	{OFFSET(gpmc_be1n), (MODE(7) | PULLUDDIS)},				/* (U18) GPIO1_28: LED0.RD */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static struct module_pin_mux led_pin_mux_v32[] = { |  | ||||||
| 	/*
 |  | ||||||
| 	* (C15) GPIO0_6: MB_LED_PWM |  | ||||||
| 	* (U15) GPIO1_22: LED1.RD |  | ||||||
| 	* (T15) GPIO1_23: LED0.GN (formerly: (T17) GPIO0_30) |  | ||||||
| 	* (V16) GPIO1_24: LED1.GN |  | ||||||
| 	* (U18) GPIO1_28: LED0.RD |  | ||||||
| 	*/ |  | ||||||
| 
 |  | ||||||
| 	{OFFSET(spi0_cs1), (MODE(7) | PULLUDDIS)},				/* (C15) GPIO0_6: MB_LED_PWM */ |  | ||||||
| 	{OFFSET(gpmc_a6), (MODE(7) | PULLUDDIS)},				/* (U15) GPIO1_22: LED1.RD */ |  | ||||||
| 	{OFFSET(gpmc_a7), (MODE(7) | PULLUDDIS)},				/* (T15) GPIO1_23: LED0.GN */ |  | ||||||
| 	{OFFSET(gpmc_a8), (MODE(7) | PULLUDDIS)},				/* (V16) GPIO1_24: LED1.GN */ |  | ||||||
| 	{OFFSET(gpmc_be1n), (MODE(7) | PULLUDDIS)},				/* (U18) GPIO1_28: LED0.RD */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* I2C0 PMIC */ | /* I2C0 PMIC */ | ||||||
| static struct module_pin_mux i2c0_pin_mux[] = { | static struct module_pin_mux i2c0_pin_mux[] = { | ||||||
| 	{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C17) I2C0_SDA */ | 	{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C17) I2C0_SDA */ | ||||||
|  | @ -144,33 +129,33 @@ static struct module_pin_mux rmii1_pin_mux[] = { | ||||||
| 	{OFFSET(mdio_data), MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE},		/* (M17) mdio_data */ | 	{OFFSET(mdio_data), MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE},		/* (M17) mdio_data */ | ||||||
| 
 | 
 | ||||||
| 	/* 25MHz Clock Output */ | 	/* 25MHz Clock Output */ | ||||||
| 	{OFFSET(xdma_event_intr0), MODE(3)},					/* (A15) clkout1 (25 MHz clk for Switch) */ | 	{OFFSET(xdma_event_intr0), MODE(3)},					/* OK (A15) clkout1 (25 MHz clk for Switch) */ | ||||||
| 	{-1} | 	{-1} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* MMC0: WiFi */ | /* MMC0: WiFi */ | ||||||
| static struct module_pin_mux mmc0_sdio_pin_mux[] = { | static struct module_pin_mux mmc0_sdio_pin_mux[] = { | ||||||
| 	{OFFSET(mmc0_clk), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G17) MMC0_CLK */ | 	{OFFSET(mmc0_clk), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_CLK */ | ||||||
| 	{OFFSET(mmc0_cmd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G18) MMC0_CMD */ | 	{OFFSET(mmc0_cmd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_CMD */ | ||||||
| 	{OFFSET(mmc0_dat0), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G16) MMC0_DAT0 */ | 	{OFFSET(mmc0_dat0), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_DAT0 */ | ||||||
| 	{OFFSET(mmc0_dat1), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G15) MMC0_DAT1 */ | 	{OFFSET(mmc0_dat1), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_DAT1 */ | ||||||
| 	{OFFSET(mmc0_dat2), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (F18) MMC0_DAT2 */ | 	{OFFSET(mmc0_dat2), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_DAT2 */ | ||||||
| 	{OFFSET(mmc0_dat3), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (F17) MMC0_DAT3 */ | 	{OFFSET(mmc0_dat3), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_DAT3 */ | ||||||
| 	{-1} | 	{-1} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* MMC1: eMMC */ | /* MMC1: eMMC */ | ||||||
| static struct module_pin_mux mmc1_emmc_pin_mux[] = { | static struct module_pin_mux mmc1_emmc_pin_mux[] = { | ||||||
| 	{OFFSET(gpmc_csn1), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U9) MMC1_CLK */ | 	{OFFSET(gpmc_csn1), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_CLK */ | ||||||
| 	{OFFSET(gpmc_csn2), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V9) MMC1_CMD */ | 	{OFFSET(gpmc_csn2), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_CMD */ | ||||||
| 	{OFFSET(gpmc_ad0), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U7) MMC1_DAT0 */ | 	{OFFSET(gpmc_ad0), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT0 */ | ||||||
| 	{OFFSET(gpmc_ad1), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V7) MMC1_DAT1 */ | 	{OFFSET(gpmc_ad1), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT1 */ | ||||||
| 	{OFFSET(gpmc_ad2), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (R8) MMC1_DAT2 */ | 	{OFFSET(gpmc_ad2), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT2 */ | ||||||
| 	{OFFSET(gpmc_ad3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T8) MMC1_DAT3 */ | 	{OFFSET(gpmc_ad3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT3 */ | ||||||
| 	{OFFSET(gpmc_ad4), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U8) MMC1_DAT4 */ | 	{OFFSET(gpmc_ad4), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT4 */ | ||||||
| 	{OFFSET(gpmc_ad5), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V8) MMC1_DAT5 */ | 	{OFFSET(gpmc_ad5), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT5 */ | ||||||
| 	{OFFSET(gpmc_ad6), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (R9) MMC1_DAT6 */ | 	{OFFSET(gpmc_ad6), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT6 */ | ||||||
| 	{OFFSET(gpmc_ad7), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T9) MMC1_DAT7 */ | 	{OFFSET(gpmc_ad7), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT7 */ | ||||||
| 	{-1} | 	{-1} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -218,22 +203,8 @@ static struct module_pin_mux uart2_pin_mux[] = { | ||||||
| 
 | 
 | ||||||
| /* UART3: GNSS */ | /* UART3: GNSS */ | ||||||
| static struct module_pin_mux uart3_pin_mux[] = { | static struct module_pin_mux uart3_pin_mux[] = { | ||||||
| 	{OFFSET(mii1_rxd3), (MODE(1) | PULLUDDIS | RXACTIVE)},			/* (L17) UART3_RXD */ | 	{OFFSET(mii1_rxd3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (L17) UART3_RXD */ | ||||||
| 	{OFFSET(mii1_rxd2), (MODE(1) | PULLUDDIS | SLEWCTRL)},			/* (L16) UART3_TXD */ | 	{OFFSET(mii1_rxd2), (MODE(1) | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (L16) UART3_TXD */ | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* UART4: User RS232/485 (V3.2 only) */ |  | ||||||
| static struct module_pin_mux uart4_pin_mux[] = { |  | ||||||
| 	/*
 |  | ||||||
| 	 * CTSn = SEL_RS232/RS485~: Default = Low -> RS485 mode |  | ||||||
| 	 * RTSn = RS485_DE: Default = Low -> RS485 transmitter disabled |  | ||||||
| 	 *        Configure as GPIO in U-Boot to keep disabled, Linux will change to RTSn |  | ||||||
| 	 */ |  | ||||||
| 	{OFFSET(gpmc_wait0), (MODE(6) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T17) UART4_RXD */ |  | ||||||
| 	{OFFSET(gpmc_wpn), (MODE(6) | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (U17) UART4_TXD */ |  | ||||||
| 	{OFFSET(lcd_data12), (MODE(7) | PULLUDEN | PULLDOWN_EN)},		/* (V2) uart4_ctsn */ |  | ||||||
| 	{OFFSET(lcd_data13), (MODE(7) | PULLUDEN | PULLDOWN_EN)},		/* (V3) uart4_rtsn */ |  | ||||||
| 	{-1} | 	{-1} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -297,22 +268,10 @@ void enable_uart2_pin_mux(void) | ||||||
| 	configure_module_pin_mux(uart2_pin_mux); | 	configure_module_pin_mux(uart2_pin_mux); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void enable_uart4_pin_mux(void) |  | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(uart4_pin_mux); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void enable_spi1_mux(void) | void enable_spi1_mux(void) | ||||||
| { | { | ||||||
| 	configure_module_pin_mux(spi1_pin_mux); | 	configure_module_pin_mux(spi1_pin_mux); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void enable_led_mux(void) |  | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(led_pin_mux); |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| void enable_led_mux_v32(void) | 
 | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(led_pin_mux_v32); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  | @ -1,81 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * reset_reason.c |  | ||||||
|  * |  | ||||||
|  * Reset/start reason handling |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2021 NetModule AG - https://www.netmodule.com/
 |  | ||||||
|  * |  | ||||||
|  * SPDX-License-Identifier:	GPL-2.0+ |  | ||||||
|  */ |  | ||||||
| #include <common.h> |  | ||||||
| #include "../common/ether_crc.h" |  | ||||||
| #include "reset_reason.h" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| void rr_set_reset_reason(volatile struct reset_registers* reset_regs, uint32_t reason) |  | ||||||
| { |  | ||||||
| 	reset_regs->rr_value = reason; |  | ||||||
| 	reset_regs->rr_value_crc = ether_crc(sizeof(reset_regs->rr_value), |  | ||||||
| 					     (const uint8_t*)&(reset_regs->rr_value)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool rr_is_reset_reason_valid(volatile const struct reset_registers* reset_regs) |  | ||||||
| { |  | ||||||
| 	const uint32_t crc = ether_crc(sizeof(reset_regs->rr_value),  |  | ||||||
| 				       (const uint8_t*)&(reset_regs->rr_value)); |  | ||||||
| 	return crc == reset_regs->rr_value_crc; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void rr_set_start_reason(volatile struct reset_registers* reset_regs, uint32_t event) |  | ||||||
| { |  | ||||||
| 	/* Store start events in shared memory region for OS */ |  | ||||||
| 	reset_regs->sr_magic = SR_MAGIC; |  | ||||||
| 	reset_regs->sr_events = event; |  | ||||||
| 	reset_regs->sr_checksum = ether_crc(sizeof(reset_regs->sr_events), |  | ||||||
| 					    (const uint8_t*)&(reset_regs->sr_events));	 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool rr_is_start_reason_valid(volatile const struct reset_registers* reset_regs) |  | ||||||
| { |  | ||||||
| 	if (reset_regs->sr_magic == SR_MAGIC) { |  | ||||||
| 		const uint32_t crc = ether_crc(sizeof(reset_regs->sr_events),  |  | ||||||
| 					(const uint8_t*)&(reset_regs->sr_events)); |  | ||||||
| 		if (crc == reset_regs->sr_checksum) { |  | ||||||
| 			return true; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	return false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void rr_start_reason_to_str(uint32_t events, char* buffer, size_t bufsize) |  | ||||||
| { |  | ||||||
| 	if (events == 0) { |  | ||||||
| 		strncpy(buffer, "-\n", bufsize); |  | ||||||
| 	} |  | ||||||
| 	else { |  | ||||||
| 		buffer[0] = 0; |  | ||||||
| 		if (events & SR_POR) |  | ||||||
| 			strncat(buffer, "PowerOn, ", bufsize); |  | ||||||
| 		if (events & SR_WATCHDOG) |  | ||||||
| 			strncat(buffer, "Watchdog, ", bufsize); |  | ||||||
| 		if (events & SR_REBOOT) |  | ||||||
| 			strncat(buffer, "Reboot, ", bufsize); |  | ||||||
| 		if (events & SR_WAKEUP) |  | ||||||
| 			strncat(buffer, "Wakeup, ", bufsize); |  | ||||||
| 
 |  | ||||||
| 		if (events & SR_EVT_IGNITION) |  | ||||||
| 			strncat(buffer, "Ignition, ", bufsize); |  | ||||||
| 		if (events & SR_EVT_RTC_ALARM) |  | ||||||
| 			strncat(buffer, "RTC, ", bufsize); |  | ||||||
| 		if (events & SR_EVT_RTC_TICK) |  | ||||||
| 			strncat(buffer, "Tick, ", bufsize); |  | ||||||
| 		if (events & SR_EVT_GPI) |  | ||||||
| 			strncat(buffer, "GPI, ", bufsize); |  | ||||||
| 		if (events & SR_EVT_BUTTON) |  | ||||||
| 			strncat(buffer, "Button, ", bufsize); |  | ||||||
| 
 |  | ||||||
| 		/* Trim last comma, no 0 len check required, at least one entry is present */ |  | ||||||
| 		buffer[strlen(buffer)-2] = 0; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  | @ -1,60 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * reset_reason.h |  | ||||||
|  * |  | ||||||
|  * Reset/start reason handling |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2021 NetModule AG - https://www.netmodule.com/
 |  | ||||||
|  * |  | ||||||
|  * SPDX-License-Identifier:	GPL-2.0+ |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #ifndef RESET_REASON_H |  | ||||||
| #define RESET_REASON_H |  | ||||||
| 
 |  | ||||||
| struct reset_registers { |  | ||||||
| 	/* Reboot Reasons, set by OS, expect watchdog set by bootloader */ |  | ||||||
| 	uint32_t rr_value; |  | ||||||
| 	uint32_t rr_value_crc; |  | ||||||
| 
 |  | ||||||
| 	/* Start Reasons as determined by hardware */ |  | ||||||
| 	uint32_t sr_magic;	/* Token to check presence of following fields */ |  | ||||||
| 	uint32_t sr_events;	/* Events bitmask, see SE_... defines */ |  | ||||||
| 	uint32_t sr_checksum;	/* Checksum over se_events */ |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* Watchdog reboot reason event */ |  | ||||||
| #define RR_POWEROFF_PATTERN		0x00000000 |  | ||||||
| #define RR_EXTERNAL_WATCHDOG_PATTERN	0x781f9ce2 |  | ||||||
| #define RR_BOOT_PATTERN			0x424f4f54	/* ‘BOOT’, 0xb9808470 */ |  | ||||||
| #define RR_REBOOT_PATTERN		0x5245424f	/* ‘REBO’, 0x7d5d9d66 */ |  | ||||||
| #define RR_OOPS_PATTERN			0x4F4F5053	/* ‘OOPS’, 0x2b85bc5f */ |  | ||||||
| #define RR_WAKE_PATTERN			0x57414B45	/* 'WAKE', 0x7b0acb48 */ |  | ||||||
| 
 |  | ||||||
| /* Start reason token 'SRTE' */ |  | ||||||
| #define SR_MAGIC			0x53525445 |  | ||||||
| 
 |  | ||||||
| /* Possible start events (see sr_events) */ |  | ||||||
| #define SR_POR  			0x00000001 |  | ||||||
| #define SR_WATCHDOG  			0x00000010 |  | ||||||
| #define SR_REBOOT  			0x00000020 |  | ||||||
| #define SR_WAKEUP  			0x00000080	/* See SR_EVT_xx bits */ |  | ||||||
| 
 |  | ||||||
| /* In case of wake-up, these are the events that caused the start */ |  | ||||||
| #define SR_EVT_IGNITION  		0x00000100 |  | ||||||
| #define SR_EVT_RTC_ALARM  		0x00000200	/* RTC date/time alarm */ |  | ||||||
| #define SR_EVT_RTC_TICK  		0x00000400	/* RTC tick based alarm */ |  | ||||||
| #define SR_EVT_GPI			0x00000800	/* General purpose input(s) */ |  | ||||||
| #define SR_EVT_BUTTON			0x00001000	 |  | ||||||
| #define SR_EVT_WAKE_MASK		0x00001F00 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| extern void rr_set_reset_reason(volatile struct reset_registers* reset_regs, uint32_t reason); |  | ||||||
| extern bool rr_is_reset_reason_valid(volatile const struct reset_registers* reset_regs); |  | ||||||
| 
 |  | ||||||
| extern void rr_set_start_reason(volatile struct reset_registers* reset_regs, uint32_t event); |  | ||||||
| extern bool rr_is_start_reason_valid(volatile const struct reset_registers* reset_regs); |  | ||||||
| extern void rr_start_reason_to_str(uint32_t events, char* buffer, size_t bufsize); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #endif /* RESET_REASON_H */ |  | ||||||
|  | @ -90,10 +90,10 @@ void sja1105_write_reg(uint32_t address, uint32_t data) | ||||||
| 
 | 
 | ||||||
| void sja1105_configure_firmware(void) | void sja1105_configure_firmware(void) | ||||||
| { | { | ||||||
|     static const uint8_t config_data_0[] = { 0x80, 0x20, 0x00, 0x00, 0x9E, 0x00, 0x03, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x21, 0x6F, 0x25, 0x6B, 0xFE, 0xF9, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF }; | 	static const uint8_t config_data_0[] = { 0x80, 0x20, 0x00, 0x00, 0x9E, 0x00, 0x03, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x21, 0x6F, 0x25, 0x6B, 0xFE, 0xF7, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF }; | ||||||
|     static const uint8_t config_data_1[] = { 0x80, 0x20, 0x04, 0x00, 0xFE, 0xF9, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0x03, 0x68, 0x8B, 0xEA, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x7D, 0x0B, 0xCB, 0xF2, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x31, 0x80, 0x7F, 0x09, 0x52, 0x68, 0x0D, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x6A, 0xF6, 0x23, 0x53, 0x10, 0x00, 0x00, 0x00, 0xF7, 0xBD, 0xF5, 0x8D, 0x10, 0x00, 0x00, 0x00, 0xEF, 0x7B, 0xF5, 0x8D, 0x10, 0x00, 0x00, 0x00, 0xDE, 0xF7, 0xF5, 0x8D, 0x10, 0x00, 0x00, 0x00, 0xBD, 0xEF, 0xF5, 0x8D, 0x10, 0x00, 0x00, 0x00, 0x7B, 0xDF, 0xF5, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x04, 0xA6, 0x06, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0xDA, 0xB5, 0xBD, 0xC8, 0x00, 0x3F, 0xFC, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }; | 	static const uint8_t config_data_1[] = { 0x80, 0x20, 0x04, 0x00, 0xFE, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7, 0x00, 0x00, 0x13, 0xFF, 0xFF, 0xFF, 0xFA, 0x2E, 0x19, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xF2, 0x69, 0x5C, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x02, 0x52, 0x13, 0x87, 0x7B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x6A, 0xF6, 0x23, 0x53, 0x10, 0x00, 0x00, 0x00, 0xF7, 0xBD, 0xF5, 0x8D, 0x10, 0x00, 0x00, 0x00, 0xEF, 0x7B, 0xF5, 0x8D, 0x10, 0x00, 0x00, 0x00, 0xDE, 0xF7, 0xF5, 0x8D, 0x10, 0x00, 0x00, 0x00, 0xBD, 0xEF, 0xF5, 0x8D, 0x10, 0x00, 0x00, 0x00, 0x7B, 0xDF, 0xF5, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x04, 0xA6, 0x06, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0xDA, 0xB5, 0xBD, 0xC8 }; | ||||||
|     static const uint8_t config_data_2[] = { 0x80, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x75, 0xF9, 0x8D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x25, 0x0E, 0x7C, 0xBD, 0x00, 0x01, 0x25, 0xC0, 0x70, 0x94, 0x84, 0x50, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC8, 0xA7, 0xCE, 0xE6, 0x00, 0x71, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xF7, 0x04, 0xB9, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x1F, 0x81, 0x3F, 0x06, 0x44, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0D, 0xB0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x5A, 0x9C, 0x37, 0x20, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3A, 0x5D, 0x5E, 0x24, 0xA4, 0x9A, 0x00, 0x00, 0x7B, 0x51, 0xDA, 0x7D, 0x00, 0x00, 0x00, 0x00 }; | 	static const uint8_t config_data_2[] = { 0x80, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x62, 0x42, 0xCA, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x25, 0x0E, 0x7C, 0xBD, 0x00, 0x01, 0x25, 0xC0, 0x70, 0x94, 0x84, 0x50, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC8, 0xA7, 0xCE, 0xE6, 0x00, 0x71, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xF7, 0x04, 0xB9, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x1F, 0x81, 0x3F, 0x06, 0x44, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0C, 0x30, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0x80, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x00, 0x0F, 0xE4, 0x13, 0x21, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }; | ||||||
|     static const uint8_t config_data_3[] = { 0x80, 0x20, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x6E, 0x02, 0x8B }; | 	static const uint8_t config_data_3[] = { 0x80, 0x20, 0x0C, 0x00, 0x3A, 0x5D, 0x5E, 0x24, 0xA4, 0x9A, 0x00, 0x00, 0x7B, 0x51, 0xDA, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x18, 0x7C, 0xE2 }; | ||||||
| 
 | 
 | ||||||
| 	uint32_t val; | 	uint32_t val; | ||||||
| 	int rc; | 	int rc; | ||||||
|  |  | ||||||
|  | @ -22,8 +22,6 @@ static int module_present = 0; | ||||||
| static um_type_t module_type = UM_TYPE_RESERVED; | static um_type_t module_type = UM_TYPE_RESERVED; | ||||||
| static int hw_version = 0; | static int hw_version = 0; | ||||||
| static int hw_revision = 0; | static int hw_revision = 0; | ||||||
| static struct in_addr ipv4_addr; |  | ||||||
| static struct in_addr ipv4_mask; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static int switch_i2c_bus(int* old_bus) | static int switch_i2c_bus(int* old_bus) | ||||||
|  | @ -61,31 +59,12 @@ static void get_version(void) | ||||||
| 	if (ret == 0) { | 	if (ret == 0) { | ||||||
| 		hw_version  = (reg[0] >> 4) & 0x0F; | 		hw_version  = (reg[0] >> 4) & 0x0F; | ||||||
| 		hw_revision = (reg[0] >> 0) & 0x0F; | 		hw_revision = (reg[0] >> 0) & 0x0F; | ||||||
|  | /*		printf("ver %d.%d\n", hw_version, hw_revision);*/ | ||||||
| 	} else { | 	} else { | ||||||
| 		puts("error reading user module version\n"); | 		puts("error reading user module version\n"); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| static void set_inaddr(const uint8_t* data, struct in_addr* in) |  | ||||||
| { |  | ||||||
| 	in->s_addr = htonl(data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3] << 0);	 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void get_network_address(void) |  | ||||||
| { |  | ||||||
| 	int ret; |  | ||||||
| 	uint8_t data[8]; |  | ||||||
| 
 |  | ||||||
| 	ret = i2c_read(CONFIG_UM_I2C_ADDR, UM_REG_IPV4_ADDR, 1, data, 8); |  | ||||||
| 	if (ret == 0) { |  | ||||||
| 		set_inaddr(&data[0], &ipv4_addr); |  | ||||||
| 		set_inaddr(&data[4], &ipv4_mask); |  | ||||||
| 	} else { |  | ||||||
| 		puts("error reading user module network configuration\n"); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void detect(void) | static void detect(void) | ||||||
| { | { | ||||||
| 	int ret; | 	int ret; | ||||||
|  | @ -98,6 +77,7 @@ static void detect(void) | ||||||
| 	for (i=0; i<500/10; i++) { | 	for (i=0; i<500/10; i++) { | ||||||
| 		/* Try to read detect and type register */  | 		/* Try to read detect and type register */  | ||||||
| 		ret = i2c_read(CONFIG_UM_I2C_ADDR, UM_REG_PRESENCE, 1, reg, 2); | 		ret = i2c_read(CONFIG_UM_I2C_ADDR, UM_REG_PRESENCE, 1, reg, 2); | ||||||
|  | 
 | ||||||
| 		if (ret == 0) { | 		if (ret == 0) { | ||||||
| 			/* i2c read was successful, now check presence register */ | 			/* i2c read was successful, now check presence register */ | ||||||
| 			if (reg[UM_REG_PRESENCE] == UM_PRESENCE_TOKEN) { | 			if (reg[UM_REG_PRESENCE] == UM_PRESENCE_TOKEN) { | ||||||
|  | @ -126,13 +106,7 @@ void um_init(int i2c_bus) | ||||||
| 		detect(); | 		detect(); | ||||||
| 
 | 
 | ||||||
| 		if (module_present) { | 		if (module_present) { | ||||||
| 			/* TODO: Check why this delay is required.
 |  | ||||||
| 			 * Is the UM software still reading board descriptor?  |  | ||||||
| 			 */ |  | ||||||
| 			udelay(50*1000);	/* 50 ms delay (tested with 30 ms) */ |  | ||||||
| 
 |  | ||||||
| 			get_version(); | 			get_version(); | ||||||
| 			get_network_address(); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -147,7 +121,7 @@ int um_present(void) | ||||||
| const char* um_type_as_str(void)  | const char* um_type_as_str(void)  | ||||||
| { | { | ||||||
| 	switch (module_type) { | 	switch (module_type) { | ||||||
| 		case UM_TYPE_VCUPRO: return "VCU Pro"; | 		case UM_TYPE_VCUPRO: return "VCUpro"; | ||||||
| 		default: return "<unknown"; | 		default: return "<unknown"; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -160,12 +134,3 @@ void um_version(uint8_t *version, uint8_t *revision) | ||||||
| 	if (revision != NULL) | 	if (revision != NULL) | ||||||
| 		*revision = hw_revision; | 		*revision = hw_revision; | ||||||
| } | } | ||||||
| 
 |  | ||||||
| void um_network_address(struct in_addr* ip, struct in_addr* mask) |  | ||||||
| { |  | ||||||
| 	if (ip != NULL) |  | ||||||
| 		*ip = ipv4_addr; |  | ||||||
| 
 |  | ||||||
| 	if (mask != NULL) |  | ||||||
| 		*mask = ipv4_mask; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  | @ -11,18 +11,12 @@ | ||||||
| #ifndef UM_H | #ifndef UM_H | ||||||
| #define UM_H | #define UM_H | ||||||
| 
 | 
 | ||||||
| #include <net.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #define CONFIG_UM_I2C_BUS	1 | #define CONFIG_UM_I2C_BUS	1 | ||||||
| #define CONFIG_UM_I2C_ADDR	0x40 | #define CONFIG_UM_I2C_ADDR	0x40 | ||||||
| 
 | 
 | ||||||
| #define UM_REG_PRESENCE		0x00	/* Presence register, value = 0xC5 */ | #define UM_REG_PRESENCE		0	/* Presence register, value = 0xC5 */ | ||||||
| #define UM_REG_TYPE		0x01	/* See um_type_t */ | #define UM_REG_TYPE		1	/* See um_type_t */ | ||||||
| #define UM_REG_HW_VER		0x04	/* Version.Revision, e.g. 0x21 = v2.1 */ | #define UM_REG_HW_VER		4	/* Version.Revision, e.g. 0x21 = v2.1 */ | ||||||
| 
 |  | ||||||
| #define UM_REG_IPV4_ADDR	0x10	/* IPv4 address in network byte order, 4 bytes */ |  | ||||||
| #define UM_REG_IPV4_MASK	0x14	/* IPv4 mask in network byte order, 4 bytes */ |  | ||||||
| 
 | 
 | ||||||
| #define UM_PRESENCE_TOKEN	0xC5 | #define UM_PRESENCE_TOKEN	0xC5 | ||||||
| 
 | 
 | ||||||
|  | @ -65,12 +59,4 @@ const char* um_type_as_str(void); | ||||||
|  */ |  */ | ||||||
| void um_version(uint8_t *version, uint8_t *revision); | void um_version(uint8_t *version, uint8_t *revision); | ||||||
| 
 | 
 | ||||||
| /**
 |  | ||||||
|  * Returns user module IPv4 configuration  |  | ||||||
|  *  |  | ||||||
|  * @param ip Pointer to variable to receive IPv4 address |  | ||||||
|  * @param mask Pointer to variable to receive IPv4 mask |  | ||||||
|  */ |  | ||||||
| void um_network_address(struct in_addr* ip, struct in_addr* mask); |  | ||||||
| 
 |  | ||||||
| #endif /* UM_H */ | #endif /* UM_H */ | ||||||
|  |  | ||||||
|  | @ -10,4 +10,4 @@ ifeq ($(CONFIG_SKIP_LOWLEVEL_INIT),) | ||||||
| obj-y	:= mux.o | obj-y	:= mux.o | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| obj-y	+= board.o ../common/bdparser.o ../common/board_descriptor.o ../common/da9063.o shield.o shield_can.o shield_comio.o fileaccess.o | obj-y	+= board.o ../common/bdparser.o ../common/board_descriptor.o shield.o shield_can.o shield_comio.o fileaccess.o da9063.o | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -10,7 +10,6 @@ | ||||||
| 
 | 
 | ||||||
| #ifndef _BOARD_H_ | #ifndef _BOARD_H_ | ||||||
| #define _BOARD_H_ | #define _BOARD_H_ | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * We have three pin mux functions that must exist.  We must be able to enable |  * We have three pin mux functions that must exist.  We must be able to enable | ||||||
|  * uart0, for initial output and i2c2 to read the main EEPROM.  We then have a |  * uart0, for initial output and i2c2 to read the main EEPROM.  We then have a | ||||||
|  | @ -20,9 +19,15 @@ | ||||||
| void enable_uart0_pin_mux(void); | void enable_uart0_pin_mux(void); | ||||||
| void disable_uart0_pin_mux(void); | void disable_uart0_pin_mux(void); | ||||||
| void enable_uart1_pin_mux(void); | void enable_uart1_pin_mux(void); | ||||||
| 
 | /*
 | ||||||
|  | void enable_uart2_pin_mux(void); | ||||||
|  | void enable_uart3_pin_mux(void); | ||||||
|  | void enable_uart4_pin_mux(void); | ||||||
|  | void enable_uart5_pin_mux(void); | ||||||
|  | */ | ||||||
|  | void enable_i2c0_pin_mux(void); | ||||||
|  | void enable_i2c2_pin_mux(void); | ||||||
| void enable_board_pin_mux(void); | void enable_board_pin_mux(void); | ||||||
| 
 | 
 | ||||||
| #define GPIO_TO_PIN(bank, gpio)		(32 * (bank) + (gpio)) | #define GPIO_TO_PIN(bank, gpio)		(32 * (bank) + (gpio)) | ||||||
| 
 |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -0,0 +1,92 @@ | ||||||
|  | /*
 | ||||||
|  |  * da9063.c | ||||||
|  |  * | ||||||
|  |  * Dialog DA9063 PMIC | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2018 NetModule AG - http://www.netmodule.com/
 | ||||||
|  |  * | ||||||
|  |  * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <common.h> | ||||||
|  | #include <errno.h> | ||||||
|  | #include <i2c.h> | ||||||
|  | 
 | ||||||
|  | #include "da9063.h" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | static int da9063_i2c_bus = 0; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void da9063_init(int i2c_bus) | ||||||
|  | { | ||||||
|  | 	da9063_i2c_bus = i2c_bus; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int da9063_get_reg(int reg, u8* val) | ||||||
|  | { | ||||||
|  | 	int ret; | ||||||
|  | 	int old_bus; | ||||||
|  | 	u8 temp; | ||||||
|  | 
 | ||||||
|  | 	/* TODO: Check whether switching is required */ | ||||||
|  | 	old_bus = i2c_get_bus_num(); | ||||||
|  | 	i2c_set_bus_num(da9063_i2c_bus); | ||||||
|  | 
 | ||||||
|  | 	/* TODO: Use CONFIG_PMIC_I2C_ADDR+1 if reg > 0xFF */ | ||||||
|  | 	*val = 0; | ||||||
|  | 	ret = i2c_read(CONFIG_PMIC_I2C_ADDR, reg, 1, &temp, 1); | ||||||
|  | 	if (ret == 0) | ||||||
|  | 		*val = temp; | ||||||
|  | 
 | ||||||
|  | 	i2c_set_bus_num(old_bus); | ||||||
|  | 
 | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int da9063_set_reg(int reg, u8 val) | ||||||
|  | { | ||||||
|  | 	int ret; | ||||||
|  | 	int old_bus; | ||||||
|  | 
 | ||||||
|  | 	/* TODO: Check whether switching is required */ | ||||||
|  | 	old_bus = i2c_get_bus_num(); | ||||||
|  | 	i2c_set_bus_num(da9063_i2c_bus); | ||||||
|  | 
 | ||||||
|  | 	/* TODO: Use CONFIG_PMIC_I2C_ADDR+1 if reg > 0xFF */ | ||||||
|  | 	ret = i2c_write(CONFIG_PMIC_I2C_ADDR, reg, 1, &val, 1); | ||||||
|  | 	if (ret != 0) | ||||||
|  | 		puts("da9063 write error\n"); | ||||||
|  | 
 | ||||||
|  | 	i2c_set_bus_num(old_bus); | ||||||
|  | 
 | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void da9063_set_gpio(unsigned bit, int state) | ||||||
|  | { | ||||||
|  | 	int pmic_reg; | ||||||
|  | 	int ret; | ||||||
|  | 	u8 bitmask; | ||||||
|  | 	u8 reg = 0x00; | ||||||
|  | 
 | ||||||
|  | 	if (bit <= 7) { | ||||||
|  | 		pmic_reg = PMIC_REG_GPIO_MODE0_7; | ||||||
|  | 		bitmask = 1U << (bit-0); | ||||||
|  | 	} | ||||||
|  | 	else  { | ||||||
|  | 		pmic_reg = PMIC_REG_GPIO_MODE8_15; | ||||||
|  | 		bitmask = 1U << (bit-8); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | /*	printf("da9063_set_gpio %d 0x%04x\n", pmic_reg, bitmask); */ | ||||||
|  | 	ret = da9063_get_reg(pmic_reg, ®); | ||||||
|  | 
 | ||||||
|  | 	if (ret == 0)  { | ||||||
|  | 		if (state)	reg |=  bitmask; | ||||||
|  | 		else		reg &= ~bitmask; | ||||||
|  | 
 | ||||||
|  | 		(void)da9063_set_reg(pmic_reg, reg); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,36 @@ | ||||||
|  | /*
 | ||||||
|  |  * da9063.c | ||||||
|  |  * | ||||||
|  |  * Dialog DA9063 PMIC | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2018 NetModule AG - http://www.netmodule.com/
 | ||||||
|  |  * | ||||||
|  |  * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef DA9063_H | ||||||
|  | #define DA9063_H | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define CONFIG_PMIC_I2C_BUS	0 | ||||||
|  | #define CONFIG_PMIC_I2C_ADDR	0x58	/* Pages 0 and 1, Pages 2 and 3 -> 0x59 */ | ||||||
|  | 
 | ||||||
|  | #define PMIC_REG_STATUS_A	0x01	/* Status of ON_KEY, WAKE, COMP1V2, DVC */ | ||||||
|  | #define PMIC_REG_GPIO_MODE0_7	0x1D	/* Control register for GPIOs 0..7 */ | ||||||
|  | #define PMIC_REG_GPIO_MODE8_15	0x1E	/* Control register for GPIOs 8..15 */ | ||||||
|  | 
 | ||||||
|  | #define PMIC_REG_BBAT_CONT	0xC5	/* Control register for backup battery */ | ||||||
|  | 
 | ||||||
|  | #define PMIC_REG_BUCK_ILIM_A	0x9A | ||||||
|  | #define PMIC_REG_BUCK_ILIM_B	0x9B | ||||||
|  | #define PMIC_REG_BUCK_ILIM_C	0x9C | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | extern void da9063_init(int i2c_bus); | ||||||
|  | extern int da9063_get_reg(int reg, u8* val); | ||||||
|  | extern int da9063_set_reg(int reg, u8 val); | ||||||
|  | 
 | ||||||
|  | extern void da9063_set_gpio(unsigned bit, int state); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif /* DA9063_H */ | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * mux.c |  * mux.c | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2018-2019 NetModule AG - http://www.netmodule.com/
 |  * Copyright (C) 2018 NetModule AG - http://www.netmodule.com/
 | ||||||
|  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 | ||||||
|  * |  * | ||||||
|  * This program is free software; you can redistribute it and/or |  * This program is free software; you can redistribute it and/or | ||||||
|  | @ -23,52 +23,50 @@ | ||||||
| 
 | 
 | ||||||
| static struct module_pin_mux gpio_pin_mux[] = { | static struct module_pin_mux gpio_pin_mux[] = { | ||||||
| 	/*
 | 	/*
 | ||||||
| 	* CPU GPIOs | 	* GPIO0_2: RST_GNSS~ | ||||||
|  | 	* GPIO0_3: GEOFENCE_GNSS | ||||||
|  | 	* GPIO0_4: RTK_STAT_GNSS | ||||||
|  | 	* GPIO0_5: EXTINT_GNSS | ||||||
|  | 	* GPIO0_6: TIMEPULSE_GNSS | ||||||
|  | 	* GPIO0_7: PWM / SHIELD LATCH | ||||||
|  | 	* GPIO0_16: RST_PHY~ | ||||||
|  | 	* GPIO0_17: PMIC FAULT | ||||||
|  | 	* GPIO0_27: RST_SHIELD~ | ||||||
| 	* | 	* | ||||||
| 	* (A17) GPIO0_2: RST_GNSS~ | 	* GPIO1_14: DIG_OUT | ||||||
| 	* (B17) GPIO0_3: GEOFENCE_GNSS | 	* GPIO1_15: DIG_IN | ||||||
| 	* (B16) GPIO0_4: RTK_STAT_GNSS | 	* GPIO1_20: BT_EN | ||||||
| 	* (A16) GPIO0_5: EXTINT_GNSS | 	* GPIO1_21: GSM_PWR_EN | ||||||
| 	* (C15) GPIO0_6: TIMEPULSE | 	* GPIO1_25: RST_GSM | ||||||
| 	* (C18) GPIO0_7: PWM / SHIELD LATCH | 	* GPIO1_26: WLAN_EN | ||||||
| 	* (J18) GPIO0_16: RST_PHY~ | 	* GPIO1_27: WLAN_IRQ | ||||||
| 	* (K15) GPIO0_17: PMIC FAULT |  | ||||||
| 	* (U12) GPIO0_27: RST_SHIELD~ |  | ||||||
| 	* | 	* | ||||||
| 	* (V13) GPIO1_14: DIG_OUT | 	* GPIO3_4: PCIe_IO.WAKE | ||||||
| 	* (U13) GPIO1_15: DIG_IN | 	* GPIO3_9: PCIe_IO.W_DIS | ||||||
| 	* (R14) GPIO1_20: BT_EN | 	* GPIO3_10: PCIe_IO.RST | ||||||
| 	* (V15) GPIO1_21: GSM_PWR_EN | 	* GPIO3_17: SIM_SEL | ||||||
| 	* (U16) GPIO1_25: RST_GSM | 	* GPIO3_21: RST_HUB~ (USB) | ||||||
| 	* (T16) GPIO1_26: WLAN_EN |  | ||||||
| 	* (V17) GPIO1_27: WLAN_IRQ |  | ||||||
| 	* |  | ||||||
| 	* (J17) GPIO3_4: PCIe_IO.WAKE |  | ||||||
| 	* (K18) GPIO3_9: PCIe_IO.W_DIS |  | ||||||
| 	* (L18) GPIO3_10: PCIe_IO.RST |  | ||||||
| 	* (C12) GPIO3_17: SIM_SEL |  | ||||||
| 	* (A14) GPIO3_21: RST_HUB~ (USB) |  | ||||||
| 	*/ | 	*/ | ||||||
| 
 | 
 | ||||||
| 	/* Bank 0 */ | 	/* Bank 0 */ | ||||||
| 	{OFFSET(spi0_sclk), (MODE(7) | PULLUDDIS)},				/* (A17) gpio0[2] */  /* RST_GNSS */ | 	{OFFSET(spi0_sclk), (MODE(7) | PULLUDDIS)},			/* (A17) gpio0[2] */  /* RST_GNSS */ | ||||||
| 	{OFFSET(spi0_d0), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},		/* (B17) gpio0[3] */  /* GEOFENCE_GNSS */ | 	{OFFSET(spi0_d0), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (B17) gpio0[3] */  /* GEOFENCE_GNSS */ | ||||||
| 	{OFFSET(spi0_d1), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},		/* (B16) gpio0[4] */  /* RTK_STAT_GNSS */ | 	{OFFSET(spi0_d1), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (B16) gpio0[4] */  /* RTK_STAT_GNSS */ | ||||||
| 	{OFFSET(spi0_cs0), (MODE(7) | PULLUDEN | PULLDOWN_EN)},			/* (A16) gpio0[5] */  /* EXTINT_GNSS */ | 	{OFFSET(spi0_cs0), (MODE(7) | PULLUDEN | PULLDOWN_EN)},		/* (A16) gpio0[5] */  /* EXTINT_GNSS */ | ||||||
| 	{OFFSET(spi0_cs1), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (C15) gpio0[6] */  /* TIMEPULSE */ | 	{OFFSET(spi0_cs1), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},/* (C15) gpio0[6] */  /* TIMEPULSE_GNSS */ | ||||||
| 	{OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDEN | PULLUP_EN)},		/* (C18) gpio0[7] */  /* IO_SHIELD */ | 	{OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDEN | PULLUP_EN)},	/* (C18) gpio0[7] */  /* IO_SHIELD */ | ||||||
| 	{OFFSET(mii1_txd3), (MODE(7) | PULLUDDIS)},				/* (J18) gpio0[16] */  /* RST_PHY~ */ | 	{OFFSET(mii1_txd3), (MODE(7) | PULLUDDIS)},			/* (J18) gpio0[16] */  /* RST_PHY~ */ | ||||||
| 	{OFFSET(mii1_txd2), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (K15) gpio0[17] */  /* PMIC_FAULT */ | 	{OFFSET(mii1_txd2), (MODE(7) | PULLUDDIS | RXACTIVE)},		/* (K15) gpio0[17] */  /* PMIC_FAULT */ | ||||||
| 	{OFFSET(gpmc_ad11), (MODE(7) | PULLUDDIS)},				/* (U12) gpio0[27] */  /* RST_SHIELD~ */ | 	{OFFSET(gpmc_ad11), (MODE(7) | PULLUDDIS)},			/* (U12) gpio0[27] */  /* RST_SHIELD~ */ | ||||||
| 
 | 
 | ||||||
| 	/* Bank 1 */ | 	/* Bank 1 */ | ||||||
| 	{OFFSET(gpmc_ad14), (MODE(7) | PULLUDDIS)},				/* (V13) gpio1[14] */  /* DIG_OUT */ | 	{OFFSET(gpmc_ad14), (MODE(7) | PULLUDDIS)},			/* (V13) gpio1[14] */  /* DIG_OUT */ | ||||||
| 	{OFFSET(gpmc_ad15), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U13) gpio1[15] */  /* DIG_IN */ | 	{OFFSET(gpmc_ad15), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},/* (U13) gpio1[15] */  /* DIG_IN */ | ||||||
| 	{OFFSET(gpmc_a4), (MODE(7) | PULLUDDIS)},				/* (R14) gpio1[20] */  /* BT_EN */ | 	{OFFSET(gpmc_a4), (MODE(7) | PULLUDDIS)},			/* (R14) gpio1[20] */  /* BT_EN */ | ||||||
| 	{OFFSET(gpmc_a5), (MODE(7) | PULLUDDIS)},				/* (V15) gpio1[21] */  /* GSM_PWR_EN */ | 	{OFFSET(gpmc_a5), (MODE(7) | PULLUDDIS)},			/* (V15) gpio1[21] */  /* GSM_PWR_EN */ | ||||||
| 	{OFFSET(gpmc_a9),  (MODE(7) | PULLUDDIS)},				/* (U16) gpio1[25] */  /* RST_GSM */ | 	{OFFSET(gpmc_a9),  (MODE(7) | PULLUDDIS)},			/* (U16) gpio1[25] */  /* RST_GSM */ | ||||||
| 	{OFFSET(gpmc_a10), (MODE(7) | PULLUDDIS)},				/* (T16) gpio1[26] */  /* WLAN_EN */ | 	{OFFSET(gpmc_a10), (MODE(7) | PULLUDDIS)},			/* (T16) gpio1[26] */  /* WLAN_EN */ | ||||||
| 	{OFFSET(gpmc_a11),  (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (V17) gpio1[27] */  /* WLAN_IRQ */ | 	{OFFSET(gpmc_a11),  (MODE(7) | PULLUDDIS | RXACTIVE)},		/* (V17) gpio1[27] */  /* WLAN_IRQ */ | ||||||
| 
 | 
 | ||||||
| 	/* TODO: What about all the unused GPMC pins ? */ | 	/* TODO: What about all the unused GPMC pins ? */ | ||||||
| 
 | 
 | ||||||
|  | @ -87,20 +85,20 @@ static struct module_pin_mux gpio_pin_mux[] = { | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 	/* Bank 3 */ | 	/* Bank 3 */ | ||||||
| 	{OFFSET(mii1_col), (MODE(7) | PULLUDEN | PULLUP_EN)},			/* (H16) gpio3[0] */  /* BUTTON */ | 	{OFFSET(mii1_col), (MODE(7) | PULLUDEN | PULLUP_EN)},		/* (H16) gpio3[0] */  /* BUTTON */ | ||||||
| 	{OFFSET(mii1_rxdv), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (J17) gpio3[4] */  /* PCIe_IO.WAKE */ | 	{OFFSET(mii1_rxdv), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},/* (J17) gpio3[4] */  /* PCIe_IO.WAKE */ | ||||||
| 	{OFFSET(mii1_txclk), (MODE(7) | PULLUDDIS)},				/* (K18) gpio3[9] */  /* PCIe_IO.W_DIS */ | 	{OFFSET(mii1_txclk), (MODE(7) | PULLUDDIS)},			/* (K18) gpio3[9] */  /* PCIe_IO.W_DIS */ | ||||||
| 	{OFFSET(mii1_rxclk), (MODE(7) | PULLUDDIS)},				/* (L18) gpio3[10] */  /* PCIe_IO.RST */ | 	{OFFSET(mii1_rxclk), (MODE(7) | PULLUDDIS)},			/* (L18) gpio3[10] */  /* PCIe_IO.RST */ | ||||||
| 	{OFFSET(mcasp0_ahclkr), (MODE(7) | PULLUDEN | PULLDOWN_EN)},		/* (C12) gpio3[17] */  /* SIM_SEL */ | 	{OFFSET(mcasp0_ahclkr), (MODE(7) | PULLUDEN | PULLDOWN_EN)},	/* (C12) gpio3[17] */  /* SIM_SEL */ | ||||||
| 	{OFFSET(mcasp0_ahclkx), (MODE(7) | PULLUDEN)},				/* (A14) gpio3[21] */  /* RST_HUB~ */ | 	{OFFSET(mcasp0_ahclkx), (MODE(7) | PULLUDEN)},			/* (A14) gpio3[21] */  /* RST_HUB~ */ | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* I2C0 PMIC */ | /* I2C0 PMIC */ | ||||||
| static struct module_pin_mux i2c0_pin_mux[] = { | static struct module_pin_mux i2c0_pin_mux[] = { | ||||||
| 	{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C17) I2C0_SDA */ | 	{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C17) I2C0_SDA */ | ||||||
| 	{OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C16) I2C0_SCL */ | 	{OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C16) I2C0_SCL */ | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* I2C2 System */ | /* I2C2 System */ | ||||||
|  | @ -128,40 +126,40 @@ static struct module_pin_mux rmii1_pin_mux[] = { | ||||||
| 
 | 
 | ||||||
| 	/* 25MHz Clock Output */ | 	/* 25MHz Clock Output */ | ||||||
| 	{OFFSET(xdma_event_intr0), MODE(3)},					/* (A15) clkout1 (25 MHz clk for Switch) */ | 	{OFFSET(xdma_event_intr0), MODE(3)},					/* (A15) clkout1 (25 MHz clk for Switch) */ | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* MMC0: WiFi */ | /* MMC0: WiFi */ | ||||||
| static struct module_pin_mux mmc0_sdio_pin_mux[] = { | static struct module_pin_mux mmc0_sdio_pin_mux[] = { | ||||||
| 	{OFFSET(mmc0_clk), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G17) MMC0_CLK */ | 	{OFFSET(mmc0_clk), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_CLK */ | ||||||
| 	{OFFSET(mmc0_cmd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G18) MMC0_CMD */ | 	{OFFSET(mmc0_cmd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_CMD */ | ||||||
| 	{OFFSET(mmc0_dat0), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G16) MMC0_DAT0 */ | 	{OFFSET(mmc0_dat0), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_DAT0 */ | ||||||
| 	{OFFSET(mmc0_dat1), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G15) MMC0_DAT1 */ | 	{OFFSET(mmc0_dat1), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_DAT1 */ | ||||||
| 	{OFFSET(mmc0_dat2), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (F18) MMC0_DAT2 */ | 	{OFFSET(mmc0_dat2), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_DAT2 */ | ||||||
| 	{OFFSET(mmc0_dat3), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (F17) MMC0_DAT3 */ | 	{OFFSET(mmc0_dat3), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC0_DAT3 */ | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* MMC1: eMMC */ | /* MMC1: eMMC */ | ||||||
| static struct module_pin_mux mmc1_emmc_pin_mux[] = { | static struct module_pin_mux mmc1_emmc_pin_mux[] = { | ||||||
| 	{OFFSET(gpmc_csn1), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U9) MMC1_CLK */ | 	{OFFSET(gpmc_csn1), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_CLK */ | ||||||
| 	{OFFSET(gpmc_csn2), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V9) MMC1_CMD */ | 	{OFFSET(gpmc_csn2), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_CMD */ | ||||||
| 	{OFFSET(gpmc_ad0), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U7) MMC1_DAT0 */ | 	{OFFSET(gpmc_ad0), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT0 */ | ||||||
| 	{OFFSET(gpmc_ad1), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V7) MMC1_DAT1 */ | 	{OFFSET(gpmc_ad1), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT1 */ | ||||||
| 	{OFFSET(gpmc_ad2), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (R8) MMC1_DAT2 */ | 	{OFFSET(gpmc_ad2), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT2 */ | ||||||
| 	{OFFSET(gpmc_ad3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T8) MMC1_DAT3 */ | 	{OFFSET(gpmc_ad3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT3 */ | ||||||
| 	{OFFSET(gpmc_ad4), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U8) MMC1_DAT4 */ | 	{OFFSET(gpmc_ad4), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT4 */ | ||||||
| 	{OFFSET(gpmc_ad5), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V8) MMC1_DAT5 */ | 	{OFFSET(gpmc_ad5), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT5 */ | ||||||
| 	{OFFSET(gpmc_ad6), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (R9) MMC1_DAT6 */ | 	{OFFSET(gpmc_ad6), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT6 */ | ||||||
| 	{OFFSET(gpmc_ad7), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T9) MMC1_DAT7 */ | 	{OFFSET(gpmc_ad7), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* MMC1_DAT7 */ | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* USB_DRVBUS not used -> configure as GPIO */ | /* USB_DRVBUS not used -> configure as GPIO */ | ||||||
| static struct module_pin_mux usb_pin_mux[] = { | static struct module_pin_mux usb_pin_mux[] = { | ||||||
| 	{OFFSET(usb0_drvvbus), (MODE(7) | PULLUDDIS)},				/* (F16) USB0_DRVVBUS */ | 	{OFFSET(usb0_drvvbus), (MODE(7) | PULLUDDIS)},				/* (F16) USB0_DRVVBUS */ | ||||||
| 	{OFFSET(usb1_drvvbus), (MODE(7) | PULLUDDIS)},				/* (F15) USB1_DRVVBUS */ | 	{OFFSET(usb1_drvvbus), (MODE(7) | PULLUDDIS)},				/* (F15) USB1_DRVVBUS */ | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* UART0: RS232/RS485 shield mode */ | /* UART0: RS232/RS485 shield mode */ | ||||||
|  | @ -193,7 +191,7 @@ static struct module_pin_mux uart1_pin_mux[] = { | ||||||
| static struct module_pin_mux uart3_pin_mux[] = { | static struct module_pin_mux uart3_pin_mux[] = { | ||||||
| 	{OFFSET(mii1_rxd3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (L17) UART3_RXD */ | 	{OFFSET(mii1_rxd3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (L17) UART3_RXD */ | ||||||
| 	{OFFSET(mii1_rxd2), (MODE(1) | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (L16) UART3_TXD */ | 	{OFFSET(mii1_rxd2), (MODE(1) | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (L16) UART3_TXD */ | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* UART5: Highspeed UART for Bluetooth (no SLEWCTRL) */ | /* UART5: Highspeed UART for Bluetooth (no SLEWCTRL) */ | ||||||
|  | @ -202,7 +200,7 @@ static struct module_pin_mux uart5_pin_mux[] = { | ||||||
| 	{OFFSET(lcd_data8), (MODE(4) | PULLUDEN | PULLUP_EN)},			/* (U1) UART5_TXD */ | 	{OFFSET(lcd_data8), (MODE(4) | PULLUDEN | PULLUP_EN)},			/* (U1) UART5_TXD */ | ||||||
| 	{OFFSET(lcd_data14), (MODE(6) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V4) uart5_ctsn */ | 	{OFFSET(lcd_data14), (MODE(6) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V4) uart5_ctsn */ | ||||||
| 	{OFFSET(lcd_data15), (MODE(6) | PULLUDEN | PULLUP_EN)},			/* (T5) uart5_rtsn */ | 	{OFFSET(lcd_data15), (MODE(6) | PULLUDEN | PULLUP_EN)},			/* (T5) uart5_rtsn */ | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static struct module_pin_mux unused_pin_mux[] = { | static struct module_pin_mux unused_pin_mux[] = { | ||||||
|  | @ -214,7 +212,7 @@ static struct module_pin_mux unused_pin_mux[] = { | ||||||
| 
 | 
 | ||||||
| 	/* TODO: GPMCA1..3, A6..8 */ | 	/* TODO: GPMCA1..3, A6..8 */ | ||||||
| 
 | 
 | ||||||
| 	{-1} | 	{-1}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -250,3 +248,4 @@ void enable_uart1_pin_mux(void) | ||||||
| { | { | ||||||
| 	configure_module_pin_mux(uart1_pin_mux); | 	configure_module_pin_mux(uart1_pin_mux); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -68,7 +68,6 @@ U_BOOT_CMD( | ||||||
| 	shield,	6,	1,	do_shieldmode, | 	shield,	6,	1,	do_shieldmode, | ||||||
| 	"Set the shield mode", | 	"Set the shield mode", | ||||||
| 	"dualcan termination [on|off] [on|off]\n" | 	"dualcan termination [on|off] [on|off]\n" | ||||||
| 	"shield dualcan-passive\n" |  | ||||||
| 	"shield comio mode [rs232|rs485] termination [on|off]\n" | 	"shield comio mode [rs232|rs485] termination [on|off]\n" | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -8,11 +8,6 @@ | ||||||
| #ifndef SHIELD_H | #ifndef SHIELD_H | ||||||
| #define SHIELD_H | #define SHIELD_H | ||||||
| 
 | 
 | ||||||
| #define SHIELD_COM_IO		0 |  | ||||||
| #define SHIELD_DUALCAN		1 |  | ||||||
| #define SHIELD_CAN_GNSS		2 |  | ||||||
| #define SHIELD_DUALCAN_PASSIVE	3 |  | ||||||
| 
 |  | ||||||
| struct shield_t{ | struct shield_t{ | ||||||
|     char name[64]; |     char name[64]; | ||||||
|     int (*setmode)(char * const argv[], int argc); |     int (*setmode)(char * const argv[], int argc); | ||||||
|  |  | ||||||
|  | @ -11,8 +11,8 @@ | ||||||
| 
 | 
 | ||||||
| #define NETBIRD_GPIO_RST_SHIELD_N	GPIO_TO_PIN(0, 27) | #define NETBIRD_GPIO_RST_SHIELD_N	GPIO_TO_PIN(0, 27) | ||||||
| #define NETBIRD_GPIO_LATCH		GPIO_TO_PIN(0, 7) | #define NETBIRD_GPIO_LATCH		GPIO_TO_PIN(0, 7) | ||||||
| #define NETBIRD_GPIO_MODE_0		GPIO_TO_PIN(1, 10) | #define NETBIRD_GPIO_MODE_0		GPIO_TO_PIN(1, 8) | ||||||
| #define NETBIRD_GPIO_MODE_1		GPIO_TO_PIN(1, 8) | #define NETBIRD_GPIO_MODE_1		GPIO_TO_PIN(1, 10) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static int shield_slot_initialized = 0; | static int shield_slot_initialized = 0; | ||||||
|  | @ -184,18 +184,8 @@ static int set_shieldmode(char * const argv[], int argc) | ||||||
| 	return configure_shieldmode(get_mode_from_args(argv, argc)); | 	return configure_shieldmode(get_mode_from_args(argv, argc)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int no_options(char * const argv[], int argc) | /* TODO: Static ? */ | ||||||
| { | struct shield_t can_shield = { | ||||||
| 	if (argc != 0) { |  | ||||||
| 		debug("Too many arguments\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static struct shield_t can_shield = { |  | ||||||
| 	"dualcan", set_shieldmode | 	"dualcan", set_shieldmode | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -203,12 +193,3 @@ void can_shield_init(void) | ||||||
| { | { | ||||||
| 	shield_register(&can_shield); | 	shield_register(&can_shield); | ||||||
| } | } | ||||||
| 
 |  | ||||||
| static struct shield_t can_shield_passive = { |  | ||||||
| 	"dualcan-passive", no_options |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| void can_shield_passive_init(void) |  | ||||||
| { |  | ||||||
| 	shield_register(&can_shield_passive); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  | @ -5,6 +5,5 @@ int shield_can_init(void); | ||||||
| int shield_can_setmode(int mode); | int shield_can_setmode(int mode); | ||||||
| 
 | 
 | ||||||
| void can_shield_init(void); | void can_shield_init(void); | ||||||
| void can_shield_passive_init(void); |  | ||||||
| 
 | 
 | ||||||
| #endif // SHIELD_CAN_H
 | #endif // SHIELD_CAN_H
 | ||||||
|  |  | ||||||
|  | @ -1,26 +0,0 @@ | ||||||
| if TARGET_AM335X_NRHW24 |  | ||||||
| 
 |  | ||||||
| config SYS_BOARD |  | ||||||
|         default "nrhw24" |  | ||||||
| 
 |  | ||||||
| config SYS_VENDOR |  | ||||||
|         default "nm" |  | ||||||
| 
 |  | ||||||
| config SYS_SOC |  | ||||||
|         default "am33xx" |  | ||||||
| 
 |  | ||||||
| config SYS_CONFIG_NAME |  | ||||||
|         default "am335x_nrhw24" |  | ||||||
| 
 |  | ||||||
| config CONS_INDEX |  | ||||||
|         int "UART used for console" |  | ||||||
|         range 1 6 |  | ||||||
|         default 2 |  | ||||||
|         help |  | ||||||
|           The AM335x SoC has a total of 6 UARTs (UART0 to UART5 as referenced |  | ||||||
|           in documentation, etc) available to it.  Depending on your specific |  | ||||||
|           board you may want something other than UART0 as for example the IDK |  | ||||||
|           uses UART3 so enter 4 here. |  | ||||||
| 
 |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
|  | @ -1,13 +0,0 @@ | ||||||
| #
 |  | ||||||
| # Makefile
 |  | ||||||
| #
 |  | ||||||
| # Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  | ||||||
| #
 |  | ||||||
| # SPDX-License-Identifier:	GPL-2.0+
 |  | ||||||
| #
 |  | ||||||
| 
 |  | ||||||
| ifeq ($(CONFIG_SKIP_LOWLEVEL_INIT),) |  | ||||||
| obj-y	:= mux.o |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
| obj-y	+= board.o ../common/bdparser.o ../common/board_descriptor.o ../common/da9063.o shield.o shield_can.o shield_comio.o fileaccess.o |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,28 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * board.h |  | ||||||
|  * |  | ||||||
|  * TI AM335x boards information header |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
 |  | ||||||
|  * |  | ||||||
|  * SPDX-License-Identifier:	GPL-2.0+ |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #ifndef _BOARD_H_ |  | ||||||
| #define _BOARD_H_ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * We have three pin mux functions that must exist.  We must be able to enable |  | ||||||
|  * uart0, for initial output and i2c2 to read the main EEPROM.  We then have a |  | ||||||
|  * main pinmux function that can be overridden to enable all other pinmux that |  | ||||||
|  * is required on the board. |  | ||||||
|  */ |  | ||||||
| void enable_uart0_pin_mux(void); |  | ||||||
| void disable_uart0_pin_mux(void); |  | ||||||
| void enable_uart1_pin_mux(void); |  | ||||||
| 
 |  | ||||||
| void enable_board_pin_mux(void); |  | ||||||
| 
 |  | ||||||
| #define GPIO_TO_PIN(bank, gpio)		(32 * (bank) + (gpio)) |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
|  | @ -1,40 +0,0 @@ | ||||||
| #include <common.h> |  | ||||||
| #include <fs.h> |  | ||||||
| 
 |  | ||||||
| #define BLOCK_DEVICE "mmc" |  | ||||||
| #define OVERLAY_PART "1:3" |  | ||||||
| 
 |  | ||||||
| int read_file(const char* filename, char *buf, int size) |  | ||||||
| { |  | ||||||
| 	loff_t filesize = 0; |  | ||||||
| 	loff_t len; |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	if (fs_set_blk_dev(BLOCK_DEVICE, OVERLAY_PART, FS_TYPE_EXT) != 0) { |  | ||||||
| 		puts("Error, can not set blk device\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* Read at most file size bytes */ |  | ||||||
| 	if (fs_size(filename, &filesize)) { |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (filesize < size) |  | ||||||
| 		size = filesize; |  | ||||||
| 
 |  | ||||||
| 	/* For very unclear reasons the block device needs to be set again after the call to fs_size() */ |  | ||||||
| 	if (fs_set_blk_dev(BLOCK_DEVICE, OVERLAY_PART, FS_TYPE_EXT) != 0) { |  | ||||||
| 		puts("Error, can not set blk device\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if ((ret = fs_read(filename, (ulong)buf, 0, size, &len))) { |  | ||||||
| 		printf("Can't read file %s (size %d, len %lld, ret %d)\n", filename, size, len, ret); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	buf[len] = 0; |  | ||||||
| 
 |  | ||||||
| 	return len; |  | ||||||
| } |  | ||||||
|  | @ -1,14 +0,0 @@ | ||||||
| /**@file	/home/eichenberger/projects/nbhw16/u-boot/board/nm/netbird_v2/fileaccess.h
 |  | ||||||
|  * @author	eichenberger |  | ||||||
|  * @version	704 |  | ||||||
|  * @date |  | ||||||
|  * 	Created:	Tue 06 Jun 2017 02:02:33 PM CEST \n |  | ||||||
|  * 	Last Update:	Tue 06 Jun 2017 02:02:33 PM CEST |  | ||||||
|  */ |  | ||||||
| #ifndef FILEACCESS_H |  | ||||||
| #define FILEACCESS_H |  | ||||||
| 
 |  | ||||||
| void fs_set_console(void); |  | ||||||
| int read_file(const char* filename, char *buf, int size); |  | ||||||
| 
 |  | ||||||
| #endif // FILEACCESS_H
 |  | ||||||
|  | @ -1,233 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * mux.c |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2018-2019 NetModule AG - http://www.netmodule.com/
 |  | ||||||
|  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  | ||||||
|  * |  | ||||||
|  * This program is free software; you can redistribute it and/or |  | ||||||
|  * modify it under the terms of the GNU General Public License as |  | ||||||
|  * published by the Free Software Foundation version 2. |  | ||||||
|  * |  | ||||||
|  * This program is distributed "as is" WITHOUT ANY WARRANTY of any |  | ||||||
|  * kind, whether express or implied; without even the implied warranty |  | ||||||
|  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #include <common.h> |  | ||||||
| #include <asm/arch/sys_proto.h> |  | ||||||
| #include <asm/arch/hardware.h> |  | ||||||
| #include <asm/arch/mux.h> |  | ||||||
| #include <asm/io.h> |  | ||||||
| #include "board.h" |  | ||||||
| 
 |  | ||||||
| static struct module_pin_mux gpio_pin_mux[] = { |  | ||||||
| 	/*
 |  | ||||||
| 	* CPU GPIOs |  | ||||||
| 	* |  | ||||||
| 	* (A17) GPIO0_2: RST_GNSS~ |  | ||||||
| 	* (A16) GPIO0_5: EXTINT_GNSS |  | ||||||
| 	* (C15) GPIO0_6: TIMEPULSE |  | ||||||
| 	* (C18) GPIO0_7: PWM / SHIELD LATCH |  | ||||||
| 	* (J18) GPIO0_16: RST_PHY~ |  | ||||||
| 	* (U12) GPIO0_27: RST_SHIELD~ |  | ||||||
| 	* |  | ||||||
| 	* (R14) GPIO1_20: BT_EN |  | ||||||
| 	* (V15) GPIO1_21: GSM_PWR_EN |  | ||||||
| 	* (U16) GPIO1_25: RST_GSM |  | ||||||
| 	* (T16) GPIO1_26: WLAN_EN |  | ||||||
| 	* (V17) GPIO1_27: WLAN_IRQ |  | ||||||
| 	* |  | ||||||
| 	* (C12) GPIO3_17: SIM_SEL |  | ||||||
| 	*/ |  | ||||||
| 
 |  | ||||||
| 	/* Bank 0 */ |  | ||||||
| 	{OFFSET(spi0_sclk), (MODE(7) | PULLUDDIS)},				/* (A17) gpio0[2] */  /* RST_GNSS */ |  | ||||||
| 	{OFFSET(spi0_cs0), (MODE(7) | PULLUDEN | PULLDOWN_EN)},			/* (A16) gpio0[5] */  /* EXTINT_GNSS */ |  | ||||||
| 	{OFFSET(spi0_cs1), (MODE(7) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (C15) gpio0[6] */  /* TIMEPULSE */ |  | ||||||
| 	{OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDEN | PULLUP_EN)},		/* (C18) gpio0[7] */  /* IO_SHIELD */ |  | ||||||
| 	{OFFSET(mii1_txd3), (MODE(7) | PULLUDDIS)},				/* (J18) gpio0[16] */  /* RST_PHY~ */ |  | ||||||
| 	{OFFSET(gpmc_ad11), (MODE(7) | PULLUDDIS)},				/* (U12) gpio0[27] */  /* RST_SHIELD~ */ |  | ||||||
| 
 |  | ||||||
| 	/* Bank 1 */ |  | ||||||
| 	{OFFSET(gpmc_a4), (MODE(7) | PULLUDDIS)},				/* (R14) gpio1[20] */  /* BT_EN */ |  | ||||||
| 	{OFFSET(gpmc_a5), (MODE(7) | PULLUDDIS)},				/* (V15) gpio1[21] */  /* GSM_PWR_EN */ |  | ||||||
| 	{OFFSET(gpmc_a9),  (MODE(7) | PULLUDDIS)},				/* (U16) gpio1[25] */  /* RST_GSM */ |  | ||||||
| 	{OFFSET(gpmc_a10), (MODE(7) | PULLUDDIS)},				/* (T16) gpio1[26] */  /* WLAN_EN */ |  | ||||||
| 	{OFFSET(gpmc_a11),  (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (V17) gpio1[27] */  /* WLAN_IRQ */ |  | ||||||
| 
 |  | ||||||
| 	/* TODO: What about all the unused GPMC pins ? */ |  | ||||||
| 
 |  | ||||||
| 	/* Bank 2 */ |  | ||||||
| #if 0 |  | ||||||
| 	/* TODO: What is this meant for? */ |  | ||||||
| 	{OFFSET(lcd_data3), (MODE(7) | PULLUDEN | PULLUP_EN)},	/* (R4) gpio2[9] */  /* SYSBOOT_3 */ |  | ||||||
| 	{OFFSET(lcd_data4), (MODE(7) | PULLUDEN | PULLUP_EN)},	/* (T1) gpio2[10] */  /* SYSBOOT_4 */ |  | ||||||
| 
 |  | ||||||
| 	/* TODO: Check other unued pins from sysboot block */ |  | ||||||
| 	/* Ensure PU/PD does not work against external signal */ |  | ||||||
| 	/*
 |  | ||||||
| 	 * SYSBOOT 0,1,5,12,13 = Low |  | ||||||
| 	 * SYSBOOT 2 = High |  | ||||||
| 	 */ |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	/* Bank 3 */ |  | ||||||
| 	{OFFSET(mcasp0_ahclkr), (MODE(7) | PULLUDEN | PULLDOWN_EN)},		/* (C12) gpio3[17] */  /* SIM_SEL */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* I2C0 PMIC */ |  | ||||||
| static struct module_pin_mux i2c0_pin_mux[] = { |  | ||||||
| 	{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C17) I2C0_SDA */ |  | ||||||
| 	{OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (C16) I2C0_SCL */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* I2C2 System */ |  | ||||||
| static struct module_pin_mux i2c2_pin_mux[] = { |  | ||||||
| 	{OFFSET(uart1_rtsn), (MODE(3) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (D17) I2C2_SCL */ |  | ||||||
| 	{OFFSET(uart1_ctsn), (MODE(3) | RXACTIVE | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (D18) I2C2_SDA */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* RMII1: Ethernet */ |  | ||||||
| static struct module_pin_mux rmii1_pin_mux[] = { |  | ||||||
| 	/* RMII */ |  | ||||||
| 	{OFFSET(mii1_crs), MODE(1) | PULLUDDIS | RXACTIVE},			/* (H17) rmii1_crs */ |  | ||||||
| 	{OFFSET(mii1_rxerr), MODE(7) | PULLUDEN | PULLDOWN_EN | RXACTIVE},	/* (J15) gpio */ |  | ||||||
| 	{OFFSET(mii1_rxd0), MODE(1) | PULLUDDIS | RXACTIVE},			/* (M16) rmii1_rxd0 */ |  | ||||||
| 	{OFFSET(mii1_rxd1), MODE(1) | PULLUDDIS | RXACTIVE},			/* (L15) rmii1_rxd1 */ |  | ||||||
| 	{OFFSET(mii1_txen), MODE(1) | PULLUDDIS},				/* (J16) rmii1_txen */ |  | ||||||
| 	{OFFSET(mii1_txd0), MODE(1) | PULLUDDIS},				/* (K17) rmii1_txd0 */ |  | ||||||
| 	{OFFSET(mii1_txd1), MODE(1) | PULLUDDIS},				/* (K16) rmii1_txd1 */ |  | ||||||
| 	{OFFSET(rmii1_refclk), MODE(0) | PULLUDDIS | RXACTIVE},			/* (H18) rmii1_refclk */ |  | ||||||
| 
 |  | ||||||
| 	/* SMI */ |  | ||||||
| 	{OFFSET(mdio_clk), MODE(0) | PULLUDDIS},				/* (M18) mdio_clk */ |  | ||||||
| 	{OFFSET(mdio_data), MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE},		/* (M17) mdio_data */ |  | ||||||
| 
 |  | ||||||
| 	/* 25MHz Clock Output */ |  | ||||||
| 	{OFFSET(xdma_event_intr0), MODE(3)},					/* (A15) clkout1 (25 MHz clk for PHY) */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* MMC0: WiFi */ |  | ||||||
| static struct module_pin_mux mmc0_sdio_pin_mux[] = { |  | ||||||
| 	{OFFSET(mmc0_clk), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G17) MMC0_CLK */ |  | ||||||
| 	{OFFSET(mmc0_cmd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G18) MMC0_CMD */ |  | ||||||
| 	{OFFSET(mmc0_dat0), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G16) MMC0_DAT0 */ |  | ||||||
| 	{OFFSET(mmc0_dat1), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (G15) MMC0_DAT1 */ |  | ||||||
| 	{OFFSET(mmc0_dat2), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (F18) MMC0_DAT2 */ |  | ||||||
| 	{OFFSET(mmc0_dat3), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (F17) MMC0_DAT3 */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* MMC1: eMMC */ |  | ||||||
| static struct module_pin_mux mmc1_emmc_pin_mux[] = { |  | ||||||
| 	{OFFSET(gpmc_csn1), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U9) MMC1_CLK */ |  | ||||||
| 	{OFFSET(gpmc_csn2), (MODE(2) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V9) MMC1_CMD */ |  | ||||||
| 	{OFFSET(gpmc_ad0), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U7) MMC1_DAT0 */ |  | ||||||
| 	{OFFSET(gpmc_ad1), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V7) MMC1_DAT1 */ |  | ||||||
| 	{OFFSET(gpmc_ad2), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (R8) MMC1_DAT2 */ |  | ||||||
| 	{OFFSET(gpmc_ad3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T8) MMC1_DAT3 */ |  | ||||||
| 	{OFFSET(gpmc_ad4), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U8) MMC1_DAT4 */ |  | ||||||
| 	{OFFSET(gpmc_ad5), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V8) MMC1_DAT5 */ |  | ||||||
| 	{OFFSET(gpmc_ad6), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (R9) MMC1_DAT6 */ |  | ||||||
| 	{OFFSET(gpmc_ad7), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (T9) MMC1_DAT7 */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* USB_DRVBUS not used -> configure as GPIO */ |  | ||||||
| static struct module_pin_mux usb_pin_mux[] = { |  | ||||||
| 	{OFFSET(usb0_drvvbus), (MODE(7) | PULLUDDIS)},				/* (F16) USB0_DRVVBUS */ |  | ||||||
| 	{OFFSET(usb1_drvvbus), (MODE(7) | PULLUDDIS)},				/* (F15) USB1_DRVVBUS */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* UART0: RS232/RS485 shield mode */ |  | ||||||
| static struct module_pin_mux uart0_pin_mux[] = { |  | ||||||
| 	{OFFSET(uart0_rxd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (E15) UART0_RXD */ |  | ||||||
| 	{OFFSET(uart0_txd), (MODE(0) | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (E16) UART0_TXD */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* UART0: Shield I/F (UART, CAN) */ |  | ||||||
| /* Leave UART0 unconfigured because we want to configure it as needed by Linux (can/spi/uart/etc) */ |  | ||||||
| /* Mode 7 = GPIO */ |  | ||||||
| static struct module_pin_mux uart0_disabled_pin_mux[] = { |  | ||||||
| 	{OFFSET(uart0_rxd), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (E15) GPIO1_10 */ |  | ||||||
| 	{OFFSET(uart0_txd), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (E16) GPIO1_11 */ |  | ||||||
| 	{OFFSET(uart0_ctsn), (MODE(7) | PULLUDDIS | RXACTIVE)},			/* (E18) GPIO1_8 */ |  | ||||||
| 	{OFFSET(uart0_rtsn), (MODE(7) | PULLUDEN | PULLUP_EN)},			/* (E17) GPIO1_9 */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* UART1: User (Debug/Console) */ |  | ||||||
| static struct module_pin_mux uart1_pin_mux[] = { |  | ||||||
| 	{OFFSET(uart1_rxd), (MODE(0) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (D16) uart1_rxd */ |  | ||||||
| 	{OFFSET(uart1_txd), (MODE(0) | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (D15) uart1_txd */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* UART3: GNSS */ |  | ||||||
| static struct module_pin_mux uart3_pin_mux[] = { |  | ||||||
| 	{OFFSET(mii1_rxd3), (MODE(1) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (L17) UART3_RXD */ |  | ||||||
| 	{OFFSET(mii1_rxd2), (MODE(1) | PULLUDEN | PULLUP_EN | SLEWCTRL)},	/* (L16) UART3_TXD */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* UART5: Highspeed UART for Bluetooth (no SLEWCTRL) */ |  | ||||||
| static struct module_pin_mux uart5_pin_mux[] = { |  | ||||||
| 	{OFFSET(lcd_data9), (MODE(4) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (U2) UART5_RXD */ |  | ||||||
| 	{OFFSET(lcd_data8), (MODE(4) | PULLUDEN | PULLUP_EN)},			/* (U1) UART5_TXD */ |  | ||||||
| 	{OFFSET(lcd_data14), (MODE(6) | PULLUDEN | PULLUP_EN | RXACTIVE)},	/* (V4) uart5_ctsn */ |  | ||||||
| 	{OFFSET(lcd_data15), (MODE(6) | PULLUDEN | PULLUP_EN)},			/* (T5) uart5_rtsn */ |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static struct module_pin_mux unused_pin_mux[] = { |  | ||||||
| 	/* SYSBOOT6, 7, 10, 11: Not used pulldown active, receiver disabled */ |  | ||||||
| 	{OFFSET(lcd_data6), (MODE(7) | PULLUDEN | PULLDOWN_EN)}, |  | ||||||
| 	{OFFSET(lcd_data7), (MODE(7) | PULLUDEN | PULLDOWN_EN)}, |  | ||||||
| 	{OFFSET(lcd_data10), (MODE(7) | PULLUDEN | PULLDOWN_EN)}, |  | ||||||
| 	{OFFSET(lcd_data11), (MODE(7) | PULLUDEN | PULLDOWN_EN)}, |  | ||||||
| 
 |  | ||||||
| 	/* TODO: GPMCA1..3, A6..8 */ |  | ||||||
| 
 |  | ||||||
| 	{-1} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| void enable_board_pin_mux(void) |  | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(gpio_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	configure_module_pin_mux(rmii1_pin_mux); |  | ||||||
| 	configure_module_pin_mux(mmc0_sdio_pin_mux); |  | ||||||
| 	configure_module_pin_mux(mmc1_emmc_pin_mux); |  | ||||||
| 	configure_module_pin_mux(usb_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	configure_module_pin_mux(i2c0_pin_mux); |  | ||||||
| 	configure_module_pin_mux(i2c2_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	configure_module_pin_mux(uart3_pin_mux); |  | ||||||
| 	configure_module_pin_mux(uart5_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	configure_module_pin_mux(unused_pin_mux); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void enable_uart0_pin_mux(void) |  | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(uart0_pin_mux); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void disable_uart0_pin_mux(void) |  | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(uart0_disabled_pin_mux); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void enable_uart1_pin_mux(void) |  | ||||||
| { |  | ||||||
| 	configure_module_pin_mux(uart1_pin_mux); |  | ||||||
| } |  | ||||||
|  | @ -1,74 +0,0 @@ | ||||||
| #undef DEBUG |  | ||||||
| 
 |  | ||||||
| #include <common.h> |  | ||||||
| #include <asm/gpio.h> |  | ||||||
| #include <asm/arch/mux.h> |  | ||||||
| 
 |  | ||||||
| #include "shield.h" |  | ||||||
| #include "board.h" |  | ||||||
| 
 |  | ||||||
| #define MAX_SHIELDS 16 |  | ||||||
| 
 |  | ||||||
| static struct shield_t *shields[MAX_SHIELDS]; |  | ||||||
| static int shield_count = 0; |  | ||||||
| 
 |  | ||||||
| /* Perhaps this function shouldn't leave in shields.c? */ |  | ||||||
| int shield_gpio_request_as_input(unsigned int gpio, const char *label) |  | ||||||
| { |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
|  	ret = gpio_request(gpio, label); |  | ||||||
| 	if ((ret < 0)) { |  | ||||||
| 		printf("Could not request shield slot %s gpio\n", label); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	ret = gpio_direction_input(gpio); |  | ||||||
| 	if ((ret < 0)) { |  | ||||||
| 		printf("Could not configure shield slot %s gpio as input\n", label); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void shield_register(struct shield_t *shield) |  | ||||||
| { |  | ||||||
| 	if (shield_count >= MAX_SHIELDS) { |  | ||||||
| 		printf("Max shield count reached (%d), please increment MAX_SHIELDS\n", MAX_SHIELDS); |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	shields[shield_count++] = shield; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int shield_set_mode(const char* shield_type, int argc, char * const argv[]) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < shield_count; i++) { |  | ||||||
| 		if (strcmp(shield_type, shields[i]->name) == 0) { |  | ||||||
| 			return shields[i]->setmode(argv, argc); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	printf("## Error: No %s shield installed\n", shield_type); |  | ||||||
| 	/* Do not return error, to not show usage (request by rs) */ |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int do_shieldmode(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |  | ||||||
| { |  | ||||||
| 	if (argc < 2) { |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return shield_set_mode(argv[1], argc - 2, &argv[2]); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| U_BOOT_CMD( |  | ||||||
| 	shield,	6,	1,	do_shieldmode, |  | ||||||
| 	"Set the shield mode", |  | ||||||
| 	"dualcan termination [on|off] [on|off]\n" |  | ||||||
| 	"shield dualcan-passive\n" |  | ||||||
| 	"shield comio mode [rs232|rs485] termination [on|off]\n" |  | ||||||
| ); |  | ||||||
| 
 |  | ||||||
|  | @ -1,26 +0,0 @@ | ||||||
| /**@file	/home/eichenberger/projects/nbhw16/u-boot/board/nm/netbird_v2/shield.h
 |  | ||||||
|  * @author	eichenberger |  | ||||||
|  * @version	704 |  | ||||||
|  * @date |  | ||||||
|  * 	Created:	Wed 31 May 2017 02:56:16 PM CEST \n |  | ||||||
|  * 	Last Update:	Wed 31 May 2017 02:56:16 PM CEST |  | ||||||
|  */ |  | ||||||
| #ifndef SHIELD_H |  | ||||||
| #define SHIELD_H |  | ||||||
| 
 |  | ||||||
| #define SHIELD_COM_IO		0 |  | ||||||
| #define SHIELD_DUALCAN		1 |  | ||||||
| #define SHIELD_CAN_GNSS		2 |  | ||||||
| #define SHIELD_DUALCAN_PASSIVE	3 |  | ||||||
| 
 |  | ||||||
| struct shield_t{ |  | ||||||
|     char name[64]; |  | ||||||
|     int (*setmode)(char * const argv[], int argc); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| int shield_setmode(int mode); |  | ||||||
| void shield_register(struct shield_t *shield); |  | ||||||
| 
 |  | ||||||
| int shield_gpio_request_as_input(unsigned int gpio, const char *label); |  | ||||||
| 
 |  | ||||||
| #endif // SHIELD_H
 |  | ||||||
|  | @ -1,214 +0,0 @@ | ||||||
| #undef DEBUG |  | ||||||
| 
 |  | ||||||
| #include <common.h> |  | ||||||
| #include <asm/gpio.h> |  | ||||||
| #include <asm/arch/mux.h> |  | ||||||
| 
 |  | ||||||
| #include "shield.h" |  | ||||||
| #include "board.h" |  | ||||||
| 
 |  | ||||||
| #define CAN_PORTS			2 |  | ||||||
| 
 |  | ||||||
| #define NETBIRD_GPIO_RST_SHIELD_N	GPIO_TO_PIN(0, 27) |  | ||||||
| #define NETBIRD_GPIO_LATCH		GPIO_TO_PIN(0, 7) |  | ||||||
| #define NETBIRD_GPIO_MODE_0		GPIO_TO_PIN(1, 10) |  | ||||||
| #define NETBIRD_GPIO_MODE_1		GPIO_TO_PIN(1, 8) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static int shield_slot_initialized = 0; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static struct module_pin_mux can_shield_netbird_pin_mux_config[] = { |  | ||||||
| 	/* Leave UART0 unconfigured because we want to configure it as needed by linux (can/spi/uart/etc) */ |  | ||||||
| 	{OFFSET(uart0_ctsn), (MODE(7) | PULLUDEN | PULLUP_EN)},		/* (E18) gpio1_8 */ /* Mode 0 */ |  | ||||||
| 	{OFFSET(uart0_rxd), (MODE(7) | PULLUDEN | PULLUP_EN)},		/* (E15) gpio1_10 */ /* Mode 1 */ |  | ||||||
| 	{OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDEN | PULLUP_EN)},	/* (C18) eCAP0_in_PWM0_out.gpio0[7] */ /* Latch EN */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static struct module_pin_mux can_shield_netbird_pin_mux_final[] = { |  | ||||||
| 	{OFFSET(uart0_txd), (MODE(2) | PULLUDDIS | RXACTIVE)},		/* (E16) dcan0_rx */ |  | ||||||
| 	{OFFSET(uart0_rxd), (MODE(2) | PULLUDEN | PULLUP_EN)},		/* (E15) dcan0_tx */ |  | ||||||
| 	{OFFSET(uart0_rtsn), (MODE(2) | PULLUDDIS | RXACTIVE)},		/* (E17) dcan1_rx */ |  | ||||||
| 	{OFFSET(uart0_ctsn), (MODE(2) | PULLUDEN | PULLUP_EN)},		/* (E18) dcan1_tx */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static int request_gpios(void) |  | ||||||
| { |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	debug("Shield configure gpios\n"); |  | ||||||
|  	ret = shield_gpio_request_as_input(NETBIRD_GPIO_RST_SHIELD_N, "shield-rst"); |  | ||||||
| 	if ((ret < 0)) |  | ||||||
| 		return -1; |  | ||||||
| 	ret = shield_gpio_request_as_input(NETBIRD_GPIO_LATCH, "shield-load"); |  | ||||||
| 	if ((ret < 0)) |  | ||||||
| 		return -1; |  | ||||||
| 	ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_0, "shield-mode0"); |  | ||||||
| 	if ((ret < 0)) |  | ||||||
| 		return -1; |  | ||||||
| 	ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_1, "shield-mode1"); |  | ||||||
| 	if ((ret < 0)) |  | ||||||
| 		return -1; |  | ||||||
| 
 |  | ||||||
| 	shield_slot_initialized = 1; |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int configure_shieldmode(int mode) |  | ||||||
| { |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	if (mode < 0 || mode > 3) { |  | ||||||
| 		debug("Invalid shield mode %d\n", mode); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	debug("Shield type dualcan\n"); |  | ||||||
| 	debug ("Set shield mode to %d\n", mode); |  | ||||||
| 
 |  | ||||||
| 	if (!shield_slot_initialized) { |  | ||||||
| 		if (request_gpios()) { |  | ||||||
| 			puts("Failed to request gpios\n"); |  | ||||||
| 			return -1; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	debug("Configure shield pin muxing for configuration\n"); |  | ||||||
| 	configure_module_pin_mux(can_shield_netbird_pin_mux_config); |  | ||||||
| 
 |  | ||||||
| 	debug("Make sure shield module is in reset\n"); |  | ||||||
| 	ret = gpio_direction_output(NETBIRD_GPIO_RST_SHIELD_N, 0); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not set shield-rst as output\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Set latch to high\n"); |  | ||||||
| 	ret = gpio_direction_output(NETBIRD_GPIO_LATCH, 1); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not set shield-load as output\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Write mode to GPIOs\n"); |  | ||||||
| 	ret = gpio_direction_output(NETBIRD_GPIO_MODE_0, mode & 0x01); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not set shield-mode0 as output\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	ret = gpio_direction_output(NETBIRD_GPIO_MODE_1, mode & 0x02); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not set shield-mode1 as output\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Set latch to low\n"); |  | ||||||
| 	gpio_set_value(NETBIRD_GPIO_LATCH, 0); |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Set mode0 and mode1 to highz again\n"); |  | ||||||
| 	ret = gpio_direction_input(NETBIRD_GPIO_MODE_0); |  | ||||||
| 	if ((ret < 0)) { |  | ||||||
| 		puts("Could not configure shield slot mode0 gpio as input\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	ret = gpio_direction_input(NETBIRD_GPIO_MODE_1); |  | ||||||
| 	if ((ret < 0)) { |  | ||||||
| 		puts("Could not configure shield slot mode1 gpio as input\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Take shield out of reset\n"); |  | ||||||
| 	gpio_set_value(NETBIRD_GPIO_RST_SHIELD_N, 1); |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Set final can shield muxing\n"); |  | ||||||
| 	configure_module_pin_mux(can_shield_netbird_pin_mux_final); |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int get_termination(const char* termination) |  | ||||||
| { |  | ||||||
| 	if (strcmp("on", termination) == 0) { |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
| 	else if (strcmp("off", termination) == 0)  { |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	debug ("Invalid termination mode %s (falling back to off)", termination); |  | ||||||
| 	return -1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int get_mode_from_args(char * const argv[], int argc) |  | ||||||
| { |  | ||||||
| 	int terminations[CAN_PORTS]; |  | ||||||
| 	int i; |  | ||||||
| 
 |  | ||||||
| 	assert(argc == (CAN_PORTS + 1)); |  | ||||||
| 
 |  | ||||||
| 	if (strcmp ("termination", argv[0])) { |  | ||||||
| 		debug("The only option for dualcan is terminations\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < CAN_PORTS; i ++) { |  | ||||||
| 		terminations[i] = get_termination(argv[i + 1]); |  | ||||||
| 		if (terminations[i] < 0) { |  | ||||||
| 			return -1; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* Termination is inverse */ |  | ||||||
| 	/* TODO: Double check */ |  | ||||||
| 	return (!terminations[0] << 0) | (!terminations[1] << 1); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int set_shieldmode(char * const argv[], int argc) |  | ||||||
| { |  | ||||||
| 	if (argc != 3) { |  | ||||||
| 		debug("Too few arguments for dualcan\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return configure_shieldmode(get_mode_from_args(argv, argc)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int no_options(char * const argv[], int argc) |  | ||||||
| { |  | ||||||
| 	if (argc != 0) { |  | ||||||
| 		debug("Too many arguments\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static struct shield_t can_shield = { |  | ||||||
| 	"dualcan", set_shieldmode |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| void can_shield_init(void) |  | ||||||
| { |  | ||||||
| 	shield_register(&can_shield); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static struct shield_t can_shield_passive = { |  | ||||||
| 	"dualcan-passive", no_options |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| void can_shield_passive_init(void) |  | ||||||
| { |  | ||||||
| 	shield_register(&can_shield_passive); |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| #ifndef SHIELD_CAN_H |  | ||||||
| #define SHIELD_CAN_H |  | ||||||
| 
 |  | ||||||
| int shield_can_init(void); |  | ||||||
| int shield_can_setmode(int mode); |  | ||||||
| 
 |  | ||||||
| void can_shield_init(void); |  | ||||||
| void can_shield_passive_init(void); |  | ||||||
| 
 |  | ||||||
| #endif // SHIELD_CAN_H
 |  | ||||||
|  | @ -1,252 +0,0 @@ | ||||||
| #undef DEBUG |  | ||||||
| 
 |  | ||||||
| #include <common.h> |  | ||||||
| #include <asm/gpio.h> |  | ||||||
| #include <asm/arch/mux.h> |  | ||||||
| 
 |  | ||||||
| #include "shield.h" |  | ||||||
| #include "board.h" |  | ||||||
| 
 |  | ||||||
| /* TODO: Double Check */ |  | ||||||
| #define NETBIRD_GPIO_RST_SHIELD_N	GPIO_TO_PIN(0, 27) |  | ||||||
| #define NETBIRD_GPIO_LOAD		GPIO_TO_PIN(1, 9) |  | ||||||
| /* TODO: Who configures UART0_RTSn, GPIO1_9 ? */ |  | ||||||
| #define NETBIRD_GPIO_MODE_0		GPIO_TO_PIN(1, 11) |  | ||||||
| #define NETBIRD_GPIO_MODE_1		GPIO_TO_PIN(1, 10) |  | ||||||
| 
 |  | ||||||
| static int shield_slot_initialized = 0; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* TODO: Naming -> config, final */ |  | ||||||
| static struct module_pin_mux shield_gpio_netbird_pin_mux[] = { |  | ||||||
| 	{OFFSET(uart0_rxd), (MODE(7) | PULLUDDIS)},			/* (E15) gpio1_10 */ /* Mode 0 */ |  | ||||||
| 	{OFFSET(uart0_txd), (MODE(7) | PULLUDEN | PULLUP_EN)},		/* (E16) gpio1_11 */ /* Mode 1 */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static struct module_pin_mux shield_gpio_safe_netbird_pin_mux[] = { |  | ||||||
| 	/* Leave UART0 unconfigured (GPIO) because we want to configure it as needed by linux (can/spi/uart/etc) */ |  | ||||||
| 	{OFFSET(uart0_rxd), (MODE(7) | PULLUDDIS | RXACTIVE)},		/* (E15) gpio1_10 */ /* Mode 0 */ |  | ||||||
| 	{OFFSET(uart0_txd), (MODE(7) | PULLUDDIS | RXACTIVE)},		/* (E16) gpio1_11 */ /* Mode 1 */ |  | ||||||
| 	{-1}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static int request_gpios(void) |  | ||||||
| { |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	debug("Extension slot init\n"); |  | ||||||
|  	ret = shield_gpio_request_as_input(NETBIRD_GPIO_RST_SHIELD_N, "shield-rst"); |  | ||||||
| 	if ((ret < 0)) |  | ||||||
| 		return -1; |  | ||||||
| 	ret = shield_gpio_request_as_input(NETBIRD_GPIO_LOAD, "shield-load"); |  | ||||||
| 	if ((ret < 0)) |  | ||||||
| 		return -1; |  | ||||||
| 	ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_0, "shield-mode0"); |  | ||||||
| 	if ((ret < 0)) |  | ||||||
| 		return -1; |  | ||||||
| 	ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_1, "shield-mode1"); |  | ||||||
| 	if ((ret < 0)) |  | ||||||
| 		return -1; |  | ||||||
| 
 |  | ||||||
| 	shield_slot_initialized = 1; |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int configure_shieldmode(int mode) |  | ||||||
| { |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	if (mode < 0 || mode > 3) { |  | ||||||
| 		debug ("Invalid shield mode %d\n", mode); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	debug("Shield type comio\n"); |  | ||||||
| 	debug ("Set shield mode to %d\n", mode); |  | ||||||
| 
 |  | ||||||
| 	if (!shield_slot_initialized) { |  | ||||||
| 		if (request_gpios()) { |  | ||||||
| 			puts("Failed to request gpios\n"); |  | ||||||
| 			return -1; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	debug("Make sure shield module is in reset\n"); |  | ||||||
| 	ret = gpio_direction_output(NETBIRD_GPIO_RST_SHIELD_N, 0); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not set shield-rst as output\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Enable gpio pull-ups\n"); |  | ||||||
| 	configure_module_pin_mux(shield_gpio_netbird_pin_mux); |  | ||||||
| 
 |  | ||||||
| 	debug("Set load to low\n"); |  | ||||||
| 	ret = gpio_direction_output(NETBIRD_GPIO_LOAD, 0); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not set shield-load as output\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Write mode to GPIOs\n"); |  | ||||||
| 	ret = gpio_direction_output(NETBIRD_GPIO_MODE_0, mode & 0x01); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not set shield-mode0 as output\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	ret = gpio_direction_output(NETBIRD_GPIO_MODE_1, mode & 0x02); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not set shield-mode1 as output\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Set load to high\n"); |  | ||||||
| 	gpio_set_value(NETBIRD_GPIO_LOAD, 1); |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Set mode0 and mode1 to highz again\n"); |  | ||||||
| 	ret = gpio_direction_input(NETBIRD_GPIO_MODE_0); |  | ||||||
| 	if ((ret < 0)) { |  | ||||||
| 		puts("Could not configure shield slot mode0 gpio as input\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	ret = gpio_direction_input(NETBIRD_GPIO_MODE_1); |  | ||||||
| 	if ((ret < 0)) { |  | ||||||
| 		puts("Could not configure shield slot mode1 gpio as input\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Disable pullups on shield gpios\n"); |  | ||||||
| 	configure_module_pin_mux(shield_gpio_safe_netbird_pin_mux); |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Take shield out of reset\n"); |  | ||||||
| 	gpio_set_value(NETBIRD_GPIO_RST_SHIELD_N, 1); |  | ||||||
| 	udelay(10); |  | ||||||
| 
 |  | ||||||
| 	debug("Set gpio load as input again\n"); |  | ||||||
| 	ret = gpio_direction_input(NETBIRD_GPIO_LOAD); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 		puts("Can not configure shield slot load as input"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| enum mode_nr { |  | ||||||
| 	RS232, |  | ||||||
| 	RS485, |  | ||||||
| 	UNKNOWN |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| struct mode { |  | ||||||
| 	enum mode_nr nr; |  | ||||||
| 	const char* name; |  | ||||||
| 	int argc; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| struct mode modes[] = { |  | ||||||
| 	{ RS232, "rs232", 0 }, |  | ||||||
| 	{ RS485, "rs485", 2 } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const struct mode *get_mode(const char *mode) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
| 	for (i = 0; i < ARRAY_SIZE(modes); i++) { |  | ||||||
| 		if (strcmp(modes[i].name, mode) == 0) { |  | ||||||
| 			return &modes[i]; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return NULL; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int get_termination(const char* termination) |  | ||||||
| { |  | ||||||
| 	if (strcmp("on", termination) == 0) { |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
| 	else if (strcmp("off", termination) == 0)  { |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	debug ("Invalid termination mode %s (falling back to off)", termination); |  | ||||||
| 	return -1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int get_mode_from_args(char * const argv[], int argc) |  | ||||||
| { |  | ||||||
| 	int termination = 0; |  | ||||||
| 	int rs232 = 0; |  | ||||||
| 	const struct mode *selected_mode; |  | ||||||
| 
 |  | ||||||
| 	assert(argc >= 2); |  | ||||||
| 
 |  | ||||||
| 	if (strcmp ("mode", argv[0])) { |  | ||||||
| 		debug("Invalid arguments (see help)\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	selected_mode = get_mode(argv[1]); |  | ||||||
| 	if (selected_mode == NULL) { |  | ||||||
| 		debug("Mode %s not supported\n", argv[1]); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	debug ("Mode %s, index %d, argc %d\n", selected_mode->name, |  | ||||||
| 			selected_mode->nr, selected_mode->argc); |  | ||||||
| 
 |  | ||||||
| 	if (selected_mode->argc != argc - 2) { |  | ||||||
| 		debug("Invalid argument count for mode %s (should %d is %d)\n", |  | ||||||
| 				argv[1],  selected_mode->argc, argc - 2); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (selected_mode->nr == RS485) { |  | ||||||
| 		if (strcmp("termination", argv[2])) { |  | ||||||
| 			debug("Invalid arguments, do not configure termination\n"); |  | ||||||
| 			return -1; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		termination = get_termination(argv[3]); |  | ||||||
| 		if (termination < 0) { |  | ||||||
| 			debug("Invalid termination %s\n", argv[3]); |  | ||||||
| 			return -1; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	else { |  | ||||||
| 		rs232 = 1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* Termination is inverse */ |  | ||||||
| 	return (rs232 << 0) | ((!termination) << 1); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int set_shieldmode(char * const argv[], int argc) |  | ||||||
| { |  | ||||||
| 	if (argc < 2) { |  | ||||||
| 		debug("Too few arguments for comio\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* -1 will make configure_shieldmode to faile and is okay therefore */ |  | ||||||
| 	return configure_shieldmode(get_mode_from_args(argv, argc)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* TODO: Static ? */ |  | ||||||
| struct shield_t comio_shield = { |  | ||||||
| 	"comio", set_shieldmode |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| void comio_shield_init(void) |  | ||||||
| { |  | ||||||
| 	shield_register(&comio_shield); |  | ||||||
| } |  | ||||||
|  | @ -1,6 +0,0 @@ | ||||||
| #ifndef SHIELD_COMIO_H |  | ||||||
| #define SHIELD_COMIO_H |  | ||||||
| 
 |  | ||||||
| void comio_shield_init(void); |  | ||||||
| 
 |  | ||||||
| #endif // SHIELD_COMIO_H
 |  | ||||||
|  | @ -1,158 +0,0 @@ | ||||||
| /* |  | ||||||
|  * Copyright (c) 2004-2008 Texas Instruments |  | ||||||
|  * |  | ||||||
|  * (C) Copyright 2002 |  | ||||||
|  * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> |  | ||||||
|  * |  | ||||||
|  * See file CREDITS for list of people who contributed to this |  | ||||||
|  * project. |  | ||||||
|  * |  | ||||||
|  * This program is free software; you can redistribute it and/or |  | ||||||
|  * modify it under the terms of the GNU General Public License as |  | ||||||
|  * published by the Free Software Foundation; either version 2 of |  | ||||||
|  * the License, or (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program; if not, write to the Free Software |  | ||||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |  | ||||||
|  * MA 02111-1307 USA |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") |  | ||||||
| OUTPUT_ARCH(arm) |  | ||||||
| ENTRY(_start) |  | ||||||
| SECTIONS |  | ||||||
| { |  | ||||||
| 	. = 0x00000000; |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 	.text : |  | ||||||
| 	{ |  | ||||||
| 		*(.__image_copy_start) |  | ||||||
| 		*(.vectors) |  | ||||||
| 		CPUDIR/start.o (.text*) |  | ||||||
|                 board/nm/nrhw24/built-in.o (.text*) |  | ||||||
| 		*(.text*) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 	.data : { |  | ||||||
| 		*(.data*) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 
 |  | ||||||
| 	. = .; |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 	.u_boot_list : { |  | ||||||
| 		KEEP(*(SORT(.u_boot_list*))); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 
 |  | ||||||
| 	.__efi_runtime_start : { |  | ||||||
| 		*(.__efi_runtime_start) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.efi_runtime : { |  | ||||||
| 		*(efi_runtime_text) |  | ||||||
| 		*(efi_runtime_data) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.__efi_runtime_stop : { |  | ||||||
| 		*(.__efi_runtime_stop) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.efi_runtime_rel_start : |  | ||||||
| 	{ |  | ||||||
| 		*(.__efi_runtime_rel_start) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.efi_runtime_rel : { |  | ||||||
| 		*(.relefi_runtime_text) |  | ||||||
| 		*(.relefi_runtime_data) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.efi_runtime_rel_stop : |  | ||||||
| 	{ |  | ||||||
| 		*(.__efi_runtime_rel_stop) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	. = ALIGN(4); |  | ||||||
| 
 |  | ||||||
| 	.image_copy_end : |  | ||||||
| 	{ |  | ||||||
| 		*(.__image_copy_end) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.rel_dyn_start : |  | ||||||
| 	{ |  | ||||||
| 		*(.__rel_dyn_start) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.rel.dyn : { |  | ||||||
| 		*(.rel*) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.rel_dyn_end : |  | ||||||
| 	{ |  | ||||||
| 		*(.__rel_dyn_end) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.hash : { *(.hash*) } |  | ||||||
| 
 |  | ||||||
| 	.end : |  | ||||||
| 	{ |  | ||||||
| 		*(.__end) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	_image_binary_end = .; |  | ||||||
| 
 |  | ||||||
| 	/* |  | ||||||
| 	 * Deprecated: this MMU section is used by pxa at present but |  | ||||||
| 	 * should not be used by new boards/CPUs. |  | ||||||
| 	 */ |  | ||||||
| 	. = ALIGN(4096); |  | ||||||
| 	.mmutable : { |  | ||||||
| 		*(.mmutable) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c |  | ||||||
|  * __bss_base and __bss_limit are for linker only (overlay ordering) |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { |  | ||||||
| 		KEEP(*(.__bss_start)); |  | ||||||
| 		__bss_base = .; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.bss __bss_base (OVERLAY) : { |  | ||||||
| 		*(.bss*) |  | ||||||
| 		 . = ALIGN(4); |  | ||||||
| 		 __bss_limit = .; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.bss_end __bss_limit (OVERLAY) : { |  | ||||||
| 		KEEP(*(.__bss_end)); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.dynsym _image_binary_end : { *(.dynsym) } |  | ||||||
| 	.dynbss : { *(.dynbss) } |  | ||||||
| 	.dynstr : { *(.dynstr*) } |  | ||||||
| 	.dynamic : { *(.dynamic*) } |  | ||||||
| 	.gnu.hash : { *(.gnu.hash) } |  | ||||||
| 	.plt : { *(.plt*) } |  | ||||||
| 	.interp : { *(.interp*) } |  | ||||||
| 	.gnu : { *(.gnu*) } |  | ||||||
| 	.ARM.exidx : { *(.ARM.exidx*) } |  | ||||||
| } |  | ||||||
|  | @ -620,7 +620,7 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label) | ||||||
| 	char initrd_str[22]; | 	char initrd_str[22]; | ||||||
| 	char mac_str[29] = ""; | 	char mac_str[29] = ""; | ||||||
| 	char ip_str[68] = ""; | 	char ip_str[68] = ""; | ||||||
| 	int bootm_argc = 2; | 	int bootm_argc = 3; | ||||||
| 	int len = 0; | 	int len = 0; | ||||||
| 	ulong kernel_addr; | 	ulong kernel_addr; | ||||||
| 	void *buf; | 	void *buf; | ||||||
|  | @ -652,6 +652,8 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label) | ||||||
| 		strcpy(bootm_argv[2], getenv("ramdisk_addr_r")); | 		strcpy(bootm_argv[2], getenv("ramdisk_addr_r")); | ||||||
| 		strcat(bootm_argv[2], ":"); | 		strcat(bootm_argv[2], ":"); | ||||||
| 		strcat(bootm_argv[2], getenv("filesize")); | 		strcat(bootm_argv[2], getenv("filesize")); | ||||||
|  | 	} else { | ||||||
|  | 		bootm_argv[2] = "-"; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (get_relfile_envaddr(cmdtp, label->kernel, "kernel_addr_r") < 0) { | 	if (get_relfile_envaddr(cmdtp, label->kernel, "kernel_addr_r") < 0) { | ||||||
|  | @ -783,11 +785,8 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label) | ||||||
| 	if (!bootm_argv[3]) | 	if (!bootm_argv[3]) | ||||||
| 		bootm_argv[3] = getenv("fdt_addr"); | 		bootm_argv[3] = getenv("fdt_addr"); | ||||||
| 
 | 
 | ||||||
| 	if (bootm_argv[3]) { | 	if (bootm_argv[3]) | ||||||
| 		if (!bootm_argv[2]) |  | ||||||
| 			bootm_argv[2] = "-"; |  | ||||||
| 		bootm_argc = 4; | 		bootm_argc = 4; | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	kernel_addr = genimg_get_kernel_addr(bootm_argv[1]); | 	kernel_addr = genimg_get_kernel_addr(bootm_argv[1]); | ||||||
| 	buf = map_sysmem(kernel_addr, 0); | 	buf = map_sysmem(kernel_addr, 0); | ||||||
|  |  | ||||||
|  | @ -888,10 +888,8 @@ static init_fnc_t init_sequence_f[] = { | ||||||
| 	init_timebase, | 	init_timebase, | ||||||
| #endif | #endif | ||||||
| 	init_baud_rate,		/* initialze baudrate settings */ | 	init_baud_rate,		/* initialze baudrate settings */ | ||||||
| #if !defined(CONFIG_PRE_CONSOLE_BUFFER) |  | ||||||
| 	serial_init,		/* serial communications setup */ | 	serial_init,		/* serial communications setup */ | ||||||
| 	console_init_f,		/* stage 1 init of console */ | 	console_init_f,		/* stage 1 init of console */ | ||||||
| #endif |  | ||||||
| #ifdef CONFIG_SANDBOX | #ifdef CONFIG_SANDBOX | ||||||
| 	sandbox_early_getopt_check, | 	sandbox_early_getopt_check, | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -414,7 +414,7 @@ int tstc(void) | ||||||
| #define PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL	1 | #define PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL	1 | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_PRE_CONSOLE_BUFFER | #ifdef CONFIG_PRE_CONSOLE_BUFFER | ||||||
| #define CIRC_BUF_IDX(idx) ((idx) % (unsigned long)(CONFIG_PRE_CON_BUF_SZ)) | #define CIRC_BUF_IDX(idx) ((idx) % (unsigned long)CONFIG_PRE_CON_BUF_SZ) | ||||||
| 
 | 
 | ||||||
| static void pre_console_putc(const char c) | static void pre_console_putc(const char c) | ||||||
| { | { | ||||||
|  |  | ||||||
							
								
								
									
										129
									
								
								common/main.c
								
								
								
								
							
							
						
						
									
										129
									
								
								common/main.c
								
								
								
								
							|  | @ -13,22 +13,6 @@ | ||||||
| #include <console.h> | #include <console.h> | ||||||
| #include <version.h> | #include <version.h> | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_NM_LOGIN |  | ||||||
| #include <fs.h> |  | ||||||
| #include <u-boot/md5.h> |  | ||||||
| #include <malloc.h> |  | ||||||
| #include <crypt.h> |  | ||||||
| 
 |  | ||||||
| /* Set defaults for passwd file location */ |  | ||||||
| #ifndef CONFIG_NM_LOGIN_PART |  | ||||||
| #define CONFIG_NM_LOGIN_PART	"1:3" |  | ||||||
| #endif |  | ||||||
| #ifndef CONFIG_NM_LOGIN_PASSWD |  | ||||||
| #define CONFIG_NM_LOGIN_PASSWD	"/root/boot/bootpass" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -36,112 +20,6 @@ DECLARE_GLOBAL_DATA_PTR; | ||||||
|  */ |  */ | ||||||
| __weak void show_boot_progress(int val) {} | __weak void show_boot_progress(int val) {} | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_NM_LOGIN |  | ||||||
| /****************************************************************************
 |  | ||||||
|  *  check if ubootpwd exists in data partition and perform a login, |  | ||||||
|  *  otherwise continue booting |  | ||||||
|  */ |  | ||||||
| int login (void) |  | ||||||
| { |  | ||||||
| 	#define MAX_TRIES_ENTER 4096 |  | ||||||
| 	#define PASSWORD_LEN 256 |  | ||||||
| 
 |  | ||||||
| 	char stored_pw_hash[PASSWORD_LEN]; |  | ||||||
| 	char password[PASSWORD_LEN]; |  | ||||||
| 	int res, i, tries; |  | ||||||
| 	int legacy_md5 = 0; |  | ||||||
| 	loff_t actread; |  | ||||||
| 	char c; |  | ||||||
| 
 |  | ||||||
| 	puts("\nautoboot has been stopped, press 'e' to enter: "); |  | ||||||
| 
 |  | ||||||
| 	for (i=0; i<=MAX_TRIES_ENTER; i++) { |  | ||||||
| 		c = getc(); |  | ||||||
| 		if (c == 'e' || c == '\n') { |  | ||||||
| 			puts("e"); |  | ||||||
| 			break; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		/* Enter condition not given -> restart */ |  | ||||||
| 		if (i == MAX_TRIES_ENTER)  |  | ||||||
| 			return 0; |  | ||||||
| 	} |  | ||||||
| 	puts("\n"); |  | ||||||
| 
 |  | ||||||
| 	/* Try to get password hash file */ |  | ||||||
| 	memset(stored_pw_hash, 0x0, sizeof(stored_pw_hash)); |  | ||||||
| 	if (fs_set_blk_dev("mmc", CONFIG_NM_LOGIN_PART, FS_TYPE_EXT) != 0) { |  | ||||||
| 		puts("Error, can not set blk device\n"); |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	res = fs_read(CONFIG_NM_LOGIN_PASSWD, (ulong)stored_pw_hash, 0, sizeof(stored_pw_hash), &actread); |  | ||||||
| 	if ((res != 0) || (actread <= 0)) { |  | ||||||
| 		/* no file or hash found -> allow login w/o password */ |  | ||||||
| 		puts("Login succeeded\n\n"); |  | ||||||
| 		return 1; |  | ||||||
| 	} else if (actread == 16) { |  | ||||||
| 		legacy_md5 = 1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for (tries = 1; ; tries++) { |  | ||||||
| 		puts("\nEnter password: "); |  | ||||||
| 
 |  | ||||||
| 		/* TODO: no backspace ? */ |  | ||||||
| 		/* TODO: rename buf to something more useful */ |  | ||||||
| 		/* TODO: print a dot or blind? */ |  | ||||||
| 		password[0] = 0; |  | ||||||
| 		for (i=0; i<PASSWORD_LEN; i++) { |  | ||||||
| 			password[i] = getc(); |  | ||||||
| 			if (password[i] == '\r' || password[i] == '\n') { |  | ||||||
| 				password[i] = 0; |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		password[PASSWORD_LEN-1] = 0; |  | ||||||
| 
 |  | ||||||
| 		if (strlen(password) > 0) { |  | ||||||
| 			puts("\n"); |  | ||||||
| 			if (legacy_md5) { |  | ||||||
| 				/* MD5 - legacy */ |  | ||||||
| 				char entered[32];	/* TODO: Why 32, MD5 algo uses only 16 bytes */ |  | ||||||
| 
 |  | ||||||
| 				md5((unsigned char *)password, strlen(password), (unsigned char *)entered); |  | ||||||
| 				if (memcmp(stored_pw_hash, entered, 16) == 0) { |  | ||||||
| 					break; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			else { |  | ||||||
| 				/* SHA256 */ |  | ||||||
| 				char *cp = sha_crypt(password, stored_pw_hash);	/* TODO: Salt = PW? */ |  | ||||||
| 				res = memcmp(cp, stored_pw_hash, actread); |  | ||||||
| 				free(cp); |  | ||||||
| 				if (res == 0) |  | ||||||
| 					break; |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			/* TODO: exponentional delay */ |  | ||||||
| 			puts("Login incorrect\n"); |  | ||||||
| 			if (tries == 3) { |  | ||||||
| 				return 0; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		/* TODO: remove password from memory !!!!! */ |  | ||||||
| 		memset(password, 0, sizeof(password)); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* succeeded */ |  | ||||||
| 	puts("Login succeeded\n\n"); |  | ||||||
| 
 |  | ||||||
| 	return 1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #endif /* CONIFG_NM_LOGIN */ |  | ||||||
| 
 |  | ||||||
| /****************************************************************************/ |  | ||||||
| 
 |  | ||||||
| static void run_preboot_environment_command(void) | static void run_preboot_environment_command(void) | ||||||
| { | { | ||||||
| #ifdef CONFIG_PREBOOT | #ifdef CONFIG_PREBOOT | ||||||
|  | @ -187,13 +65,6 @@ void main_loop(void) | ||||||
| 
 | 
 | ||||||
| 	autoboot_command(s); | 	autoboot_command(s); | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_NM_LOGIN |  | ||||||
| 	if (!login()) { |  | ||||||
| 		puts ("Login failed, resetting...\n"); |  | ||||||
| 		do_reset (NULL, 0, 0, NULL); |  | ||||||
| 	} |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	cli_loop(); | 	cli_loop(); | ||||||
| 	panic("No CLI available"); | 	panic("No CLI available"); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -19,10 +19,6 @@ | ||||||
| #include <dm/root.h> | #include <dm/root.h> | ||||||
| #include <linux/compiler.h> | #include <linux/compiler.h> | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_NRSW_BUILD |  | ||||||
| #include <spl_version_autogenerated.h> |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| #ifndef CONFIG_SYS_UBOOT_START | #ifndef CONFIG_SYS_UBOOT_START | ||||||
|  | @ -457,12 +453,7 @@ void preloader_console_init(void) | ||||||
| 
 | 
 | ||||||
| 	gd->have_console = 1; | 	gd->have_console = 1; | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_NRSW_BUILD | 	puts("\nU-Boot SPL " PLAIN_VERSION " (" U_BOOT_DATE " - " \ | ||||||
| 	puts("\n" SPL_VERSION "\n"); |  | ||||||
| #else |  | ||||||
| 	puts("\n"); |  | ||||||
| #endif |  | ||||||
| 	puts("U-Boot SPL " PLAIN_VERSION " (" U_BOOT_DATE " - " \ |  | ||||||
| 			U_BOOT_TIME ")\n"); | 			U_BOOT_TIME ")\n"); | ||||||
| #ifdef CONFIG_SPL_DISPLAY_PRINT | #ifdef CONFIG_SPL_DISPLAY_PRINT | ||||||
| 	spl_display_print(); | 	spl_display_print(); | ||||||
|  |  | ||||||
|  | @ -15,166 +15,20 @@ | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <mmc.h> | #include <mmc.h> | ||||||
| #include <image.h> | #include <image.h> | ||||||
| #include <crc.h> |  | ||||||
| 
 | 
 | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| #define UBOOT_MIN_SIZE_BYTES	(128*1024) |  | ||||||
| #define UBOOT_MAX_SIZE_BYTES	(2500*1024) |  | ||||||
| 
 |  | ||||||
| #if defined(CONFIG_NM_BOOTLOADER_FORMAT) |  | ||||||
| 
 |  | ||||||
| static int image_nm_header_ok(const struct nm_header *header) |  | ||||||
| { |  | ||||||
| 	u32 start_tag = __be32_to_cpu(header->nm_start_tag); |  | ||||||
| 	u32 length = __be32_to_cpu(header->nm_length); |  | ||||||
| 
 |  | ||||||
| 	if ((start_tag == 0x424c5354) && |  | ||||||
| 	    (length >= UBOOT_MIN_SIZE_BYTES) && (length <= UBOOT_MAX_SIZE_BYTES)) |  | ||||||
| 	{ |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 	else { |  | ||||||
| 		return -EFAULT; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int mmc_load_netmodule(struct mmc *mmc, ulong sector, |  | ||||||
| 			      const struct nm_header *header) |  | ||||||
| { |  | ||||||
| 	u32 nm_header_size = sizeof(struct nm_header) -sizeof(struct image_header); |  | ||||||
| 	const struct image_header *im_header; |  | ||||||
| 	const __be32* end_tag_position; |  | ||||||
| 	u32 image_size_sectors; |  | ||||||
| 	unsigned long count;  |  | ||||||
| 	u32 end_tag; |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	im_header = &(header->header); |  | ||||||
| 
 |  | ||||||
| 	/* decode header and fill out spl_image structure */ |  | ||||||
| 	ret = spl_parse_image_header(im_header); |  | ||||||
| 	if (ret) { |  | ||||||
| 		return ret; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/*
 |  | ||||||
| 	 * convert size to sectors - round up, |  | ||||||
| 	 * add 256 bytes for NetModule header, 4 bytes for NetModule trailer  |  | ||||||
| 	 */ |  | ||||||
| 	image_size_sectors = (spl_image.size + nm_header_size + sizeof(u32) +  |  | ||||||
| 			     mmc->read_bl_len - 1) / |  | ||||||
| 			     mmc->read_bl_len; |  | ||||||
| 
 |  | ||||||
| 	/*
 |  | ||||||
| 	 * Read the header too to avoid extra memcpy, |  | ||||||
| 	 * compensate the load address for the NetModule header  |  | ||||||
| 	 */ |  | ||||||
| 	count = blk_dread(mmc_get_blk_desc(mmc), sector, image_size_sectors, |  | ||||||
| 			  (void *)(ulong)spl_image.load_addr - nm_header_size); |  | ||||||
| 	debug("read %x sectors to %x\n", image_size_sectors, |  | ||||||
| 	      spl_image.load_addr); |  | ||||||
| 
 |  | ||||||
| 	if (count != image_size_sectors) { |  | ||||||
| 		puts(", read error"); |  | ||||||
| 		return -EIO; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* Check NetModule end tag to be sure image is completely written */ |  | ||||||
| 	end_tag_position =  (const __be32*)(spl_image.load_addr + spl_image.size); |  | ||||||
| 	end_tag = __be32_to_cpu(*end_tag_position); |  | ||||||
| 	if (end_tag != 0x424c454e) { |  | ||||||
| 		puts(", end marker fail"); |  | ||||||
| 		return -EFAULT; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	puts(", end marker ok"); |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int mmc_load_image_raw_sector_netmodule(struct mmc *mmc, unsigned long sector) |  | ||||||
| { |  | ||||||
| 	unsigned long count; |  | ||||||
| 	struct nm_header *header; |  | ||||||
| 	int ret = 0; |  | ||||||
| 
 |  | ||||||
| 	printf("Checking NM U-Boot at sector 0x%lx: ", sector); |  | ||||||
| 
 |  | ||||||
| 	header = (struct nm_header *)(CONFIG_SYS_TEXT_BASE - |  | ||||||
| 					 sizeof(struct nm_header)); |  | ||||||
| 
 |  | ||||||
| 	/* read image header to find the image size and load address */ |  | ||||||
| 	count = blk_dread(mmc_get_blk_desc(mmc), sector, 1, header); |  | ||||||
| 	debug("hdr read sector %lx, count=%lu\n", sector, count); |  | ||||||
| 	if (count == 0) { |  | ||||||
| 		ret = -EIO; |  | ||||||
| 		goto end; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (image_nm_header_ok(header)) { |  | ||||||
| 		puts("hdr fail"); |  | ||||||
| 		ret = -EFAULT; |  | ||||||
| 		goto end; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	puts("hdr ok"); |  | ||||||
| 
 |  | ||||||
| 	ret = mmc_load_netmodule(mmc, sector, header); |  | ||||||
| 
 |  | ||||||
| end: |  | ||||||
| 	if (ret) { |  | ||||||
| 		puts(" -> skipping\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	puts("\n"); |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #endif /* CONFIG_NM_BOOTLOADER_FORMAT) */ |  | ||||||
| 
 |  | ||||||
| static int mmc_load_legacy(struct mmc *mmc, ulong sector, | static int mmc_load_legacy(struct mmc *mmc, ulong sector, | ||||||
| 			   struct image_header *header) | 			   struct image_header *header) | ||||||
| { | { | ||||||
| 	u32 header_size = sizeof(struct image_header); |  | ||||||
| 	u32 image_size_sectors; | 	u32 image_size_sectors; | ||||||
| 	u32 image_size_bytes; |  | ||||||
| 	u32 data_crc; |  | ||||||
| 	u32 data_crc_memory; |  | ||||||
| 	unsigned long count; | 	unsigned long count; | ||||||
| 	int ret; | 	int ret; | ||||||
| 
 | 
 | ||||||
| 	/*
 |  | ||||||
| 	 * Note: spl_parse_image_header() always returns 0  |  | ||||||
| 	 * Own header check required here. |  | ||||||
| 	 */ |  | ||||||
| 	if (image_get_magic(header) != IH_MAGIC) { |  | ||||||
| 		puts("hdr fail"); |  | ||||||
| 		return -EFAULT; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	ret = spl_parse_image_header(header); | 	ret = spl_parse_image_header(header); | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		return ret; | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	puts("hdr ok"); |  | ||||||
| 
 |  | ||||||
| 	/* TODO: This assumes a header is present (e.g. no PPC images) */ |  | ||||||
| 	/* Could also check spl_image.flags & SPL_COPY_PAYLOAD_ONLY above */ |  | ||||||
| 
 |  | ||||||
| 	image_size_bytes = __be32_to_cpu(header->ih_size); |  | ||||||
| 	data_crc = __be32_to_cpu(header->ih_dcrc); |  | ||||||
| 
 |  | ||||||
| 	if ((image_size_bytes < UBOOT_MIN_SIZE_BYTES) || (image_size_bytes > UBOOT_MAX_SIZE_BYTES)) { |  | ||||||
| 		puts(", data len fail"); |  | ||||||
| 		return -EFAULT; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	puts(", data len ok"); |  | ||||||
| 
 |  | ||||||
| 	/* convert size to sectors - round up */ | 	/* convert size to sectors - round up */ | ||||||
| 	image_size_sectors = (spl_image.size + mmc->read_bl_len - 1) / | 	image_size_sectors = (spl_image.size + mmc->read_bl_len - 1) / | ||||||
| 			     mmc->read_bl_len; | 			     mmc->read_bl_len; | ||||||
|  | @ -182,22 +36,10 @@ static int mmc_load_legacy(struct mmc *mmc, ulong sector, | ||||||
| 	/* Read the header too to avoid extra memcpy */ | 	/* Read the header too to avoid extra memcpy */ | ||||||
| 	count = blk_dread(mmc_get_blk_desc(mmc), sector, image_size_sectors, | 	count = blk_dread(mmc_get_blk_desc(mmc), sector, image_size_sectors, | ||||||
| 			  (void *)(ulong)spl_image.load_addr); | 			  (void *)(ulong)spl_image.load_addr); | ||||||
| 
 |  | ||||||
| 	debug("read %x sectors to %x\n", image_size_sectors, | 	debug("read %x sectors to %x\n", image_size_sectors, | ||||||
| 	      spl_image.load_addr); | 	      spl_image.load_addr); | ||||||
| 	if (count != image_size_sectors) { | 	if (count != image_size_sectors) | ||||||
| 		puts(", read error"); |  | ||||||
| 		return -EIO; | 		return -EIO; | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* Check data CRC */ |  | ||||||
| 	data_crc_memory = crc32(0, (const u8*)(spl_image.load_addr + header_size), image_size_bytes); |  | ||||||
| 	if (data_crc_memory != data_crc) { |  | ||||||
| 		puts(", data crc fail"); |  | ||||||
| 		return -EFAULT; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	puts(", data crc ok"); |  | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | @ -216,8 +58,6 @@ static int mmc_load_image_raw_sector(struct mmc *mmc, unsigned long sector) | ||||||
| 	struct image_header *header; | 	struct image_header *header; | ||||||
| 	int ret = 0; | 	int ret = 0; | ||||||
| 
 | 
 | ||||||
| 	printf("Checking U-Boot at sector 0x%lx: ", sector); |  | ||||||
| 
 |  | ||||||
| 	header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - | 	header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - | ||||||
| 					 sizeof(struct image_header)); | 					 sizeof(struct image_header)); | ||||||
| 
 | 
 | ||||||
|  | @ -225,11 +65,6 @@ static int mmc_load_image_raw_sector(struct mmc *mmc, unsigned long sector) | ||||||
| 	count = blk_dread(mmc_get_blk_desc(mmc), sector, 1, header); | 	count = blk_dread(mmc_get_blk_desc(mmc), sector, 1, header); | ||||||
| 	debug("hdr read sector %lx, count=%lu\n", sector, count); | 	debug("hdr read sector %lx, count=%lu\n", sector, count); | ||||||
| 	if (count == 0) { | 	if (count == 0) { | ||||||
| /*
 |  | ||||||
| #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT |  | ||||||
| 		puts("mmc_load_image_raw_sector: mmc block read error\n"); |  | ||||||
| #endif |  | ||||||
| */ |  | ||||||
| 		ret = -EIO; | 		ret = -EIO; | ||||||
| 		goto end; | 		goto end; | ||||||
| 	} | 	} | ||||||
|  | @ -251,12 +86,12 @@ static int mmc_load_image_raw_sector(struct mmc *mmc, unsigned long sector) | ||||||
| 
 | 
 | ||||||
| end: | end: | ||||||
| 	if (ret) { | 	if (ret) { | ||||||
| 		puts(" -> skipping\n"); | #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT | ||||||
|  | 		puts("mmc_load_image_raw_sector: mmc block read error\n"); | ||||||
|  | #endif | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	puts("\n"); |  | ||||||
| 
 |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -486,36 +321,11 @@ int spl_mmc_load_image(u32 boot_device) | ||||||
| 			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION); | 			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION); | ||||||
| 		if (!err) | 		if (!err) | ||||||
| 			return err; | 			return err; | ||||||
| 
 |  | ||||||
| #if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR) | #if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR) | ||||||
| 
 |  | ||||||
| #if defined(CONFIG_NM_BOOTLOADER_FORMAT) |  | ||||||
| 		/* Try to load NetModule packed bootloader from main location */ |  | ||||||
| 		err = mmc_load_image_raw_sector_netmodule(mmc, |  | ||||||
| 			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR); |  | ||||||
| 		if (!err) |  | ||||||
| 			return err;	/* found -> ok */ |  | ||||||
| #endif |  | ||||||
| 		/* Try to load bootloader from main location */ |  | ||||||
| 		err = mmc_load_image_raw_sector(mmc, | 		err = mmc_load_image_raw_sector(mmc, | ||||||
| 			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR); | 			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR); | ||||||
| 		if (!err) | 		if (!err) | ||||||
| 			return err;	/* found -> ok */ | 			return err; | ||||||
| 
 |  | ||||||
| #if defined(CONFIG_NM_BOOTLOADER_FORMAT) |  | ||||||
| 		/* Try to load NetModule packed bootloader from alternate location */ |  | ||||||
| 		err = mmc_load_image_raw_sector_netmodule(mmc, |  | ||||||
| 			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR_ALTERNATE); |  | ||||||
| 		if (!err) |  | ||||||
| 			return err;	/* found -> ok */ |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 		/* Try to load regular bootloader from alternate location */ |  | ||||||
| 		err = mmc_load_image_raw_sector(mmc, |  | ||||||
| 			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR_ALTERNATE); |  | ||||||
| 		if (!err) { |  | ||||||
| 			return err;	/* found -> ok */ |  | ||||||
| 		} |  | ||||||
| #endif | #endif | ||||||
| 		/* If RAW mode fails, try FS mode. */ | 		/* If RAW mode fails, try FS mode. */ | ||||||
| 	case MMCSD_MODE_FS: | 	case MMCSD_MODE_FS: | ||||||
|  |  | ||||||
|  | @ -1,49 +0,0 @@ | ||||||
| CONFIG_ARM=y |  | ||||||
| CONFIG_TARGET_AM335X_HW25=y |  | ||||||
| CONFIG_SPL_STACK_R_ADDR=0x82000000 |  | ||||||
| CONFIG_SPL=y |  | ||||||
| CONFIG_SPL_STACK_R=y |  | ||||||
| CONFIG_FIT=y |  | ||||||
| CONFIG_SYS_EXTRA_OPTIONS="EMMC_BOOT" |  | ||||||
| CONFIG_HUSH_PARSER=y |  | ||||||
| CONFIG_AUTOBOOT_KEYED=y |  | ||||||
| CONFIG_AUTOBOOT_PROMPT="Press s to abort autoboot in %d seconds\n" |  | ||||||
| CONFIG_AUTOBOOT_STOP_STR="s" |  | ||||||
| CONFIG_CMD_BOOTZ=y |  | ||||||
| # CONFIG_CMD_IMLS is not set |  | ||||||
| CONFIG_CMD_ASKENV=y |  | ||||||
| # CONFIG_CMD_FLASH is not set |  | ||||||
| CONFIG_CMD_MMC=y |  | ||||||
| CONFIG_CMD_I2C=y |  | ||||||
| CONFIG_CMD_USB=y |  | ||||||
| # CONFIG_CMD_SETEXPR is not set |  | ||||||
| CONFIG_CMD_DHCP=y |  | ||||||
| CONFIG_CMD_MII=y |  | ||||||
| CONFIG_CMD_PING=y |  | ||||||
| CONFIG_CMD_EXT2=y |  | ||||||
| CONFIG_CMD_EXT4=y |  | ||||||
| CONFIG_CMD_EXT4_WRITE=y |  | ||||||
| CONFIG_CMD_FAT=y |  | ||||||
| CONFIG_CMD_FS_GENERIC=y |  | ||||||
| CONFIG_DFU_TFTP=y |  | ||||||
| CONFIG_SYS_NS16550=y |  | ||||||
| CONFIG_USB=y |  | ||||||
| CONFIG_USB_MUSB_HOST=y |  | ||||||
| CONFIG_USB_MUSB_GADGET=y |  | ||||||
| CONFIG_USB_GADGET=y |  | ||||||
| CONFIG_USB_GADGET_DOWNLOAD=y |  | ||||||
| CONFIG_G_DNL_MANUFACTURER="Texas Instruments" |  | ||||||
| CONFIG_G_DNL_VENDOR_NUM=0x0451 |  | ||||||
| CONFIG_G_DNL_PRODUCT_NUM=0xd022 |  | ||||||
| CONFIG_OF_LIBFDT=y |  | ||||||
| # CONFIG_BOOTP_PXE_CLIENTARCH is not set |  | ||||||
| # CONFIG_CMD_PXE is not set |  | ||||||
| # CONFIG_CMD_BOOTEFI is not set |  | ||||||
| # CONFIG_CMD_XIMG is not set |  | ||||||
| # CONFIG_CMD_ELF is not set |  | ||||||
| # CONFIG_FPGA is not set |  | ||||||
| # CONFIG_CMD_FPGA is not set |  | ||||||
| # CONFIG_CMD_PMIC is not set |  | ||||||
| # CONFIG_EFI_LOADER is not set |  | ||||||
| # CONFIG_CMD_LOADB is not set |  | ||||||
| # CONFIG_CMD_LOADS is not set |  | ||||||
|  | @ -1,49 +0,0 @@ | ||||||
| CONFIG_ARM=y |  | ||||||
| CONFIG_TARGET_AM335X_NRHW24=y |  | ||||||
| CONFIG_SPL_STACK_R_ADDR=0x82000000 |  | ||||||
| CONFIG_SPL=y |  | ||||||
| CONFIG_SPL_STACK_R=y |  | ||||||
| CONFIG_FIT=y |  | ||||||
| CONFIG_SYS_EXTRA_OPTIONS="EMMC_BOOT" |  | ||||||
| CONFIG_HUSH_PARSER=y |  | ||||||
| CONFIG_AUTOBOOT_KEYED=y |  | ||||||
| CONFIG_AUTOBOOT_PROMPT="Press s to abort autoboot in %d seconds\n" |  | ||||||
| CONFIG_AUTOBOOT_STOP_STR="s" |  | ||||||
| CONFIG_CMD_BOOTZ=y |  | ||||||
| # CONFIG_CMD_IMLS is not set |  | ||||||
| CONFIG_CMD_ASKENV=y |  | ||||||
| # CONFIG_CMD_FLASH is not set |  | ||||||
| CONFIG_CMD_MMC=y |  | ||||||
| CONFIG_CMD_I2C=y |  | ||||||
| CONFIG_CMD_USB=y |  | ||||||
| # CONFIG_CMD_SETEXPR is not set |  | ||||||
| CONFIG_CMD_DHCP=y |  | ||||||
| CONFIG_CMD_MII=y |  | ||||||
| CONFIG_CMD_PING=y |  | ||||||
| CONFIG_CMD_EXT2=y |  | ||||||
| CONFIG_CMD_EXT4=y |  | ||||||
| CONFIG_CMD_EXT4_WRITE=y |  | ||||||
| CONFIG_CMD_FAT=y |  | ||||||
| CONFIG_CMD_FS_GENERIC=y |  | ||||||
| CONFIG_DFU_TFTP=y |  | ||||||
| CONFIG_SYS_NS16550=y |  | ||||||
| CONFIG_USB=y |  | ||||||
| CONFIG_USB_MUSB_HOST=y |  | ||||||
| CONFIG_USB_MUSB_GADGET=y |  | ||||||
| CONFIG_USB_GADGET=y |  | ||||||
| CONFIG_USB_GADGET_DOWNLOAD=y |  | ||||||
| CONFIG_G_DNL_MANUFACTURER="Texas Instruments" |  | ||||||
| CONFIG_G_DNL_VENDOR_NUM=0x0451 |  | ||||||
| CONFIG_G_DNL_PRODUCT_NUM=0xd022 |  | ||||||
| CONFIG_OF_LIBFDT=y |  | ||||||
| # CONFIG_BOOTP_PXE_CLIENTARCH is not set |  | ||||||
| # CONFIG_CMD_PXE is not set |  | ||||||
| # CONFIG_CMD_BOOTEFI is not set |  | ||||||
| # CONFIG_CMD_XIMG is not set |  | ||||||
| # CONFIG_CMD_ELF is not set |  | ||||||
| # CONFIG_FPGA is not set |  | ||||||
| # CONFIG_CMD_FPGA is not set |  | ||||||
| # CONFIG_CMD_PMIC is not set |  | ||||||
| # CONFIG_EFI_LOADER is not set |  | ||||||
| # CONFIG_CMD_LOADB is not set |  | ||||||
| # CONFIG_CMD_LOADS is not set |  | ||||||
|  | @ -420,10 +420,8 @@ static int omap24_i2c_read(struct i2c_adapter *adap, uchar chip, uint addr, | ||||||
| 			} | 			} | ||||||
| 			if (status == 0 || (status & I2C_STAT_NACK)) { | 			if (status == 0 || (status & I2C_STAT_NACK)) { | ||||||
| 				i2c_error = 1; | 				i2c_error = 1; | ||||||
| #ifdef CONFIG_NRSW_BUILD | 				/*printf("i2c_read: error waiting for addr ACK (status=0x%x)\n",
 | ||||||
| 				printf("i2c_read: error waiting for addr ACK (status=0x%x)\n", | 				       status);*/ | ||||||
| 				       status); |  | ||||||
| #endif |  | ||||||
| 				goto rd_exit; | 				goto rd_exit; | ||||||
| 			} | 			} | ||||||
| 			if (alen) { | 			if (alen) { | ||||||
|  | @ -738,7 +736,7 @@ U_BOOT_I2C_ADAP_COMPLETE(omap24_1, omap24_i2c_init, omap24_i2c_probe, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| U_BOOT_I2C_ADAP_COMPLETE(omap24_2, omap24_i2c_init, omap24_i2c_probe, | U_BOOT_I2C_ADAP_COMPLETE(omap24_2, omap24_i2c_init, omap24_i2c_probe, | ||||||
| 			 omap24_i2c_read, omap24_i2c_write, omap24_i2c_setspeed, | 			 omap24_i2c_read, omap24_i2c_write, NULL, | ||||||
| 			 CONFIG_SYS_OMAP24_I2C_SPEED2, | 			 CONFIG_SYS_OMAP24_I2C_SPEED2, | ||||||
| 			 CONFIG_SYS_OMAP24_I2C_SLAVE2, | 			 CONFIG_SYS_OMAP24_I2C_SLAVE2, | ||||||
| 			 2) | 			 2) | ||||||
|  | @ -751,7 +749,7 @@ U_BOOT_I2C_ADAP_COMPLETE(omap24_2, omap24_i2c_init, omap24_i2c_probe, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| U_BOOT_I2C_ADAP_COMPLETE(omap24_3, omap24_i2c_init, omap24_i2c_probe, | U_BOOT_I2C_ADAP_COMPLETE(omap24_3, omap24_i2c_init, omap24_i2c_probe, | ||||||
| 			 omap24_i2c_read, omap24_i2c_write, omap24_i2c_setspeed, | 			 omap24_i2c_read, omap24_i2c_write, NULL, | ||||||
| 			 CONFIG_SYS_OMAP24_I2C_SPEED3, | 			 CONFIG_SYS_OMAP24_I2C_SPEED3, | ||||||
| 			 CONFIG_SYS_OMAP24_I2C_SLAVE3, | 			 CONFIG_SYS_OMAP24_I2C_SLAVE3, | ||||||
| 			 3) | 			 3) | ||||||
|  | @ -764,7 +762,7 @@ U_BOOT_I2C_ADAP_COMPLETE(omap24_3, omap24_i2c_init, omap24_i2c_probe, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| U_BOOT_I2C_ADAP_COMPLETE(omap24_4, omap24_i2c_init, omap24_i2c_probe, | U_BOOT_I2C_ADAP_COMPLETE(omap24_4, omap24_i2c_init, omap24_i2c_probe, | ||||||
| 			 omap24_i2c_read, omap24_i2c_write, omap24_i2c_setspeed, | 			 omap24_i2c_read, omap24_i2c_write, NULL, | ||||||
| 			 CONFIG_SYS_OMAP24_I2C_SPEED4, | 			 CONFIG_SYS_OMAP24_I2C_SPEED4, | ||||||
| 			 CONFIG_SYS_OMAP24_I2C_SLAVE4, | 			 CONFIG_SYS_OMAP24_I2C_SLAVE4, | ||||||
| 			 4) | 			 4) | ||||||
|  |  | ||||||
|  | @ -243,6 +243,7 @@ int genphy_update_link(struct phy_device *phydev) | ||||||
| 
 | 
 | ||||||
| 	if ((phydev->autoneg == AUTONEG_ENABLE) && | 	if ((phydev->autoneg == AUTONEG_ENABLE) && | ||||||
| 	    !(mii_reg & BMSR_ANEGCOMPLETE)) { | 	    !(mii_reg & BMSR_ANEGCOMPLETE)) { | ||||||
|  | 		const int timeout = PHY_ANEG_TIMEOUT; | ||||||
| 		int i = 0; | 		int i = 0; | ||||||
| 
 | 
 | ||||||
| 		printf("%s Waiting for PHY auto negotiation to complete", | 		printf("%s Waiting for PHY auto negotiation to complete", | ||||||
|  | @ -251,7 +252,7 @@ int genphy_update_link(struct phy_device *phydev) | ||||||
| 			/*
 | 			/*
 | ||||||
| 			 * Timeout reached ? | 			 * Timeout reached ? | ||||||
| 			 */ | 			 */ | ||||||
| 			if (i > PHY_ANEG_TIMEOUT) { | 			if (i > timeout) { | ||||||
| 				printf(" TIMEOUT !\n"); | 				printf(" TIMEOUT !\n"); | ||||||
| 				phydev->link = 0; | 				phydev->link = 0; | ||||||
| 				return -ETIMEDOUT; | 				return -ETIMEDOUT; | ||||||
|  |  | ||||||
|  | @ -27,17 +27,6 @@ static const unsigned long baudrate_table[] = CONFIG_SYS_BAUDRATE_TABLE; | ||||||
| #error "Serial is required before relocation - define CONFIG_SYS_MALLOC_F_LEN to make this work" | #error "Serial is required before relocation - define CONFIG_SYS_MALLOC_F_LEN to make this work" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_CONS_INDEX |  | ||||||
| static int console_index = CONFIG_CONS_INDEX - 1; |  | ||||||
| #else |  | ||||||
| static int console_index = 0; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| void serial_set_console_index(int index) |  | ||||||
| { |  | ||||||
| 	console_index = index; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void serial_find_console_or_panic(void) | static void serial_find_console_or_panic(void) | ||||||
| { | { | ||||||
| 	const void *blob = gd->fdt_blob; | 	const void *blob = gd->fdt_blob; | ||||||
|  | @ -95,12 +84,18 @@ static void serial_find_console_or_panic(void) | ||||||
| 		 * extremis just the first serial device we can find. But we | 		 * extremis just the first serial device we can find. But we | ||||||
| 		 * insist on having a console (even if it is silent). | 		 * insist on having a console (even if it is silent). | ||||||
| 		 */ | 		 */ | ||||||
| 		if (!uclass_get_device_by_seq(UCLASS_SERIAL, console_index, &dev) || | #ifdef CONFIG_CONS_INDEX | ||||||
| 		    !uclass_get_device(UCLASS_SERIAL, console_index, &dev) || | #define INDEX (CONFIG_CONS_INDEX - 1) | ||||||
|  | #else | ||||||
|  | #define INDEX 0 | ||||||
|  | #endif | ||||||
|  | 		if (!uclass_get_device_by_seq(UCLASS_SERIAL, INDEX, &dev) || | ||||||
|  | 		    !uclass_get_device(UCLASS_SERIAL, INDEX, &dev) || | ||||||
| 		    (!uclass_first_device(UCLASS_SERIAL, &dev) && dev)) { | 		    (!uclass_first_device(UCLASS_SERIAL, &dev) && dev)) { | ||||||
| 			gd->cur_serial_dev = dev; | 			gd->cur_serial_dev = dev; | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
|  | #undef INDEX | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_REQUIRE_SERIAL_CONSOLE | #ifdef CONFIG_REQUIRE_SERIAL_CONSOLE | ||||||
|  | @ -120,9 +115,7 @@ int serial_init(void) | ||||||
| /* Called after relocation */ | /* Called after relocation */ | ||||||
| void serial_initialize(void) | void serial_initialize(void) | ||||||
| { | { | ||||||
| #if !defined(CONFIG_PRE_CONSOLE_BUFFER) |  | ||||||
| 	serial_init(); | 	serial_init(); | ||||||
| #endif |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void _serial_putc(struct udevice *dev, char ch) | static void _serial_putc(struct udevice *dev, char ch) | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								fs/fs.c
								
								
								
								
							
							
						
						
									
										2
									
								
								fs/fs.c
								
								
								
								
							|  | @ -307,6 +307,8 @@ int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len, | ||||||
| 	unmap_sysmem(buf); | 	unmap_sysmem(buf); | ||||||
| 
 | 
 | ||||||
| 	/* If we requested a specific number of bytes, check we got it */ | 	/* If we requested a specific number of bytes, check we got it */ | ||||||
|  | 	if (ret == 0 && len && *actread != len) | ||||||
|  | 		printf("** %s shorter than offset + len **\n", filename); | ||||||
| 	fs_close(); | 	fs_close(); | ||||||
| 
 | 
 | ||||||
| 	return ret; | 	return ret; | ||||||
|  |  | ||||||
|  | @ -1,320 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * am335x_hw25.h |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2018-2019 NetModule AG - http://www.netmodule.com/
 |  | ||||||
|  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  | ||||||
|  * |  | ||||||
|  * This program is free software; you can redistribute it and/or |  | ||||||
|  * modify it under the terms of the GNU General Public License as |  | ||||||
|  * published by the Free Software Foundation version 2. |  | ||||||
|  * |  | ||||||
|  * This program is distributed "as is" WITHOUT ANY WARRANTY of any |  | ||||||
|  * kind, whether express or implied; without even the implied warranty |  | ||||||
|  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #ifndef __CONFIG_AM335X_HW25_H |  | ||||||
| #define __CONFIG_AM335X_HW25_H |  | ||||||
| 
 |  | ||||||
| #include <configs/ti_am335x_common.h> |  | ||||||
| 
 |  | ||||||
| /* Disable U-Boot load from filesystems, to save around 10 kB SPL image size */ |  | ||||||
| #ifdef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION |  | ||||||
| # undef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC |  | ||||||
| 
 |  | ||||||
| #undef CONFIG_HW_WATCHDOG |  | ||||||
| #undef CONFIG_OMPAP_WATCHDOG |  | ||||||
| #undef CONFIG_SPL_WATCHDOG_SUPPORT |  | ||||||
| 
 |  | ||||||
| #ifndef CONFIG_SPL_BUILD |  | ||||||
| # define CONFIG_TIMESTAMP |  | ||||||
| # define CONFIG_LZO |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_BOOTM_LEN		(16 << 20) |  | ||||||
| 
 |  | ||||||
| #define MACH_TYPE_TIAM335EVM		3589	/* Until the next sync */ |  | ||||||
| #define CONFIG_MACH_TYPE		MACH_TYPE_TIAM335EVM |  | ||||||
| #define CONFIG_BOARD_LATE_INIT |  | ||||||
| 
 |  | ||||||
| /* TODO: It could be preconsole buffer is not properly working in SPL
 |  | ||||||
|  * Observed lock ups when printing too much text. |  | ||||||
| #define CONFIG_PRE_CONSOLE_BUFFER |  | ||||||
| #define CONFIG_PRE_CON_BUF_ADDR   	0x80000000 |  | ||||||
| #define CONFIG_PRE_CON_BUF_SZ     	64*1024 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /* Clock Defines */ |  | ||||||
| #define V_OSCK				0 /* 0 means detect from sysboot1 config */ |  | ||||||
| #define V_SCLK				(V_OSCK) |  | ||||||
| 
 |  | ||||||
| #include <config_distro_bootcmd.h> |  | ||||||
| 
 |  | ||||||
| /* Dynamic override for PHY_ANEG_TIMEOUT value */ |  | ||||||
| #ifndef CONFIG_SPL_BUILD |  | ||||||
| # ifndef __ASSEMBLER__ |  | ||||||
| int eth_phy_timeout(void); |  | ||||||
| # endif |  | ||||||
| #endif |  | ||||||
| #define PHY_ANEG_TIMEOUT		eth_phy_timeout() |  | ||||||
| #define PHY_ANEG_DEFAULT_TIMEOUT	5000 |  | ||||||
| 
 |  | ||||||
| #define CONFIG_ARP_TIMEOUT		200 |  | ||||||
| #undef CONFIG_NET_RETRY_COUNT |  | ||||||
| #define CONFIG_NET_RETRY_COUNT		5 |  | ||||||
| #define CONFIG_BOOTP_MAY_FAIL |  | ||||||
| 
 |  | ||||||
| #ifndef CONFIG_SPL_BUILD |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Memory map for booting Linux |  | ||||||
|  * |  | ||||||
|  * 0x80000000   32MB	KERNEL_ADDR (kernel_addr), kernel execution address |  | ||||||
|  * 0x82000000  190MB    KERNEL_ADDR_R (kernel_addr_r), FIT image/kernel loading address |  | ||||||
|  * 			 kernel will be relocated kernel_addr |  | ||||||
|  *                       for FIT images, ramdisc and dtb will be relocated to  |  | ||||||
|  *                       top of bootmemory (0x8e000000 downwards) |  | ||||||
|  * 0x8BE00000    1MB	FDT_ADDR_R (fdt_addr_r), device tree if separate from kernel/FIT |  | ||||||
|  * 0x8BF00000	 1MB	PXE_ADDR (pxefile_addr_r), pxe configuration file (pxe get command) |  | ||||||
|  * 0x8C000000   32MB	LOAD_ADDR (load_addr), loading address for generic files |  | ||||||
|  * <end of boot memory> |  | ||||||
|  * 0x8E000000    4B     NRSW reset reason |  | ||||||
|  *              32MB    <>, Free space |  | ||||||
|  * 0x90000000  256MB	<>, Free space, 512MB systems |  | ||||||
|  * 0xA0000000  512MB	<>, Free space, 1GB systems only |  | ||||||
|  * 0xC0000000		End of RAM |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #define KERNEL_ADDR	"0x80000000" |  | ||||||
| #define KERNEL_ADDR_R	"0x82000000" |  | ||||||
| #define FDT_ADDR_R	"0x8BE00000" |  | ||||||
| #define PXE_ADDR	"0x8BF00000" |  | ||||||
| #define LOAD_ADDR	"0x8C000000" |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Limit boot memory to 256 MBytes to comply with kernel initial memory layout |  | ||||||
|  * This is the official way to restrict image load addresses.  |  | ||||||
|  * Don't use xx_high_addr variables. |  | ||||||
|  */ |  | ||||||
| #define BOOTM_SIZE      "0x0E000000"	 |  | ||||||
| 
 |  | ||||||
| /* Set boot command depending of software environment */ |  | ||||||
| #ifndef CONFIG_NRSW_BUILD |  | ||||||
| /* Yocto/OSTree boot command */ |  | ||||||
| #define MAIN_BOOTCMD "run boot_ostree" |  | ||||||
| #else |  | ||||||
| /* NRSW boot command */ |  | ||||||
| #define MAIN_BOOTCMD "run sdboot" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /* TODO: Might need to check ti_cpsw.rx_packet_max when running on top of AM335x switch */ |  | ||||||
| 
 |  | ||||||
| #define CONFIG_EXTRA_ENV_SETTINGS \ |  | ||||||
| 	/* Memory Adresses */ \ |  | ||||||
| 	"fdt_addr_r=" FDT_ADDR_R "\0" \ |  | ||||||
| 	"kernel_addr=" KERNEL_ADDR "\0" /* NRSW only */ \ |  | ||||||
| 	"kernel_addr_r=" KERNEL_ADDR_R  "\0" \ |  | ||||||
| 	"load_addr=" LOAD_ADDR "\0" \ |  | ||||||
| 	"pxefile_addr_r=" PXE_ADDR "\0" \ |  | ||||||
| 	"bootm_size=" BOOTM_SIZE "\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Misc */ \ |  | ||||||
| 	"defaultconsole=ttyS0\0" \ |  | ||||||
| 	"fdt_skip_update=yes\0" \ |  | ||||||
| 	"bootdelay=0\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Networking */ \ |  | ||||||
| 	"ethprime=cpsw\0" \ |  | ||||||
| 	"ethopts=ti_cpsw.rx_packet_max=1526\0" \ |  | ||||||
| 	"ipaddr=192.168.1.1\0" \ |  | ||||||
| 	"serverip=192.168.1.254\0" \ |  | ||||||
| 	"tftptimeout=2000\0" \ |  | ||||||
| 	"tftptimeoutcountmax=5\0" \ |  | ||||||
| 	"bootpretryperiod=10000\0" \ |  | ||||||
| 	"autoload=false\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* OSTree boot */ \ |  | ||||||
| 	"bootcmd_otenv=ext4load mmc 1:1 $load_addr /boot/loader/uEnv.txt; " \ |  | ||||||
| 			"setenv bootargs_prev $bootargs; " \ |  | ||||||
| 			"env import -t $load_addr $filesize; setenv bootargs $bootargs_prev $bootargs root=/dev/ram0 console=$defaultconsole,115200 " \ |  | ||||||
| 			"$ethopts rw ostree_root=/dev/mmcblk1p1\0" \ |  | ||||||
| 	"bootcmd_rd_in_mmc=ext4load mmc 1:1 $kernel_addr_r /boot$kernel_image; " \ |  | ||||||
| 			"bootm $kernel_addr_r\0" \ |  | ||||||
| 	"boot_ostree=run bootcmd_otenv; run bootcmd_rd_in_mmc\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* NRSW boot */ \ |  | ||||||
| 	"root_part=1\0" /* from NRSW, required here? set from board.c */ \ |  | ||||||
| 	"kernel_image=kernel.bin\0" \ |  | ||||||
| 	"fdt_image=am335x-hw25-prod1.dtb\0" \ |  | ||||||
| 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/${mmc_dev}p$root_part rootfstype=ext4 " \ |  | ||||||
| 			"console=$defaultconsole,115200 rootwait loglevel=4 ti_cpsw.rx_packet_max=1526\0" \ |  | ||||||
| 	"add_version_bootargs=setenv bootargs $bootargs\0" \ |  | ||||||
| 	"sdbringup=echo Try bringup boot && ext4load mmc 1:$root_part $kernel_addr /boot/zImage && " \ |  | ||||||
| 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs rw;\0" \ |  | ||||||
| 	"sdprod=ext4load mmc 1:$root_part $kernel_addr /boot/$kernel_image && " \ |  | ||||||
| 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs ro;\0" \ |  | ||||||
| 	"sdboot=env set fdt_addr " FDT_ADDR_R "; "\ |  | ||||||
| 			"if mmc dev 1; then echo Copying Linux from SD to RAM...; "\ |  | ||||||
| 			"if test -e mmc 1:$root_part /boot/$kernel_image; then run sdprod; " \ |  | ||||||
| 			"else run sdbringup; fi; " \ |  | ||||||
| 			/* For v4.19 kernel $mmc_dev should be "mmcblk1" (read from DT), for v3.18 kernel: "mmcblk0" */ \ |  | ||||||
| 			"fdt addr $fdt_addr;if fdt get value mmc_dev /nm_env nm,mmc-dev;then;else setenv mmc_dev mmcblk0;fi;" \ |  | ||||||
| 			"run add_sd_bootargs; run add_version_bootargs; " \ |  | ||||||
| 			"bootz $kernel_addr - $fdt_addr; fi\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Boot command */ \ |  | ||||||
| 	"bootcmd=" MAIN_BOOTCMD "\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Recovery boot (same for OSTree and NRSW) */ \ |  | ||||||
| 	"recovery=run pxe_recovery || setenv ipaddr $ipaddr; setenv serverip $serverip; run tftp_recovery\0" \ |  | ||||||
| 	/* setenv ipaddr and serverip is necessary, because dhclient destroys the IPs internally */ \ |  | ||||||
| 	"pxe_recovery=mdio up $ethprime && dhcp && pxe get && pxe boot\0" \ |  | ||||||
| 	"tftp_recovery=tftpboot $kernel_addr_r recovery-image; tftpboot $fdt_addr_r recovery-dtb; " \ |  | ||||||
| 			"setenv bootargs rdinit=/etc/preinit console=$defaultconsole,115200 " \ |  | ||||||
| 			"debug $ethopts; " \ |  | ||||||
| 			"bootz $kernel_addr_r - $fdt_addr_r\0" /* kernel_addr_r */ |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* TODO: Check if ok for NRSW? */ |  | ||||||
| #define CONFIG_ZERO_BOOTDELAY_CHECK |  | ||||||
| 
 |  | ||||||
| /* UART Configuration */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM1			0x44e09000	/* UART0: XModem Boot, Debug UART */ |  | ||||||
| 
 |  | ||||||
| /* TODO: Preparation in case UART5 shall be used later */ |  | ||||||
| #if 0 |  | ||||||
| #define CONFIG_SYS_NS16550_COM2			0x48022000	/* UART1: Unused, see note below */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM3			0x48024000	/* UART2: Unused, see note below */ |  | ||||||
| /* NOTE: NS16550 definitions are cumulative, need to set COM2 to have COM3 */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM4			0x481A6000	/* UART3: - */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM5			0x481A8000	/* UART4: - */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM6			0x481AA000	/* UART5: User UART */ |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define CONFIG_I2C |  | ||||||
| #define CONFIG_I2C_MULTI_BUS |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMD_EEPROM |  | ||||||
| #define CONFIG_SYS_I2C_EEPROM_ADDR              0x50	/* Main EEPROM */ |  | ||||||
| #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN          2 |  | ||||||
| #define CONFIG_SYS_I2C_SPEED                    100000 |  | ||||||
| #define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS       4 |  | ||||||
| #define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS   50	/* TODO: Can this be reduced to 20ms */ |  | ||||||
| 
 |  | ||||||
| /* Put Environment in eMMC */ |  | ||||||
| #define CONFIG_ENV_OFFSET			(512 * 128)	/* @ 512*256 SPL starts */ |  | ||||||
| #define CONFIG_ENV_SIZE				(4 * 1024) |  | ||||||
| #define CONFIG_ENV_IS_IN_MMC |  | ||||||
| #define CONFIG_SYS_MMC_ENV_DEV			1 |  | ||||||
| 
 |  | ||||||
| #undef CONFIG_SPL_ENV_SUPPORT |  | ||||||
| #undef CONFIG_SPL_NAND_SUPPORT |  | ||||||
| #undef CONFIG_SPL_ONENAND_SUPPORT |  | ||||||
| 
 |  | ||||||
| /* We need to disable SPI to not confuse the eeprom env driver */ |  | ||||||
| #undef CONFIG_SPI |  | ||||||
| #undef CONFIG_SPI_BOOT |  | ||||||
| #undef CONFIG_SPL_OS_BOOT |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SPL_YMODEM_SUPPORT |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/am33xx/u-boot-spl.lds" |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SUPPORT_EMMC_BOOT |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * USB configuration.  We enable MUSB support, both for host and for |  | ||||||
|  * gadget.  We set USB0 as peripheral and USB1 as host, based on the |  | ||||||
|  * board schematic and physical port wired to each.  Then for host we |  | ||||||
|  * add mass storage support and for gadget we add both RNDIS ethernet |  | ||||||
|  * and DFU. |  | ||||||
|  */ |  | ||||||
| #define CONFIG_USB_MUSB_DSPS |  | ||||||
| #define CONFIG_ARCH_MISC_INIT |  | ||||||
| #define CONFIG_USB_MUSB_PIO_ONLY |  | ||||||
| #define CONFIG_USB_MUSB_DISABLE_BULK_COMBINE_SPLIT |  | ||||||
| #define CONFIG_AM335X_USB0 |  | ||||||
| #define CONFIG_AM335X_USB0_MODE		MUSB_HOST |  | ||||||
| 
 |  | ||||||
| /* To support eMMC booting */ |  | ||||||
| #define CONFIG_STORAGE_EMMC |  | ||||||
| #define CONFIG_FASTBOOT_FLASH_MMC_DEV   1 |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_USB_MUSB_HOST |  | ||||||
| #define CONFIG_USB_STORAGE |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_USB_MUSB_GADGET |  | ||||||
| /* Removing USB gadget and can be enabled adter adding support usb DM */ |  | ||||||
| #ifndef CONFIG_DM_ETH |  | ||||||
| #define CONFIG_USB_ETHER |  | ||||||
| #define CONFIG_USB_ETH_RNDIS |  | ||||||
| #define CONFIG_USBNET_HOST_ADDR	"de:ad:be:af:00:00" |  | ||||||
| #endif /* CONFIG_DM_ETH */ |  | ||||||
| #endif /* CONFIG_USB_MUSB_GADGET */ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Disable MMC DM for SPL build and can be re-enabled after adding |  | ||||||
|  * DM support in SPL |  | ||||||
|  */ |  | ||||||
| #ifdef CONFIG_SPL_BUILD |  | ||||||
| #undef CONFIG_DM_MMC |  | ||||||
| #undef CONFIG_TIMER |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #if defined(CONFIG_SPL_BUILD) |  | ||||||
| /* Remove other SPL modes. */ |  | ||||||
| #undef CONFIG_SPL_NAND_SUPPORT |  | ||||||
| #define CONFIG_ENV_IS_NOWHERE |  | ||||||
| #undef CONFIG_PARTITION_UUIDS |  | ||||||
| #undef CONFIG_EFI_PARTITION |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /* Network. */ |  | ||||||
| #define CONFIG_IP_DEFRAG		/* so we can use large tftp blocks */ |  | ||||||
| #define CONFIG_TFTP_TSIZE		/* tftp transfer size, progress bar */ |  | ||||||
| 
 |  | ||||||
| #define CONFIG_PHYLIB |  | ||||||
| #define CONFIG_PHY_SMSC |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMD_MEMTEST |  | ||||||
| #define CONFIG_SYS_MEMTEST_START    0x84000000 |  | ||||||
| #define CONFIG_SYS_MEMTEST_END      0x87900000 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_NRSW_BUILD |  | ||||||
| /* support for NM packed bootloader */ |  | ||||||
| #define CONFIG_NM_BOOTLOADER_FORMAT |  | ||||||
| 
 |  | ||||||
| /* password protected login */ |  | ||||||
| #define CONFIG_CRYPT |  | ||||||
| #define CONFIG_NM_LOGIN |  | ||||||
| #define CONFIG_NM_LOGIN_PART	"1:3"	/* TODO: Define location of file for OSTree/Yocto */ |  | ||||||
| #define CONFIG_NM_LOGIN_PASSWD	"/root/boot/bootpass" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMD_PXE |  | ||||||
| 
 |  | ||||||
| #define CONFIG_OF_BOARD_SETUP |  | ||||||
| 
 |  | ||||||
| #define CONFIG_JTAG_MARKER_SPL		0x402FFF00 |  | ||||||
| #define CONFIG_JTAG_MARKER_UBOOT	0x807FFF00 |  | ||||||
| 
 |  | ||||||
| /* NRSW PMIC Reset Reason */ |  | ||||||
| #define RESET_REASON_SHM_LOCATION	0x8e000000 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* SPL command is not needed */ |  | ||||||
| #undef CONFIG_CMD_SPL |  | ||||||
| 
 |  | ||||||
| /* Never enable ISO it is broken and can lead to a crash */ |  | ||||||
| #undef CONFIG_ISO_PARTITION |  | ||||||
| 
 |  | ||||||
| #endif	/* ! __CONFIG_AM335X_HW25_H */ |  | ||||||
|  | @ -49,7 +49,7 @@ | ||||||
| 	"kernel_addr=0x80000000\0" \ | 	"kernel_addr=0x80000000\0" \ | ||||||
| 	"load_addr=0x83000000\0" \ | 	"load_addr=0x83000000\0" \ | ||||||
| 	"root_part=1\0" /* Default root partition, overwritte in board/mv_ebu/a38x/nbhw14_env.c */ \ | 	"root_part=1\0" /* Default root partition, overwritte in board/mv_ebu/a38x/nbhw14_env.c */ \ | ||||||
| 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/mmcblk1p$root_part rootfstype=ext4 console=ttyO0,115200 rootwait earlyprintk\0" \ | 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/mmcblk0p$root_part rootfstype=ext4 console=ttyO0,115200 rootwait earlyprintk\0" \ | ||||||
| 	"add_version_bootargs=setenv bootargs $bootargs\0" \ | 	"add_version_bootargs=setenv bootargs $bootargs\0" \ | ||||||
| 	"fdt_skip_update=yes\0" \ | 	"fdt_skip_update=yes\0" \ | ||||||
|     "ethprime=cpsw\0" \ |     "ethprime=cpsw\0" \ | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ | ||||||
| #define CONFIG_BOOTP_MAY_FAIL | #define CONFIG_BOOTP_MAY_FAIL | ||||||
| 
 | 
 | ||||||
| #ifndef CONFIG_SPL_BUILD | #ifndef CONFIG_SPL_BUILD | ||||||
| #define KERNEL_ADDR "0x8C100000" | #define KERNEL_ADDR "0x80000000" | ||||||
| #define LOAD_ADDR "0x83000000" | #define LOAD_ADDR "0x83000000" | ||||||
| #define FDT_ADDR "0x82000000" | #define FDT_ADDR "0x82000000" | ||||||
| #define PXE_ADDR "0x82800000" | #define PXE_ADDR "0x82800000" | ||||||
|  | @ -59,7 +59,7 @@ | ||||||
| 	"load_addr=" LOAD_ADDR "\0" \ | 	"load_addr=" LOAD_ADDR "\0" \ | ||||||
| 	"root_part=1\0" /* Default root partition, overwritte in board file */ \ | 	"root_part=1\0" /* Default root partition, overwritte in board file */ \ | ||||||
| 	"defaultconsole=ttyS1\0" /* Default output console */ \ | 	"defaultconsole=ttyS1\0" /* Default output console */ \ | ||||||
| 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/mmcblk1p$root_part rootfstype=ext4 console=$defaultconsole,115200 rootwait loglevel=4\0" \ | 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/mmcblk0p$root_part rootfstype=ext4 console=$defaultconsole,115200 rootwait loglevel=4\0" \ | ||||||
| 	"add_version_bootargs=setenv bootargs $bootargs\0" \ | 	"add_version_bootargs=setenv bootargs $bootargs\0" \ | ||||||
| 	"fdt_skip_update=yes\0" \ | 	"fdt_skip_update=yes\0" \ | ||||||
| 	"ethprime=cpsw\0" \ | 	"ethprime=cpsw\0" \ | ||||||
|  | @ -72,7 +72,7 @@ | ||||||
| 			"else run sdbringup; fi; " \ | 			"else run sdbringup; fi; " \ | ||||||
| 			"run add_sd_bootargs; run add_version_bootargs; run shieldcmd; run modifyfdtcmd; " \ | 			"run add_sd_bootargs; run add_version_bootargs; run shieldcmd; run modifyfdtcmd; " \ | ||||||
| 			"bootz $kernel_addr - $fdt_addr; fi\0" \ | 			"bootz $kernel_addr - $fdt_addr; fi\0" \ | ||||||
| 	"bootcmd=run bootcmd_otenv; run bootcmd_rd_in_mmc\0" \ | 	"bootcmd=run sdboot\0" \ | ||||||
| 	"ipaddr=192.168.1.1\0" \ | 	"ipaddr=192.168.1.1\0" \ | ||||||
| 	"serverip=192.168.1.254\0" \ | 	"serverip=192.168.1.254\0" \ | ||||||
| 	"pxefile_addr_r=" PXE_ADDR "\0" \ | 	"pxefile_addr_r=" PXE_ADDR "\0" \ | ||||||
|  | @ -89,13 +89,7 @@ | ||||||
| 	"modifyfdtcmd=fdt addr $fdt_addr; run fdtshieldcmd;\0" \ | 	"modifyfdtcmd=fdt addr $fdt_addr; run fdtshieldcmd;\0" \ | ||||||
| 	"tftp_recovery=tftpboot $kernel_addr recovery-image; tftpboot $fdt_addr recovery-dtb; setenv bootargs rdinit=/etc/preinit console=$defaultconsole,115200 debug; run shieldcmd; run modifyfdtcmd; bootz $kernel_addr - $fdt_addr\0" \ | 	"tftp_recovery=tftpboot $kernel_addr recovery-image; tftpboot $fdt_addr recovery-dtb; setenv bootargs rdinit=/etc/preinit console=$defaultconsole,115200 debug; run shieldcmd; run modifyfdtcmd; bootz $kernel_addr - $fdt_addr\0" \ | ||||||
| 	"pxe_recovery=sleep 3 && dhcp && pxe get && pxe boot\0" \ | 	"pxe_recovery=sleep 3 && dhcp && pxe get && pxe boot\0" \ | ||||||
| 	"recovery=run pxe_recovery || setenv ipaddr $ipaddr; setenv serverip $serverip; run tftp_recovery\0" /* setenv ipaddr and serverip is necessary, because dhclient can destroy the IPs inernally */ \ | 	"recovery=run pxe_recovery || setenv ipaddr $ipaddr; setenv serverip $serverip; run tftp_recovery\0" /* setenv ipaddr and serverip is necessary, because dhclient can destroy the IPs inernally */ | ||||||
|         "bootcmd_otenv=ext4load mmc 1:1 $load_addr /boot/loader/uEnv.txt; " \  |  | ||||||
| 				"setenv bootargs_prev $bootargs; " \ |  | ||||||
| 				"env import -t $load_addr $filesize; setenv bootargs $bootargs_prev $bootargs root=/dev/ram0 console=$defaultconsole,115200 " \ |  | ||||||
|         "bootcmd_rd_in_mmc=ext4load mmc 1:1 $kernel_addr_r /boot$kernel_image; bootm $kernel_addr_r#conf@am335x-nrhw16-prod4.dtb\0" \ |  | ||||||
|         "fdt_high=0xffffffff\0" \ |  | ||||||
|         "initrd_high=0xffffffff\0" |  | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -19,11 +19,6 @@ | ||||||
| 
 | 
 | ||||||
| #include <configs/ti_am335x_common.h> | #include <configs/ti_am335x_common.h> | ||||||
| 
 | 
 | ||||||
| /* Disable U-Boot load from filesystems, to save around 10 kB SPL image size */ |  | ||||||
| #ifdef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION |  | ||||||
| # undef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC | #undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC | ||||||
| 
 | 
 | ||||||
| #undef CONFIG_HW_WATCHDOG | #undef CONFIG_HW_WATCHDOG | ||||||
|  | @ -63,112 +58,71 @@ int eth_phy_timeout(void); | ||||||
| 
 | 
 | ||||||
| #ifndef CONFIG_SPL_BUILD | #ifndef CONFIG_SPL_BUILD | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Memory map for booting Linux |  * Memory map for booting Linux | ||||||
|  * |  * | ||||||
|  * 0x80000000   32MB	KERNEL_ADDR (kernel_addr), kernel execution address |  * 0x80000000   63MB	KERNEL_ADDR (kernel_addr), kernel execution address | ||||||
|  * 0x82000000  190MB    KERNEL_ADDR_R (kernel_addr_r), FIT image/kernel loading address |  * 0x83F00000    1MB	FDT_ADDR (fdt_addr_r), device tree loading address if not included in kernel | ||||||
|  * 			 kernel will be relocated kernel_addr |  * 0x84000000  126MB	RD_ADDR (ramdisk_addr_r), ramdisc loading address | ||||||
|  *                       for FIT images, ramdisc and dtb will be relocated to  |  * 0x8BE00000    2MB	PXE_ADDR (pxefile_addr_r), pxe configuration file (pxe get command) | ||||||
|  *                       top of bootmemory (0x8e000000 downwards) |  * 0x8C000000    1MB	LOAD_ADDR (load_addr), loading address for generic files | ||||||
|  * 0x8BE00000    1MB	FDT_ADDR_R (fdt_addr_r), device tree if separate from kernel/FIT |  * 0x8C100000   63MB	KERNEL_ADDR_R (kernel_addr_r), kernel loading address (will be relocated to kernel_addr) | ||||||
|  * 0x8BF00000	 1MB	PXE_ADDR (pxefile_addr_r), pxe configuration file (pxe get command) |  * 0x90000000  256MB	<>, Free space 512MB systems | ||||||
|  * 0x8C000000   32MB	LOAD_ADDR (load_addr), loading address for generic files |  | ||||||
|  * <end of boot memory> |  | ||||||
|  * 0x8E000000    4B     NRSW reset reason |  | ||||||
|  *              32MB    <>, Free space |  | ||||||
|  * 0x90000000  256MB	<>, Free space, 512MB systems |  | ||||||
|  * 0xA0000000  512MB	<>, Free space, 1GB systems only |  * 0xA0000000  512MB	<>, Free space, 1GB systems only | ||||||
|  * 0xC0000000		End of RAM |  * 0xC0000000		End of RAM | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #define KERNEL_ADDR	"0x80000000" | #define KERNEL_ADDR	"0x80000000" | ||||||
| #define KERNEL_ADDR_R	"0x82000000" | #define FDT_ADDR	"0x83F00000" | ||||||
| #define FDT_ADDR_R	"0x8BE00000" | #define RD_ADDR		"0x84000000" | ||||||
| #define PXE_ADDR	"0x8BF00000" | #define PXE_ADDR	"0x8BE00000" | ||||||
| #define LOAD_ADDR	"0x8C000000" | #define LOAD_ADDR	"0x8C000000" | ||||||
|  | #define KERNEL_ADDR_R	"0x8C100000" | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Limit boot memory to 256 MBytes to comply with kernel initial memory layout |  * Avoid copying ramdisc and dtb above 512MB, as it breaks Linux boot. | ||||||
|  * This is the official way to restrict image load addresses.  |  * -1 means "do not copy" to high address, use in place. | ||||||
|  * Don't use xx_high_addr variables. |  | ||||||
|  */ |  */ | ||||||
| #define BOOTM_SIZE      "0x0E000000"	 | #define INITRD_HIGH_ADDR "0xffffffff" | ||||||
| 
 | #define FDT_HIGH_ADDR    "0xffffffff" | ||||||
| /* Set boot command depending of software environment */ |  | ||||||
| #ifndef CONFIG_NRSW_BUILD |  | ||||||
| /* Yocto/OSTree boot command */ |  | ||||||
| #define MAIN_BOOTCMD "run boot_ostree" |  | ||||||
| #else |  | ||||||
| /* NRSW boot command */ |  | ||||||
| #define MAIN_BOOTCMD "run sdboot" |  | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| #define CONFIG_EXTRA_ENV_SETTINGS \ | #define CONFIG_EXTRA_ENV_SETTINGS \ | ||||||
| 	/* Memory Adresses */ \ | 	"fdt_image=am335x-nmhw21-prod1.dtb\0" \ | ||||||
| 	"fdt_addr_r=" FDT_ADDR_R "\0" \ | 	"fdt_addr_r=" FDT_ADDR "\0" \ | ||||||
| 	"kernel_addr=" KERNEL_ADDR "\0" /* NRSW only */ \ | 	"fdt_high=" FDT_HIGH_ADDR "\0" \ | ||||||
|  | 	"initrd_high=" INITRD_HIGH_ADDR "\0" \ | ||||||
|  | 	"kernel_addr=" KERNEL_ADDR "\0" \ | ||||||
| 	"kernel_addr_r=" KERNEL_ADDR_R  "\0" \ | 	"kernel_addr_r=" KERNEL_ADDR_R  "\0" \ | ||||||
| 	"load_addr=" LOAD_ADDR "\0" \ | 	"load_addr=" LOAD_ADDR "\0" \ | ||||||
| 	"pxefile_addr_r=" PXE_ADDR "\0" \ | 	"pxefile_addr_r=" PXE_ADDR "\0" \ | ||||||
| 	"bootm_size=" BOOTM_SIZE "\0" \ | 	"ramdisk_addr_r=" RD_ADDR "\0" \ | ||||||
| 	\ |  | ||||||
| 	/* Misc */ \ |  | ||||||
| 	"defaultconsole=ttyS2\0" \ | 	"defaultconsole=ttyS2\0" \ | ||||||
| 	"fdt_skip_update=yes\0" \ | 	"fdt_skip_update=yes\0" \ | ||||||
| 	"bootdelay=0\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Networking */ \ |  | ||||||
| 	"ethprime=cpsw\0" \ | 	"ethprime=cpsw\0" \ | ||||||
| 	"ethopts=ti_cpsw.rx_packet_max=1526\0" \ | 	"ethopts=ti_cpsw.rx_packet_max=1526\0" \ | ||||||
|  | 	"bootcmd_otenv=ext4load mmc 1:1 $load_addr /boot/loader/uEnv.txt; " \ | ||||||
|  | 			"env import -t $load_addr $filesize; " \ | ||||||
|  | 			"setenv bootargs $bootargs root=/dev/ram0 console=$defaultconsole,115200 " \ | ||||||
|  | 			"$ethopts rw ostree_root=/dev/mmcblk1p1\0" \ | ||||||
|  | 	"bootcmd_rd_in_mmc=ext4load mmc 1:1 $kernel_addr_r /boot$kernel_image; " \ | ||||||
|  | 			"ext4load mmc 1:1 $ramdisk_addr_r /boot$ramdisk_image; " \ | ||||||
|  | 			"bootm $kernel_addr_r $ramdisk_addr_r\0" \ | ||||||
|  | 	"bootcmd=run bootcmd_otenv; run bootcmd_rd_in_mmc\0" \ | ||||||
|  | 	"bootdelay=0\0" \ | ||||||
| 	"ipaddr=192.168.1.1\0" \ | 	"ipaddr=192.168.1.1\0" \ | ||||||
| 	"serverip=192.168.1.254\0" \ | 	"serverip=192.168.1.254\0" \ | ||||||
| 	"tftptimeout=2000\0" \ | 	"tftptimeout=2000\0" \ | ||||||
| 	"tftptimeoutcountmax=5\0" \ | 	"tftptimeoutcountmax=5\0" \ | ||||||
| 	"bootpretryperiod=10000\0" /* 2000 */ \ | 	"bootpretryperiod=10000\0" \ | ||||||
| 	"autoload=false\0" \ | 	"autoload=false\0" \ | ||||||
| 	\ | 	"tftp_recovery=tftpboot $kernel_addr recovery-image; tftpboot $fdt_addr_r recovery-dtb; " \ | ||||||
| 	/* OSTree boot */ \ |  | ||||||
| 	"bootcmd_otenv=ext4load mmc 1:1 $load_addr /boot/loader/uEnv.txt; " \ |  | ||||||
| 			"setenv bootargs_prev $bootargs; " \ |  | ||||||
| 			"env import -t $load_addr $filesize; setenv bootargs $bootargs_prev $bootargs root=/dev/ram0 console=$defaultconsole,115200 " \ |  | ||||||
| 			"$ethopts rw ostree_root=/dev/mmcblk1p1\0" \ |  | ||||||
| 	"bootcmd_rd_in_mmc=ext4load mmc 1:1 $kernel_addr_r /boot$kernel_image; " \ |  | ||||||
| 			"bootm $kernel_addr_r\0" \ |  | ||||||
| 	"boot_ostree=run bootcmd_otenv; run bootcmd_rd_in_mmc\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* NRSW boot */ \ |  | ||||||
| 	"root_part=1\0" /* from NRSW, required here? set from board.c */ \ |  | ||||||
| 	"kernel_image=kernel.bin\0" \ |  | ||||||
| 	"fdt_image=am335x-nmhw21-prod1.dtb\0" \ |  | ||||||
| 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/${mmc_dev}p$root_part rootfstype=ext4 " \ |  | ||||||
| 			"console=$defaultconsole,115200 rootwait loglevel=4 ti_cpsw.rx_packet_max=1526\0" \ |  | ||||||
| 	"add_version_bootargs=setenv bootargs $bootargs\0" \ |  | ||||||
| 	"sdbringup=echo Try bringup boot && ext4load mmc 1:$root_part $kernel_addr /boot/zImage && " \ |  | ||||||
| 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs rw;\0" \ |  | ||||||
| 	"sdprod=ext4load mmc 1:$root_part $kernel_addr /boot/$kernel_image && " \ |  | ||||||
| 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs ro;\0" \ |  | ||||||
| 	"sdboot=env set fdt_addr " FDT_ADDR_R "; "\ |  | ||||||
| 			"if mmc dev 1; then echo Copying Linux from SD to RAM...; "\ |  | ||||||
| 			"if test -e mmc 1:$root_part /boot/$kernel_image; then run sdprod; " \ |  | ||||||
| 			"else run sdbringup; fi; " \ |  | ||||||
| 			/* For v4.19 kernel $mmc_dev should be "mmcblk1" (read from DT), for v3.18 kernel: "mmcblk0" */ \ |  | ||||||
| 			"fdt addr $fdt_addr;if fdt get value mmc_dev /nm_env nm,mmc-dev;then;else setenv mmc_dev mmcblk0;fi;" \ |  | ||||||
| 			"run add_sd_bootargs; run add_version_bootargs; " \ |  | ||||||
| 			"bootz $kernel_addr - $fdt_addr; fi\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Boot command */ \ |  | ||||||
| 	"bootcmd=" MAIN_BOOTCMD "\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Recovery boot (same for OSTree and NRSW) */ \ |  | ||||||
| 	"recovery=run pxe_recovery || setenv ipaddr $ipaddr; setenv serverip $serverip; run tftp_recovery\0" \ |  | ||||||
| 	/* setenv ipaddr and serverip is necessary, because dhclient destroys the IPs internally */ \ |  | ||||||
| 	"pxe_recovery=mdio up $ethprime && dhcp && pxe get && pxe boot\0" \ |  | ||||||
| 	"tftp_recovery=tftpboot $kernel_addr_r recovery-image; tftpboot $fdt_addr_r recovery-dtb; " \ |  | ||||||
| 			"setenv bootargs rdinit=/etc/preinit console=$defaultconsole,115200 " \ | 			"setenv bootargs rdinit=/etc/preinit console=$defaultconsole,115200 " \ | ||||||
| 			"debug $ethopts; " \ | 			"debug ethopts; " \ | ||||||
| 			"bootz $kernel_addr_r - $fdt_addr_r\0" /* kernel_addr_r */ | 			"bootz $kernel_addr - $fdt_addr_r\0" \ | ||||||
| 
 | 	"pxe_recovery=mdio up $ethprime && dhcp && pxe get && pxe boot\0" \ | ||||||
|  | 	"recovery=run pxe_recovery || setenv ipaddr $ipaddr; setenv serverip $serverip; run tftp_recovery\0" \ | ||||||
|  | 			/* setenv ipaddr and serverip is necessary, because dhclient can destroy the IPs internally */ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define CONFIG_ZERO_BOOTDELAY_CHECK | #define CONFIG_ZERO_BOOTDELAY_CHECK | ||||||
|  | @ -178,9 +132,6 @@ int eth_phy_timeout(void); | ||||||
| #define CONFIG_SYS_NS16550_COM2			0x48022000	/* UART1: Unused, see note below */ | #define CONFIG_SYS_NS16550_COM2			0x48022000	/* UART1: Unused, see note below */ | ||||||
| #define CONFIG_SYS_NS16550_COM3			0x48024000	/* UART2: eMMC Boot, User UART */ | #define CONFIG_SYS_NS16550_COM3			0x48024000	/* UART2: eMMC Boot, User UART */ | ||||||
| /* NOTE: NS16550 definitions are cumulative, need to set COM2 to have COM3 */ | /* NOTE: NS16550 definitions are cumulative, need to set COM2 to have COM3 */ | ||||||
| #define CONFIG_SYS_NS16550_COM4			0x481A6000	/* UART3: xxx */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM5			0x481A8000	/* UART4: yyy */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM6			0x481AA000	/* UART5: zzz */ |  | ||||||
| 
 | 
 | ||||||
| #define CONFIG_I2C | #define CONFIG_I2C | ||||||
| #define CONFIG_I2C_MULTI_BUS | #define CONFIG_I2C_MULTI_BUS | ||||||
|  | @ -269,9 +220,6 @@ int eth_phy_timeout(void); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /* Network. */ | /* Network. */ | ||||||
| #define CONFIG_IP_DEFRAG		/* so we can use large tftp blocks */ |  | ||||||
| #define CONFIG_TFTP_TSIZE		/* tftp transfer size, progress bar */ |  | ||||||
| 
 |  | ||||||
| #define CONFIG_PHYLIB | #define CONFIG_PHYLIB | ||||||
| #define CONFIG_PHY_SMSC | #define CONFIG_PHY_SMSC | ||||||
| 
 | 
 | ||||||
|  | @ -279,18 +227,6 @@ int eth_phy_timeout(void); | ||||||
| #define CONFIG_SYS_MEMTEST_START    0x84000000 | #define CONFIG_SYS_MEMTEST_START    0x84000000 | ||||||
| #define CONFIG_SYS_MEMTEST_END      0x87900000 | #define CONFIG_SYS_MEMTEST_END      0x87900000 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_NRSW_BUILD |  | ||||||
| /* support for NM packed bootloader */ |  | ||||||
| #define CONFIG_NM_BOOTLOADER_FORMAT |  | ||||||
| 
 |  | ||||||
| /* password protected login */ |  | ||||||
| #define CONFIG_CRYPT |  | ||||||
| #define CONFIG_NM_LOGIN |  | ||||||
| #define CONFIG_NM_LOGIN_PART	"1:3"	/* TODO: Define location of file for OSTree/Yocto */ |  | ||||||
| #define CONFIG_NM_LOGIN_PASSWD	"/root/boot/bootpass" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMD_PXE | #define CONFIG_CMD_PXE | ||||||
| 
 | 
 | ||||||
| #define CONFIG_OF_BOARD_SETUP | #define CONFIG_OF_BOARD_SETUP | ||||||
|  | @ -298,10 +234,6 @@ int eth_phy_timeout(void); | ||||||
| #define CONFIG_JTAG_MARKER_SPL		0x402FFF00 | #define CONFIG_JTAG_MARKER_SPL		0x402FFF00 | ||||||
| #define CONFIG_JTAG_MARKER_UBOOT	0x807FFF00 | #define CONFIG_JTAG_MARKER_UBOOT	0x807FFF00 | ||||||
| 
 | 
 | ||||||
| /* Reset and Start Reason */ |  | ||||||
| #define RESET_REASON_SHM_LOCATION	0x8e000000 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* SPL command is not needed */ | /* SPL command is not needed */ | ||||||
| #undef CONFIG_CMD_SPL | #undef CONFIG_CMD_SPL | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * am335x_nrhw20.h |  * am335x_nrhw20.h | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2018-2019 NetModule AG - http://www.netmodule.com/
 |  * Copyright (C) 2018 NetModule AG - http://www.netmodule.com/
 | ||||||
|  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 | ||||||
|  * |  * | ||||||
|  * This program is free software; you can redistribute it and/or |  * This program is free software; you can redistribute it and/or | ||||||
|  | @ -19,11 +19,6 @@ | ||||||
| 
 | 
 | ||||||
| #include <configs/ti_am335x_common.h> | #include <configs/ti_am335x_common.h> | ||||||
| 
 | 
 | ||||||
| /* Disable U-Boot load from filesystems, to save around 10 kB SPL image size */ |  | ||||||
| #ifdef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION |  | ||||||
| # undef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC | #undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC | ||||||
| 
 | 
 | ||||||
| #undef CONFIG_HW_WATCHDOG | #undef CONFIG_HW_WATCHDOG | ||||||
|  | @ -41,157 +36,75 @@ | ||||||
| #define CONFIG_MACH_TYPE		MACH_TYPE_TIAM335EVM | #define CONFIG_MACH_TYPE		MACH_TYPE_TIAM335EVM | ||||||
| #define CONFIG_BOARD_LATE_INIT | #define CONFIG_BOARD_LATE_INIT | ||||||
| 
 | 
 | ||||||
| /* TODO: It could be preconsole buffer is not properly working in SPL
 |  | ||||||
|  * Observed lock ups when printing too much text. |  | ||||||
| #define CONFIG_PRE_CONSOLE_BUFFER |  | ||||||
| #define CONFIG_PRE_CON_BUF_ADDR   	0x80000000 |  | ||||||
| #define CONFIG_PRE_CON_BUF_SZ     	64*1024 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /* Clock Defines */ | /* Clock Defines */ | ||||||
| #define V_OSCK				0 /* 0 means detect from sysboot1 config */ | #define V_OSCK				0 /* 0 means detect from sysboot1 config */ | ||||||
| #define V_SCLK				(V_OSCK) | #define V_SCLK				(V_OSCK) | ||||||
| 
 | 
 | ||||||
| #include <config_distro_bootcmd.h> | #include <config_distro_bootcmd.h> | ||||||
| 
 | 
 | ||||||
| /* Dynamic override for PHY_ANEG_TIMEOUT value */ |  | ||||||
| #if 0 /* TODO */
 |  | ||||||
| #ifndef CONFIG_SPL_BUILD |  | ||||||
| # ifndef __ASSEMBLER__ |  | ||||||
| int eth_phy_timeout(void); |  | ||||||
| # endif |  | ||||||
| #endif |  | ||||||
| #define PHY_ANEG_TIMEOUT		eth_phy_timeout() |  | ||||||
| #endif |  | ||||||
| #define PHY_ANEG_DEFAULT_TIMEOUT	5000 |  | ||||||
| 
 |  | ||||||
| #define CONFIG_ARP_TIMEOUT		200 | #define CONFIG_ARP_TIMEOUT		200 | ||||||
| #undef CONFIG_NET_RETRY_COUNT | #undef CONFIG_NET_RETRY_COUNT | ||||||
| #define CONFIG_NET_RETRY_COUNT		5 | #define CONFIG_NET_RETRY_COUNT		5 | ||||||
| #define CONFIG_BOOTP_MAY_FAIL | #define CONFIG_BOOTP_MAY_FAIL | ||||||
| 
 | 
 | ||||||
| #ifndef CONFIG_SPL_BUILD | #ifndef CONFIG_SPL_BUILD | ||||||
| 
 | #define KERNEL_ADDR			"0x80000000" | ||||||
| /*
 | #define LOAD_ADDR			"0x83000000" | ||||||
|  * Memory map for booting Linux | #define FDT_ADDR			"0x82000000" | ||||||
|  * | #define PXE_ADDR			"0x82800000" | ||||||
|  * 0x80000000   32MB	KERNEL_ADDR (kernel_addr), kernel execution address | #define FDT_HIGH_ADDR			"0x87000000" | ||||||
|  * 0x82000000  190MB    KERNEL_ADDR_R (kernel_addr_r), FIT image/kernel loading address | #define INIT_RD_ADDR			"0x88000000" | ||||||
|  * 			 kernel will be relocated kernel_addr |  | ||||||
|  *                       for FIT images, ramdisc and dtb will be relocated to  |  | ||||||
|  *                       top of bootmemory (0x8e000000 downwards) |  | ||||||
|  * 0x8BE00000    1MB	FDT_ADDR_R (fdt_addr_r), device tree if separate from kernel/FIT |  | ||||||
|  * 0x8BF00000	 1MB	PXE_ADDR (pxefile_addr_r), pxe configuration file (pxe get command) |  | ||||||
|  * 0x8C000000   32MB	LOAD_ADDR (load_addr), loading address for generic files |  | ||||||
|  * <end of boot memory> |  | ||||||
|  * 0x8E000000    4B     NRSW reset reason |  | ||||||
|  *              32MB    <>, Free space |  | ||||||
|  * 0x90000000  256MB	<>, Free space, 512MB systems |  | ||||||
|  * 0xA0000000  512MB	<>, Free space, 1GB systems only |  | ||||||
|  * 0xC0000000		End of RAM |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #define KERNEL_ADDR	"0x80000000" |  | ||||||
| #define KERNEL_ADDR_R	"0x82000000" |  | ||||||
| #define FDT_ADDR_R	"0x8BE00000" |  | ||||||
| #define PXE_ADDR	"0x8BF00000" |  | ||||||
| #define LOAD_ADDR	"0x8C000000" |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Limit boot memory to 256 MBytes to comply with kernel initial memory layout |  | ||||||
|  * This is the official way to restrict image load addresses.  |  | ||||||
|  * Don't use xx_high_addr variables. |  | ||||||
|  */ |  | ||||||
| #define BOOTM_SIZE      "0x0E000000"	 |  | ||||||
| 
 |  | ||||||
| /* Set boot command depending of software environment */ |  | ||||||
| #ifndef CONFIG_NRSW_BUILD |  | ||||||
| /* Yocto/OSTree boot command */ |  | ||||||
| #define MAIN_BOOTCMD "run boot_ostree" |  | ||||||
| #else |  | ||||||
| /* NRSW boot command */ |  | ||||||
| #define MAIN_BOOTCMD "run sdboot" |  | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| #define CONFIG_EXTRA_ENV_SETTINGS \ | #define CONFIG_EXTRA_ENV_SETTINGS \ | ||||||
| 	/* Memory Adresses */ \ | 	"kernel_image=kernel.bin\0"	\ | ||||||
| 	"fdt_addr_r=" FDT_ADDR_R "\0" \ | 	"fdt_image=openwrt-nrhw20-nb1601.dtb\0"\ | ||||||
| 	"kernel_addr=" KERNEL_ADDR "\0" /* NRSW only */ \ | 	"modeboot=sdboot\0" \ | ||||||
| 	"kernel_addr_r=" KERNEL_ADDR_R  "\0" \ | 	"fdt_addr=" FDT_ADDR "\0" \ | ||||||
|  | 	"kernel_addr=" KERNEL_ADDR "\0" \ | ||||||
| 	"load_addr=" LOAD_ADDR "\0" \ | 	"load_addr=" LOAD_ADDR "\0" \ | ||||||
| 	"pxefile_addr_r=" PXE_ADDR "\0" \ | 	"root_part=1\0" /* Default root partition, overwritten in board file */ \ | ||||||
| 	"bootm_size=" BOOTM_SIZE "\0" \ | 	"defaultconsole=ttyS1\0" /* Default output console */ \ | ||||||
| 	\ | 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/mmcblk1p$root_part rootfstype=ext4 " \ | ||||||
| 	/* Misc */ \ |  | ||||||
| 	"defaultconsole=ttyS1\0" \ |  | ||||||
| 	"fdt_skip_update=yes\0" \ |  | ||||||
| 	"bootdelay=0\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Networking */ \ |  | ||||||
| 	"ethprime=cpsw\0" \ |  | ||||||
| 	"ethopts=ti_cpsw.rx_packet_max=1526\0" \ |  | ||||||
| 	"ipaddr=192.168.1.1\0" \ |  | ||||||
| 	"serverip=192.168.1.254\0" \ |  | ||||||
| 	"tftptimeout=2000\0" \ |  | ||||||
| 	"tftptimeoutcountmax=5\0" \ |  | ||||||
| 	"bootpretryperiod=10000\0" /* 2000 */ \ |  | ||||||
| 	"autoload=false\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* OSTree boot */ \ |  | ||||||
| 	"bootcmd_otenv=ext4load mmc 1:1 $load_addr /boot/loader/uEnv.txt; " \ |  | ||||||
| 			"setenv bootargs_prev $bootargs; " \ |  | ||||||
| 			"env import -t $load_addr $filesize; setenv bootargs $bootargs_prev $bootargs root=/dev/ram0 console=$defaultconsole,115200 " \ |  | ||||||
| 			"$ethopts rw ostree_root=/dev/mmcblk1p1\0" \ |  | ||||||
| 	"bootcmd_rd_in_mmc=ext4load mmc 1:1 $kernel_addr_r /boot$kernel_image; " \ |  | ||||||
| 			"bootm $kernel_addr_r\0" \ |  | ||||||
| 	"boot_ostree=run shieldcmd; run bootcmd_otenv; run bootcmd_rd_in_mmc\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* NRSW boot */ \ |  | ||||||
| 	"root_part=1\0" /* from NRSW, required here? set from board.c */ \ |  | ||||||
| 	"kernel_image=kernel.bin\0" \ |  | ||||||
| 	"fdt_image=am335x-nmhw24-prod1.dtb\0" /* diff, openwrt-nrhw24-nb801.dtb, not relevant as it will be overwritten */ \ |  | ||||||
| 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/${mmc_dev}p$root_part rootfstype=ext4 " \ |  | ||||||
| 			"console=$defaultconsole,115200 rootwait loglevel=4 ti_cpsw.rx_packet_max=1526\0" \ | 			"console=$defaultconsole,115200 rootwait loglevel=4 ti_cpsw.rx_packet_max=1526\0" \ | ||||||
| 	"add_version_bootargs=setenv bootargs $bootargs\0" \ | 	"add_version_bootargs=setenv bootargs $bootargs\0" \ | ||||||
|  | 	"fdt_skip_update=yes\0" \ | ||||||
|  | 	"ethprime=cpsw\0" \ | ||||||
| 	"sdbringup=echo Try bringup boot && ext4load mmc 1:$root_part $kernel_addr /boot/zImage && " \ | 	"sdbringup=echo Try bringup boot && ext4load mmc 1:$root_part $kernel_addr /boot/zImage && " \ | ||||||
| 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs rw;\0" \ | 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs rw;\0" \ | ||||||
| 	"sdprod=ext4load mmc 1:$root_part $kernel_addr /boot/$kernel_image && " \ | 	"sdprod=ext4load mmc 1:$root_part $kernel_addr /boot/$kernel_image && " \ | ||||||
| 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs ro;\0" \ | 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs ro;\0" \ | ||||||
| 	"sdboot=env set fdt_addr " FDT_ADDR_R "; "\ | 	"sdboot=if mmc dev 1; then echo Copying Linux from SD to RAM...; "\ | ||||||
| 			"if mmc dev 1; then echo Copying Linux from SD to RAM...; "\ |  | ||||||
| 			"if test -e mmc 1:$root_part /boot/$kernel_image; then run sdprod; " \ | 			"if test -e mmc 1:$root_part /boot/$kernel_image; then run sdprod; " \ | ||||||
| 			"else run sdbringup; fi; " \ | 			"else run sdbringup; fi; " \ | ||||||
| 			/* For v4.19 kernel $mmc_dev should be "mmcblk1" (read from DT), for v3.18 kernel: "mmcblk0" */ \ |  | ||||||
| 			"fdt addr $fdt_addr;if fdt get value mmc_dev /nm_env nm,mmc-dev;then;else setenv mmc_dev mmcblk0;fi;" \ |  | ||||||
| 			"run add_sd_bootargs; run add_version_bootargs; run shieldcmd; " \ | 			"run add_sd_bootargs; run add_version_bootargs; run shieldcmd; " \ | ||||||
| 			"bootz $kernel_addr - $fdt_addr; fi\0" \ | 			"bootz $kernel_addr - $fdt_addr; fi\0" \ | ||||||
| 	\ | 	"bootcmd=run sdboot\0" \ | ||||||
| 	/* Boot command */ \ | 	"ipaddr=192.168.1.1\0" \ | ||||||
| 	"bootcmd=" MAIN_BOOTCMD "\0" \ | 	"serverip=192.168.1.254\0" \ | ||||||
| 	\ | 	"pxefile_addr_r=" PXE_ADDR "\0" \ | ||||||
| 	/* Recovery boot (same for OSTree and NRSW) */ \ | 	"fdt_addr_r=" FDT_ADDR "\0" \ | ||||||
| 	"recovery=run pxe_recovery || setenv ipaddr $ipaddr; setenv serverip $serverip; run tftp_recovery\0" \ | 	"fdt_high=" FDT_HIGH_ADDR "\0" \ | ||||||
| 	/* setenv ipaddr and serverip is necessary, because dhclient destroys the IPs internally */ \ | 	"kernel_addr_r=" KERNEL_ADDR "\0" \ | ||||||
| 	"pxe_recovery=mdio up $ethprime && dhcp && pxe get && pxe boot\0" \ | 	"ramdisk_addr_r=" LOAD_ADDR "\0" \ | ||||||
| 	"tftp_recovery=tftpboot $kernel_addr_r recovery-image; tftpboot $fdt_addr_r recovery-dtb; " \ | 	"initrd_high=" INIT_RD_ADDR "\0" \ | ||||||
|  | 	"bootpretryperiod=1000\0" \ | ||||||
|  | 	"tftptimeout=2000\0" \ | ||||||
|  | 	"tftptimeoutcountmax=5\0" \ | ||||||
|  | 	"bootpretryperiod=2000\0" \ | ||||||
|  | 	"autoload=false\0" \ | ||||||
|  | 	"shieldcmd=\0" \ | ||||||
|  | 	"tftp_recovery=tftpboot $kernel_addr recovery-image; tftpboot $fdt_addr recovery-dtb; " \ | ||||||
| 			"setenv bootargs rdinit=/etc/preinit console=$defaultconsole,115200 " \ | 			"setenv bootargs rdinit=/etc/preinit console=$defaultconsole,115200 " \ | ||||||
| 			"debug $ethopts; " \ | 			"debug ti_cpsw.rx_packet_max=1526; run shieldcmd; " \ | ||||||
| 			"bootz $kernel_addr_r - $fdt_addr_r\0" /* kernel_addr_r */ | 			"bootz $kernel_addr - $fdt_addr\0" \ | ||||||
| 
 | 	"pxe_recovery=sleep 3 && dhcp && pxe get && pxe boot\0" \ | ||||||
|  | 	"recovery=run pxe_recovery || setenv ipaddr $ipaddr; setenv serverip $serverip; run tftp_recovery\0" \ | ||||||
|  | 			/* setenv ipaddr and serverip is necessary, because dhclient can destroy the IPs inernally */ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| /* TODO: Check if ok for NRSW? */ |  | ||||||
| #define CONFIG_ZERO_BOOTDELAY_CHECK |  | ||||||
| 
 |  | ||||||
| /* UART Configuration */ | /* UART Configuration */ | ||||||
| #define CONFIG_SYS_NS16550_COM1			0x44e09000	/* UART0: XModem Boot, Shield */ | #define CONFIG_SYS_NS16550_COM1			0x44e09000	/* UART0: XModem Boot, Shield */ | ||||||
| #define CONFIG_SYS_NS16550_COM2			0x48022000	/* UART1: eMMC Boot, User UART */ | #define CONFIG_SYS_NS16550_COM2			0x48022000	/* UART1: eMMC Boot, User UART */ | ||||||
| /* TODO: Can the following be removed, as they shouldn't be required for bootloader */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM3			0x48024000	/* Unused */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM4			0x481A6000	/* GNSS */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM5			0x481A8000	/* Unused */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM6			0x481AA000	/* Bluetooth */ |  | ||||||
| 
 | 
 | ||||||
| #define CONFIG_I2C | #define CONFIG_I2C | ||||||
| #define CONFIG_I2C_MULTI_BUS | #define CONFIG_I2C_MULTI_BUS | ||||||
|  | @ -217,6 +130,13 @@ int eth_phy_timeout(void); | ||||||
| #define CONFIG_ENV_IS_IN_MMC | #define CONFIG_ENV_IS_IN_MMC | ||||||
| #define CONFIG_SYS_MMC_ENV_DEV			1 | #define CONFIG_SYS_MMC_ENV_DEV			1 | ||||||
| 
 | 
 | ||||||
|  | #if 0 | ||||||
|  | #define CONFIG_SYS_MMC_ENV_PART			2 | ||||||
|  | #define CONFIG_ENV_OFFSET_REDUND		(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) | ||||||
|  | #define CONFIG_SYS_REDUNDAND_ENVIRONMENT | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #undef CONFIG_SPL_ENV_SUPPORT | #undef CONFIG_SPL_ENV_SUPPORT | ||||||
| #undef CONFIG_SPL_NAND_SUPPORT | #undef CONFIG_SPL_NAND_SUPPORT | ||||||
| #undef CONFIG_SPL_ONENAND_SUPPORT | #undef CONFIG_SPL_ONENAND_SUPPORT | ||||||
|  | @ -226,6 +146,7 @@ int eth_phy_timeout(void); | ||||||
| #undef CONFIG_SPI_BOOT | #undef CONFIG_SPI_BOOT | ||||||
| #undef CONFIG_SPL_OS_BOOT | #undef CONFIG_SPL_OS_BOOT | ||||||
| 
 | 
 | ||||||
|  | #define CONFIG_SPL_POWER_SUPPORT	/* TODO: Check */ | ||||||
| #define CONFIG_SPL_YMODEM_SUPPORT | #define CONFIG_SPL_YMODEM_SUPPORT | ||||||
| 
 | 
 | ||||||
| #define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/am33xx/u-boot-spl.lds" | #define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/am33xx/u-boot-spl.lds" | ||||||
|  | @ -246,6 +167,14 @@ int eth_phy_timeout(void); | ||||||
| #define CONFIG_AM335X_USB0 | #define CONFIG_AM335X_USB0 | ||||||
| #define CONFIG_AM335X_USB0_MODE		MUSB_HOST | #define CONFIG_AM335X_USB0_MODE		MUSB_HOST | ||||||
| 
 | 
 | ||||||
|  | /* Fastboot */ | ||||||
|  | #define CONFIG_USB_FUNCTION_FASTBOOT | ||||||
|  | #define CONFIG_CMD_FASTBOOT | ||||||
|  | #define CONFIG_ANDROID_BOOT_IMAGE | ||||||
|  | #define CONFIG_FASTBOOT_BUF_ADDR	CONFIG_SYS_LOAD_ADDR | ||||||
|  | #define CONFIG_FASTBOOT_BUF_SIZE	0x07000000 | ||||||
|  | /* TODO: Check */ | ||||||
|  | 
 | ||||||
| /* To support eMMC booting */ | /* To support eMMC booting */ | ||||||
| #define CONFIG_STORAGE_EMMC | #define CONFIG_STORAGE_EMMC | ||||||
| #define CONFIG_FASTBOOT_FLASH_MMC_DEV   1 | #define CONFIG_FASTBOOT_FLASH_MMC_DEV   1 | ||||||
|  | @ -282,9 +211,6 @@ int eth_phy_timeout(void); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /* Network. */ | /* Network. */ | ||||||
| #define CONFIG_IP_DEFRAG		/* so we can use large tftp blocks */ |  | ||||||
| #define CONFIG_TFTP_TSIZE		/* tftp transfer size, progress bar */ |  | ||||||
| 
 |  | ||||||
| #define CONFIG_PHYLIB | #define CONFIG_PHYLIB | ||||||
| 
 | 
 | ||||||
| /* Ethernet Switch Support */ | /* Ethernet Switch Support */ | ||||||
|  | @ -293,40 +219,26 @@ int eth_phy_timeout(void); | ||||||
| #define CONFIG_MV88E60XX_CPU_PORT	5 | #define CONFIG_MV88E60XX_CPU_PORT	5 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #define CONFIG_CMD_MEMTEST | #define CONFIG_SYS_MEMTEST_START    0x80000000 | ||||||
| #define CONFIG_SYS_MEMTEST_START    0x84000000 |  | ||||||
| #define CONFIG_SYS_MEMTEST_END      0x87900000 | #define CONFIG_SYS_MEMTEST_END      0x87900000 | ||||||
| 
 | 
 | ||||||
| 
 | #if 0 | ||||||
| #ifdef CONFIG_NRSW_BUILD | #define CONFIG_POWER | ||||||
| /* support for NM packed bootloader */ | #define CONFIG_POWER_I2C | ||||||
| #define CONFIG_NM_BOOTLOADER_FORMAT | #define CONFIG_POWER_DA9063	/* TODO: Provide driver */ | ||||||
| 
 |  | ||||||
| /* password protected login */ |  | ||||||
| #define CONFIG_CRYPT |  | ||||||
| #define CONFIG_NM_LOGIN |  | ||||||
| #define CONFIG_NM_LOGIN_PART	"1:3"	/* TODO: Define location of file for OSTree/Yocto */ |  | ||||||
| #define CONFIG_NM_LOGIN_PASSWD	"/root/boot/bootpass" |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define CONFIG_CMD_PXE | #define CONFIG_CMD_PXE | ||||||
| 
 | 
 | ||||||
| #define CONFIG_OF_BOARD_SETUP | #define CONFIG_OF_BOARD_SETUP | ||||||
| 
 | 
 | ||||||
| #define CONFIG_JTAG_MARKER_SPL		0x402FFF00 |  | ||||||
| #define CONFIG_JTAG_MARKER_UBOOT	0x807FFF00 |  | ||||||
| 
 |  | ||||||
| /* NRSW PMIC Reset Reason */ |  | ||||||
| #ifdef CONFIG_NRSW_BUILD |  | ||||||
| #define RESET_REASON_SHM_LOCATION	0x8e000000 |  | ||||||
| #define EXTERNAL_WATCHDOG_PATTERN	0x781f9ce2 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* SPL command is not needed */ | /* SPL command is not needed */ | ||||||
| #undef CONFIG_CMD_SPL | #undef CONFIG_CMD_SPL | ||||||
| 
 | 
 | ||||||
| /* Never enable ISO it is broken and can lead to a crash */ | /* Never enable ISO it is broken and can lead to a crash */ | ||||||
| #undef CONFIG_ISO_PARTITION | #undef CONFIG_ISO_PARTITION | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| #endif	/* ! __CONFIG_AM335X_NRHW20_H */ | #endif	/* ! __CONFIG_AM335X_NRHW20_H */ | ||||||
|  |  | ||||||
|  | @ -1,313 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * am335x_nrhw24.h |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2018-2019 NetModule AG - http://www.netmodule.com/
 |  | ||||||
|  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 |  | ||||||
|  * |  | ||||||
|  * This program is free software; you can redistribute it and/or |  | ||||||
|  * modify it under the terms of the GNU General Public License as |  | ||||||
|  * published by the Free Software Foundation version 2. |  | ||||||
|  * |  | ||||||
|  * This program is distributed "as is" WITHOUT ANY WARRANTY of any |  | ||||||
|  * kind, whether express or implied; without even the implied warranty |  | ||||||
|  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #ifndef __CONFIG_AM335X_NRHW24_H |  | ||||||
| #define __CONFIG_AM335X_NRHW24_H |  | ||||||
| 
 |  | ||||||
| #include <configs/ti_am335x_common.h> |  | ||||||
| 
 |  | ||||||
| /* Disable U-Boot load from filesystems, to save around 10 kB SPL image size */ |  | ||||||
| #ifdef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION |  | ||||||
| # undef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC |  | ||||||
| 
 |  | ||||||
| #undef CONFIG_HW_WATCHDOG |  | ||||||
| #undef CONFIG_OMPAP_WATCHDOG |  | ||||||
| #undef CONFIG_SPL_WATCHDOG_SUPPORT |  | ||||||
| 
 |  | ||||||
| #ifndef CONFIG_SPL_BUILD |  | ||||||
| # define CONFIG_TIMESTAMP |  | ||||||
| # define CONFIG_LZO |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_BOOTM_LEN		(16 << 20) |  | ||||||
| 
 |  | ||||||
| #define MACH_TYPE_TIAM335EVM		3589	/* Until the next sync */ |  | ||||||
| #define CONFIG_MACH_TYPE		MACH_TYPE_TIAM335EVM |  | ||||||
| #define CONFIG_BOARD_LATE_INIT |  | ||||||
| 
 |  | ||||||
| /* TODO: It could be preconsole buffer is not properly working in SPL
 |  | ||||||
|  * Observed lock ups when printing too much text. |  | ||||||
| #define CONFIG_PRE_CONSOLE_BUFFER |  | ||||||
| #define CONFIG_PRE_CON_BUF_ADDR   	0x80000000 |  | ||||||
| #define CONFIG_PRE_CON_BUF_SZ     	64*1024 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| /* Clock Defines */ |  | ||||||
| #define V_OSCK				0 /* 0 means detect from sysboot1 config */ |  | ||||||
| #define V_SCLK				(V_OSCK) |  | ||||||
| 
 |  | ||||||
| #include <config_distro_bootcmd.h> |  | ||||||
| 
 |  | ||||||
| /* Dynamic override for PHY_ANEG_TIMEOUT value */ |  | ||||||
| #ifndef CONFIG_SPL_BUILD |  | ||||||
| # ifndef __ASSEMBLER__ |  | ||||||
| int eth_phy_timeout(void); |  | ||||||
| # endif |  | ||||||
| #endif |  | ||||||
| #define PHY_ANEG_TIMEOUT		eth_phy_timeout() |  | ||||||
| #define PHY_ANEG_DEFAULT_TIMEOUT	5000 |  | ||||||
| 
 |  | ||||||
| #define CONFIG_ARP_TIMEOUT		200 |  | ||||||
| #undef CONFIG_NET_RETRY_COUNT |  | ||||||
| #define CONFIG_NET_RETRY_COUNT		5 |  | ||||||
| #define CONFIG_BOOTP_MAY_FAIL |  | ||||||
| 
 |  | ||||||
| #ifndef CONFIG_SPL_BUILD |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Memory map for booting Linux |  | ||||||
|  * |  | ||||||
|  * 0x80000000   32MB	KERNEL_ADDR (kernel_addr), kernel execution address |  | ||||||
|  * 0x82000000  190MB    KERNEL_ADDR_R (kernel_addr_r), FIT image/kernel loading address |  | ||||||
|  * 			 kernel will be relocated kernel_addr |  | ||||||
|  *                       for FIT images, ramdisc and dtb will be relocated to  |  | ||||||
|  *                       top of bootmemory (0x8e000000 downwards) |  | ||||||
|  * 0x8BE00000    1MB	FDT_ADDR_R (fdt_addr_r), device tree if separate from kernel/FIT |  | ||||||
|  * 0x8BF00000	 1MB	PXE_ADDR (pxefile_addr_r), pxe configuration file (pxe get command) |  | ||||||
|  * 0x8C000000   32MB	LOAD_ADDR (load_addr), loading address for generic files |  | ||||||
|  * <end of boot memory> |  | ||||||
|  * 0x8E000000    4B     NRSW reset reason |  | ||||||
|  *              32MB    <>, Free space |  | ||||||
|  * 0x90000000  256MB	<>, Free space, 512MB systems |  | ||||||
|  * 0xA0000000  512MB	<>, Free space, 1GB systems only |  | ||||||
|  * 0xC0000000		End of RAM |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #define KERNEL_ADDR	"0x80000000" |  | ||||||
| #define KERNEL_ADDR_R	"0x82000000" |  | ||||||
| #define FDT_ADDR_R	"0x8BE00000" |  | ||||||
| #define PXE_ADDR	"0x8BF00000" |  | ||||||
| #define LOAD_ADDR	"0x8C000000" |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Limit boot memory to 256 MBytes to comply with kernel initial memory layout |  | ||||||
|  * This is the official way to restrict image load addresses.  |  | ||||||
|  * Don't use xx_high_addr variables. |  | ||||||
|  */ |  | ||||||
| #define BOOTM_SIZE      "0x0E000000"	 |  | ||||||
| 
 |  | ||||||
| /* Set boot command depending of software environment */ |  | ||||||
| #ifndef CONFIG_NRSW_BUILD |  | ||||||
| /* Yocto/OSTree boot command */ |  | ||||||
| #define MAIN_BOOTCMD "run boot_ostree" |  | ||||||
| #else |  | ||||||
| /* NRSW boot command */ |  | ||||||
| #define MAIN_BOOTCMD "run sdboot" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define CONFIG_EXTRA_ENV_SETTINGS \ |  | ||||||
| 	/* Memory Adresses */ \ |  | ||||||
| 	"fdt_addr_r=" FDT_ADDR_R "\0" \ |  | ||||||
| 	"kernel_addr=" KERNEL_ADDR "\0" /* NRSW only */ \ |  | ||||||
| 	"kernel_addr_r=" KERNEL_ADDR_R  "\0" \ |  | ||||||
| 	"load_addr=" LOAD_ADDR "\0" \ |  | ||||||
| 	"pxefile_addr_r=" PXE_ADDR "\0" \ |  | ||||||
| 	"bootm_size=" BOOTM_SIZE "\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Misc */ \ |  | ||||||
| 	"defaultconsole=ttyS1\0" \ |  | ||||||
| 	"fdt_skip_update=yes\0" \ |  | ||||||
| 	"bootdelay=0\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Networking */ \ |  | ||||||
| 	"ethprime=cpsw\0" \ |  | ||||||
| 	"ethopts=ti_cpsw.rx_packet_max=1526\0" \ |  | ||||||
| 	"ipaddr=192.168.1.1\0" \ |  | ||||||
| 	"serverip=192.168.1.254\0" \ |  | ||||||
| 	"tftptimeout=2000\0" \ |  | ||||||
| 	"tftptimeoutcountmax=5\0" \ |  | ||||||
| 	"bootpretryperiod=10000\0" /* 2000 */ \ |  | ||||||
| 	"autoload=false\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* OSTree boot */ \ |  | ||||||
| 	"bootcmd_otenv=ext4load mmc 1:1 $load_addr /boot/loader/uEnv.txt; " \ |  | ||||||
| 			"setenv bootargs_prev $bootargs; " \ |  | ||||||
| 			"env import -t $load_addr $filesize; setenv bootargs $bootargs_prev $bootargs root=/dev/ram0 console=$defaultconsole,115200 " \ |  | ||||||
| 			"$ethopts rw ostree_root=/dev/mmcblk1p1\0" \ |  | ||||||
| 	"bootcmd_rd_in_mmc=ext4load mmc 1:1 $kernel_addr_r /boot$kernel_image; " \ |  | ||||||
| 			"bootm $kernel_addr_r\0" \ |  | ||||||
| 	"boot_ostree=run shieldcmd; run bootcmd_otenv; run bootcmd_rd_in_mmc\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* NRSW boot */ \ |  | ||||||
| 	"root_part=1\0" /* from NRSW, required here? set from board.c */ \ |  | ||||||
| 	"kernel_image=kernel.bin\0" \ |  | ||||||
| 	"fdt_image=am335x-nmhw24-prod1.dtb\0" /* diff, openwrt-nrhw24-nb801.dtb, not relevant as it will be overwritten */ \ |  | ||||||
| 	"add_sd_bootargs=setenv bootargs $bootargs root=/dev/${mmc_dev}p$root_part rootfstype=ext4 " \ |  | ||||||
| 			"console=$defaultconsole,115200 rootwait loglevel=4 ti_cpsw.rx_packet_max=1526\0" \ |  | ||||||
| 	"add_version_bootargs=setenv bootargs $bootargs\0" \ |  | ||||||
| 	"sdbringup=echo Try bringup boot && ext4load mmc 1:$root_part $kernel_addr /boot/zImage && " \ |  | ||||||
| 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs rw;\0" \ |  | ||||||
| 	"sdprod=ext4load mmc 1:$root_part $kernel_addr /boot/$kernel_image && " \ |  | ||||||
| 			"ext4load mmc 1:$root_part $fdt_addr /boot/$fdt_image && setenv bootargs $bootargs ro;\0" \ |  | ||||||
| 	"sdboot=env set fdt_addr " FDT_ADDR_R "; "\ |  | ||||||
| 			"if mmc dev 1; then echo Copying Linux from SD to RAM...; "\ |  | ||||||
| 			"if test -e mmc 1:$root_part /boot/$kernel_image; then run sdprod; " \ |  | ||||||
| 			"else run sdbringup; fi; " \ |  | ||||||
| 			/* For v4.19 kernel $mmc_dev should be "mmcblk1" (read from DT), for v3.18 kernel: "mmcblk0" */ \ |  | ||||||
| 			"fdt addr $fdt_addr;if fdt get value mmc_dev /nm_env nm,mmc-dev;then;else setenv mmc_dev mmcblk0;fi;" \ |  | ||||||
| 			"run add_sd_bootargs; run add_version_bootargs; run shieldcmd; " \ |  | ||||||
| 			"bootz $kernel_addr - $fdt_addr; fi\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Boot command */ \ |  | ||||||
| 	"bootcmd=" MAIN_BOOTCMD "\0" \ |  | ||||||
| 	\ |  | ||||||
| 	/* Recovery boot (same for OSTree and NRSW) */ \ |  | ||||||
| 	"recovery=run pxe_recovery || setenv ipaddr $ipaddr; setenv serverip $serverip; run tftp_recovery\0" \ |  | ||||||
| 	/* setenv ipaddr and serverip is necessary, because dhclient destroys the IPs internally */ \ |  | ||||||
| 	"pxe_recovery=mdio up $ethprime && dhcp && pxe get && pxe boot\0" \ |  | ||||||
| 	"tftp_recovery=tftpboot $kernel_addr_r recovery-image; tftpboot $fdt_addr_r recovery-dtb; " \ |  | ||||||
| 			"setenv bootargs rdinit=/etc/preinit console=$defaultconsole,115200 " \ |  | ||||||
| 			"debug $ethopts; " \ |  | ||||||
| 			"run shieldcmd; " \ |  | ||||||
| 			"bootz $kernel_addr_r - $fdt_addr_r\0" /* kernel_addr_r */ |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* TODO: Check if ok for NRSW? */ |  | ||||||
| #define CONFIG_ZERO_BOOTDELAY_CHECK |  | ||||||
| 
 |  | ||||||
| /* UART Configuration */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM1			0x44e09000	/* UART0: XModem Boot, Shield */ |  | ||||||
| #define CONFIG_SYS_NS16550_COM2			0x48022000	/* UART1: Debug UART (Internal) */ |  | ||||||
| 
 |  | ||||||
| #define CONFIG_I2C |  | ||||||
| #define CONFIG_I2C_MULTI_BUS |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMD_EEPROM |  | ||||||
| #define CONFIG_SYS_I2C_EEPROM_ADDR              0x50	/* Main EEPROM */ |  | ||||||
| #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN          2 |  | ||||||
| #define CONFIG_SYS_I2C_SPEED                    100000 |  | ||||||
| #define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS       4 |  | ||||||
| #define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS   50	/* TODO: Can this be reduced to 20ms */ |  | ||||||
| 
 |  | ||||||
| /* Put Environment in eMMC */ |  | ||||||
| #define CONFIG_ENV_OFFSET			(512 * 128)	/* @ 512*256 SPL starts */ |  | ||||||
| #define CONFIG_ENV_SIZE				(4 * 1024) |  | ||||||
| #define CONFIG_ENV_IS_IN_MMC |  | ||||||
| #define CONFIG_SYS_MMC_ENV_DEV			1 |  | ||||||
| 
 |  | ||||||
| #undef CONFIG_SPL_ENV_SUPPORT |  | ||||||
| #undef CONFIG_SPL_NAND_SUPPORT |  | ||||||
| #undef CONFIG_SPL_ONENAND_SUPPORT |  | ||||||
| 
 |  | ||||||
| /* We need to disable SPI to not confuse the eeprom env driver */ |  | ||||||
| #undef CONFIG_SPI |  | ||||||
| #undef CONFIG_SPI_BOOT |  | ||||||
| #undef CONFIG_SPL_OS_BOOT |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SPL_YMODEM_SUPPORT |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/am33xx/u-boot-spl.lds" |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SUPPORT_EMMC_BOOT |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * USB configuration.  We enable MUSB support, both for host and for |  | ||||||
|  * gadget.  We set USB0 as peripheral and USB1 as host, based on the |  | ||||||
|  * board schematic and physical port wired to each.  Then for host we |  | ||||||
|  * add mass storage support and for gadget we add both RNDIS ethernet |  | ||||||
|  * and DFU. |  | ||||||
|  */ |  | ||||||
| #define CONFIG_USB_MUSB_DSPS |  | ||||||
| #define CONFIG_ARCH_MISC_INIT |  | ||||||
| #define CONFIG_USB_MUSB_PIO_ONLY |  | ||||||
| #define CONFIG_USB_MUSB_DISABLE_BULK_COMBINE_SPLIT |  | ||||||
| #define CONFIG_AM335X_USB0 |  | ||||||
| #define CONFIG_AM335X_USB0_MODE		MUSB_HOST |  | ||||||
| 
 |  | ||||||
| /* To support eMMC booting */ |  | ||||||
| #define CONFIG_STORAGE_EMMC |  | ||||||
| #define CONFIG_FASTBOOT_FLASH_MMC_DEV   1 |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_USB_MUSB_HOST |  | ||||||
| #define CONFIG_USB_STORAGE |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_USB_MUSB_GADGET |  | ||||||
| /* Removing USB gadget and can be enabled adter adding support usb DM */ |  | ||||||
| #ifndef CONFIG_DM_ETH |  | ||||||
| #define CONFIG_USB_ETHER |  | ||||||
| #define CONFIG_USB_ETH_RNDIS |  | ||||||
| #define CONFIG_USBNET_HOST_ADDR	"de:ad:be:af:00:00" |  | ||||||
| #endif /* CONFIG_DM_ETH */ |  | ||||||
| #endif /* CONFIG_USB_MUSB_GADGET */ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Disable MMC DM for SPL build and can be re-enabled after adding |  | ||||||
|  * DM support in SPL |  | ||||||
|  */ |  | ||||||
| #ifdef CONFIG_SPL_BUILD |  | ||||||
| #undef CONFIG_DM_MMC |  | ||||||
| #undef CONFIG_TIMER |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #if defined(CONFIG_SPL_BUILD) |  | ||||||
| /* Remove other SPL modes. */ |  | ||||||
| #undef CONFIG_SPL_NAND_SUPPORT |  | ||||||
| #define CONFIG_ENV_IS_NOWHERE |  | ||||||
| #undef CONFIG_PARTITION_UUIDS |  | ||||||
| #undef CONFIG_EFI_PARTITION |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /* Network. */ |  | ||||||
| #define CONFIG_IP_DEFRAG		/* so we can use large tftp blocks */ |  | ||||||
| #define CONFIG_TFTP_TSIZE		/* tftp transfer size, progress bar */ |  | ||||||
| 
 |  | ||||||
| #define CONFIG_PHYLIB |  | ||||||
| #define CONFIG_PHY_SMSC |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMD_MEMTEST |  | ||||||
| #define CONFIG_SYS_MEMTEST_START    0x84000000 |  | ||||||
| #define CONFIG_SYS_MEMTEST_END      0x87900000 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_NRSW_BUILD |  | ||||||
| /* support for NM packed bootloader */ |  | ||||||
| #define CONFIG_NM_BOOTLOADER_FORMAT |  | ||||||
| 
 |  | ||||||
| /* password protected login */ |  | ||||||
| #define CONFIG_CRYPT |  | ||||||
| #define CONFIG_NM_LOGIN |  | ||||||
| #define CONFIG_NM_LOGIN_PART	"1:3"	/* TODO: Define location of file for OSTree/Yocto */ |  | ||||||
| #define CONFIG_NM_LOGIN_PASSWD	"/root/boot/bootpass" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMD_PXE |  | ||||||
| 
 |  | ||||||
| #define CONFIG_OF_BOARD_SETUP |  | ||||||
| 
 |  | ||||||
| #define CONFIG_JTAG_MARKER_SPL		0x402FFF00 |  | ||||||
| #define CONFIG_JTAG_MARKER_UBOOT	0x807FFF00 |  | ||||||
| 
 |  | ||||||
| /* NRSW PMIC Reset Reason */ |  | ||||||
| #ifdef CONFIG_NRSW_BUILD |  | ||||||
| #define RESET_REASON_SHM_LOCATION	0x8e000000 |  | ||||||
| #define EXTERNAL_WATCHDOG_PATTERN	0x781f9ce2 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* SPL command is not needed */ |  | ||||||
| #undef CONFIG_CMD_SPL |  | ||||||
| 
 |  | ||||||
| /* Never enable ISO it is broken and can lead to a crash */ |  | ||||||
| #undef CONFIG_ISO_PARTITION |  | ||||||
| 
 |  | ||||||
| #endif	/* ! __CONFIG_AM335X_NRHW24_H */ |  | ||||||
|  | @ -220,7 +220,6 @@ | ||||||
| 
 | 
 | ||||||
| /* RAW SD card / eMMC locations. */ | /* RAW SD card / eMMC locations. */ | ||||||
| #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR	0x300 /* address 0x60000 */ | #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR	0x300 /* address 0x60000 */ | ||||||
| #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR_ALTERNATE 0x1b00 /* address 0x360000  */ |  | ||||||
| #define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS	0x200 /* 256 KB */ | #define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS	0x200 /* 256 KB */ | ||||||
| 
 | 
 | ||||||
| /* FAT sd card locations. */ | /* FAT sd card locations. */ | ||||||
|  |  | ||||||
|  | @ -1,6 +0,0 @@ | ||||||
| #ifndef _CRYPT_H |  | ||||||
| #define _CRYPT_H |  | ||||||
| 
 |  | ||||||
| extern char * sha_crypt(const char *key, const char *salt); |  | ||||||
| 
 |  | ||||||
| #endif /* _CRYPT_H */ |  | ||||||
|  | @ -286,14 +286,6 @@ typedef struct image_header { | ||||||
| 	uint8_t		ih_name[IH_NMLEN];	/* Image Name		*/ | 	uint8_t		ih_name[IH_NMLEN];	/* Image Name		*/ | ||||||
| } image_header_t; | } image_header_t; | ||||||
| 
 | 
 | ||||||
| typedef struct nm_header { |  | ||||||
| 	__be32		nm_start_tag;	/* BLST (0x424c5354) */ |  | ||||||
| 	__be32		nm_version;	/* U-boot version number */ |  | ||||||
| 	__be32		nm_length;	/* U-boot image length */ |  | ||||||
| 	uint8_t		reserved[244];	/* Reserved */ |  | ||||||
| 	struct image_header header; |  | ||||||
| } nm_header_t; |  | ||||||
| 
 |  | ||||||
| typedef struct image_info { | typedef struct image_info { | ||||||
| 	ulong		start, end;		/* start/end of blob */ | 	ulong		start, end;		/* start/end of blob */ | ||||||
| 	ulong		image_start, image_len; /* start of image within blob, len of image */ | 	ulong		image_start, image_len; /* start of image within blob, len of image */ | ||||||
|  |  | ||||||
|  | @ -20,7 +20,6 @@ obj-$(CONFIG_CMD_DHRYSTONE) += dhry/ | ||||||
| 
 | 
 | ||||||
| obj-$(CONFIG_AES) += aes.o | obj-$(CONFIG_AES) += aes.o | ||||||
| obj-$(CONFIG_USB_TTY) += circbuf.o | obj-$(CONFIG_USB_TTY) += circbuf.o | ||||||
| obj-$(CONFIG_CRYPT) += crypt.o |  | ||||||
| obj-y += crc7.o | obj-y += crc7.o | ||||||
| obj-y += crc8.o | obj-y += crc8.o | ||||||
| obj-y += crc16.o | obj-y += crc16.o | ||||||
|  |  | ||||||
							
								
								
									
										371
									
								
								lib/crypt.c
								
								
								
								
							
							
						
						
									
										371
									
								
								lib/crypt.c
								
								
								
								
							|  | @ -1,371 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * The crypt source code was ported from busybox sources pw_crypt, file |  | ||||||
|  * libbb/pw_encrypt_sha.c |  | ||||||
|  * |  | ||||||
|  * 20191108rs: Update to Busybox commit 49ecee0 (Jan 24, 2017) |  | ||||||
|  *             Major cleanup, provide missing functions |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /* SHA256 and SHA512-based Unix crypt implementation.
 |  | ||||||
|  * Released into the Public Domain by Ulrich Drepper <drepper@redhat.com>. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #include <common.h> |  | ||||||
| #include <u-boot/sha256.h> |  | ||||||
| #include <malloc.h> |  | ||||||
| #include <linux/types.h> |  | ||||||
| 
 |  | ||||||
| /* Prefix for optional rounds specification.  */ |  | ||||||
| static const char str_rounds[] = "rounds=%u$"; |  | ||||||
| 
 |  | ||||||
| /* Maximum salt string length.  */ |  | ||||||
| #define SALT_LEN_MAX 16 |  | ||||||
| /* Default number of rounds if not explicitly specified.  */ |  | ||||||
| #define ROUNDS_DEFAULT 5000 |  | ||||||
| /* Minimum number of rounds.  */ |  | ||||||
| #define ROUNDS_MIN 1000 |  | ||||||
| /* Maximum number of rounds.  */ |  | ||||||
| #define ROUNDS_MAX 999999999 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* Missing busybox functions */ |  | ||||||
| 
 |  | ||||||
| static char* to64(char *s, unsigned v, int n) |  | ||||||
| { |  | ||||||
| 	static const uint8_t ascii64[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; |  | ||||||
| 
 |  | ||||||
| 	while (--n >= 0) { |  | ||||||
| 		*s++ = ascii64[v & 0x3f]; |  | ||||||
| 		v >>= 6; |  | ||||||
| 	} |  | ||||||
| 	return s; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void* xzalloc(size_t size) |  | ||||||
| { |  | ||||||
| 	void *ptr = malloc(size); |  | ||||||
| 	/* note: error check left out */ |  | ||||||
| 
 |  | ||||||
| 	memset(ptr, 0, size); |  | ||||||
| 	return ptr; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static char *xstrdup(const char *s) |  | ||||||
| { |  | ||||||
| 	size_t len = strlen (s) + 1; |  | ||||||
| 	char *ret = malloc (len); |  | ||||||
| 	/* note: error check left out */ |  | ||||||
| 
 |  | ||||||
| 	memcpy (ret, s, len); |  | ||||||
| 	return ret; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #if 0 /* currently not required, see note below */
 |  | ||||||
| static char *xstrndup(const char *s, size_t n) |  | ||||||
| { |  | ||||||
| 	char *result; |  | ||||||
| 	size_t len = strlen (s); |  | ||||||
| 
 |  | ||||||
| 	if (n < len) |  | ||||||
| 		len = n; |  | ||||||
| 
 |  | ||||||
| 	printf("allocating %d bytes\n", len+1); |  | ||||||
| 
 |  | ||||||
| 	result = malloc (len + 1); |  | ||||||
| 	/* note: error check left out */ |  | ||||||
| 
 |  | ||||||
| 	result[len] = '\0'; |  | ||||||
| 	memcpy (result, s, len); |  | ||||||
| 	return (char *)result; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| static char *strchrnul(const char *s, int c) |  | ||||||
| { |  | ||||||
| 	while (*s && *s != (char)c) |  | ||||||
| 		s++; |  | ||||||
| 	return (char *)s; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| char *sha_crypt(/*const*/ char *key_data, /*const*/ char *salt_data) |  | ||||||
| { |  | ||||||
| 	void (*sha_begin)(void *ctx); |  | ||||||
| 	void (*sha_hash)(void *ctx, const void *buffer, size_t len); |  | ||||||
| 	void (*sha_end)(void *ctx, void *resbuf); |  | ||||||
| 	int _32or64; |  | ||||||
| 
 |  | ||||||
| 	char *result, *resptr; |  | ||||||
| 
 |  | ||||||
| 	/* btw, sha256 needs [32] and uint32_t only */ |  | ||||||
| 	struct { |  | ||||||
| 		unsigned char alt_result[64]; |  | ||||||
| 		unsigned char temp_result[64]; |  | ||||||
| 		union { |  | ||||||
| 			sha256_context x; |  | ||||||
| /*			sha512_ctx_t y; */ |  | ||||||
| 		} ctx; |  | ||||||
| 		union { |  | ||||||
| 			sha256_context x; |  | ||||||
| /*			sha512_ctx_t y; */ |  | ||||||
| 		} alt_ctx; |  | ||||||
| 	} L; |  | ||||||
| #define alt_result  (L.alt_result ) |  | ||||||
| #define temp_result (L.temp_result) |  | ||||||
| #define ctx         (L.ctx        ) |  | ||||||
| #define alt_ctx     (L.alt_ctx    ) |  | ||||||
| 	unsigned salt_len; |  | ||||||
| 	unsigned key_len; |  | ||||||
| 	unsigned cnt; |  | ||||||
| 	unsigned rounds; |  | ||||||
| 	char *cp; |  | ||||||
| 
 |  | ||||||
| 	/* Analyze salt, construct already known part of result */ |  | ||||||
| 	cnt = strlen(salt_data) + 1 + 43 + 1; |  | ||||||
| 	_32or64 = 32; |  | ||||||
| 	if (salt_data[1] == '6') { /* sha512 */ |  | ||||||
| 		_32or64 *= 2; /*64*/ |  | ||||||
| 		cnt += 43; |  | ||||||
| 		puts("SHA-512 is not supported"); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 	result = resptr = xzalloc(cnt); /* will provide NUL terminator */ |  | ||||||
| 	*resptr++ = '$'; |  | ||||||
| 	*resptr++ = salt_data[1]; |  | ||||||
| 	*resptr++ = '$'; |  | ||||||
| 	rounds = ROUNDS_DEFAULT; |  | ||||||
| 	salt_data += 3; |  | ||||||
| 	if (strncmp(salt_data, str_rounds, 7) == 0) { |  | ||||||
| 		/* 7 == strlen("rounds=") */ |  | ||||||
| 		char *endp; |  | ||||||
| 		cnt = simple_strtoul(salt_data + 7, &endp, 10); |  | ||||||
| 		if (*endp == '$') { |  | ||||||
| 			salt_data = endp + 1; |  | ||||||
| 			rounds = cnt; |  | ||||||
| 			if (rounds < ROUNDS_MIN) |  | ||||||
| 				rounds = ROUNDS_MIN; |  | ||||||
| 			if (rounds > ROUNDS_MAX) |  | ||||||
| 				rounds = ROUNDS_MAX; |  | ||||||
| 			/* add "rounds=NNNNN$" to result */ |  | ||||||
| 			resptr += sprintf(resptr, str_rounds, rounds); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	salt_len = (int)strchrnul(salt_data, '$') - (int)salt_data; |  | ||||||
| 	if (salt_len > SALT_LEN_MAX) |  | ||||||
| 		salt_len = SALT_LEN_MAX; |  | ||||||
| 	/* xstrdup assures suitable alignment; also we will use it
 |  | ||||||
| 	   as a scratch space later. */ |  | ||||||
| 
 |  | ||||||
| 	/* NOTE: Something is wrong here.
 |  | ||||||
| 	 * when <salt_len> bytes are reserved there is a problem later in  |  | ||||||
| 	 * the code and computations are incorrect. |  | ||||||
| 	 * So far it is not clear what the root problem is. |  | ||||||
| 	 * By not truncating the buffer the code works fine |  | ||||||
| 	 */ |  | ||||||
| /*	salt_data = xstrndup(salt_data, salt_len); */ |  | ||||||
| 	salt_data = xstrdup(salt_data); |  | ||||||
| 	/* add "salt$" to result */ |  | ||||||
| 	strcpy(resptr, salt_data); |  | ||||||
| 	resptr += salt_len; |  | ||||||
| 	*resptr++ = '$'; |  | ||||||
| 	/* key data doesn't need much processing */ |  | ||||||
| 	key_len = strlen(key_data); |  | ||||||
| 	key_data = xstrdup(key_data); |  | ||||||
| 
 |  | ||||||
| 	/* Which flavor of SHAnnn ops to use? */ |  | ||||||
| 	sha_begin = (void*)sha256_starts; |  | ||||||
| 	sha_hash = (void*)sha256_update; |  | ||||||
| 	sha_end = (void*)sha256_finish; |  | ||||||
| #if 0 |  | ||||||
| 	/* SHA512 not supported */ |  | ||||||
| 	if (_32or64 != 32) { |  | ||||||
| 		sha_begin = (void*)sha512_begin; |  | ||||||
| 		sha_hash = (void*)sha512_hash; |  | ||||||
| 		sha_end = (void*)sha512_end; |  | ||||||
| 	} |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	/* Add KEY, SALT.  */ |  | ||||||
| 	sha_begin(&ctx); |  | ||||||
| 	sha_hash(&ctx, key_data, key_len); |  | ||||||
| 	sha_hash(&ctx, salt_data, salt_len); |  | ||||||
| 
 |  | ||||||
| 	/* Compute alternate SHA sum with input KEY, SALT, and KEY.
 |  | ||||||
| 	   The final result will be added to the first context.  */ |  | ||||||
| 	sha_begin(&alt_ctx); |  | ||||||
| 	sha_hash(&alt_ctx, key_data, key_len); |  | ||||||
| 	sha_hash(&alt_ctx, salt_data, salt_len); |  | ||||||
| 	sha_hash(&alt_ctx, key_data, key_len); |  | ||||||
| 	sha_end(&alt_ctx, alt_result); |  | ||||||
| 
 |  | ||||||
| 	/* Add result of this to the other context.  */ |  | ||||||
| 	/* Add for any character in the key one byte of the alternate sum.  */ |  | ||||||
| 	for (cnt = key_len; cnt > _32or64; cnt -= _32or64) |  | ||||||
| 		sha_hash(&ctx, alt_result, _32or64); |  | ||||||
| 	sha_hash(&ctx, alt_result, cnt); |  | ||||||
| 
 |  | ||||||
| 	/* Take the binary representation of the length of the key and for every
 |  | ||||||
| 	   1 add the alternate sum, for every 0 the key.  */ |  | ||||||
| 	for (cnt = key_len; cnt != 0; cnt >>= 1) |  | ||||||
| 		if ((cnt & 1) != 0) |  | ||||||
| 			sha_hash(&ctx, alt_result, _32or64); |  | ||||||
| 		else |  | ||||||
| 			sha_hash(&ctx, key_data, key_len); |  | ||||||
| 
 |  | ||||||
| 	/* Create intermediate result.  */ |  | ||||||
| 	sha_end(&ctx, alt_result); |  | ||||||
| 
 |  | ||||||
| 	/* Start computation of P byte sequence.  */ |  | ||||||
| 	/* For every character in the password add the entire password.  */ |  | ||||||
| 	sha_begin(&alt_ctx); |  | ||||||
| 	for (cnt = 0; cnt < key_len; ++cnt) |  | ||||||
| 		sha_hash(&alt_ctx, key_data, key_len); |  | ||||||
| 	sha_end(&alt_ctx, temp_result); |  | ||||||
| 
 |  | ||||||
| 	/* NB: past this point, raw key_data is not used anymore */ |  | ||||||
| 
 |  | ||||||
| 	/* Create byte sequence P.  */ |  | ||||||
| #define p_bytes key_data /* reuse the buffer as it is of the key_len size */ |  | ||||||
| 	cp = p_bytes; /* was: ... = alloca(key_len); */ |  | ||||||
| 	for (cnt = key_len; cnt >= _32or64; cnt -= _32or64) { |  | ||||||
| 		cp = memcpy(cp, temp_result, _32or64); |  | ||||||
| 		cp += _32or64; |  | ||||||
| 	} |  | ||||||
| 	memcpy(cp, temp_result, cnt); |  | ||||||
| 
 |  | ||||||
| 	/* Start computation of S byte sequence.  */ |  | ||||||
| 	/* For every character in the password add the entire password.  */ |  | ||||||
| 	sha_begin(&alt_ctx); |  | ||||||
| 	for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt) |  | ||||||
| 		sha_hash(&alt_ctx, salt_data, salt_len); |  | ||||||
| 	sha_end(&alt_ctx, temp_result); |  | ||||||
| 
 |  | ||||||
| 	/* NB: past this point, raw salt_data is not used anymore */ |  | ||||||
| 
 |  | ||||||
| 	/* Create byte sequence S.  */ |  | ||||||
| #define s_bytes salt_data /* reuse the buffer as it is of the salt_len size */ |  | ||||||
| 	cp = s_bytes; /* was: ... = alloca(salt_len); */ |  | ||||||
| 	for (cnt = salt_len; cnt >= _32or64; cnt -= _32or64) { |  | ||||||
| 		cp = memcpy(cp, temp_result, _32or64); |  | ||||||
| 		cp += _32or64; |  | ||||||
| 	} |  | ||||||
| 	memcpy(cp, temp_result, cnt); |  | ||||||
| 
 |  | ||||||
| 	/* Repeatedly run the collected hash value through SHA to burn
 |  | ||||||
| 	   CPU cycles.  */ |  | ||||||
| 	for (cnt = 0; cnt < rounds; ++cnt) { |  | ||||||
| 		sha_begin(&ctx); |  | ||||||
| 
 |  | ||||||
| 		/* Add key or last result.  */ |  | ||||||
| 		if ((cnt & 1) != 0) |  | ||||||
| 			sha_hash(&ctx, p_bytes, key_len); |  | ||||||
| 		else |  | ||||||
| 			sha_hash(&ctx, alt_result, _32or64); |  | ||||||
| 		/* Add salt for numbers not divisible by 3.  */ |  | ||||||
| 		if (cnt % 3 != 0) |  | ||||||
| 			sha_hash(&ctx, s_bytes, salt_len); |  | ||||||
| 		/* Add key for numbers not divisible by 7.  */ |  | ||||||
| 		if (cnt % 7 != 0) |  | ||||||
| 			sha_hash(&ctx, p_bytes, key_len); |  | ||||||
| 		/* Add key or last result.  */ |  | ||||||
| 		if ((cnt & 1) != 0) |  | ||||||
| 			sha_hash(&ctx, alt_result, _32or64); |  | ||||||
| 		else |  | ||||||
| 			sha_hash(&ctx, p_bytes, key_len); |  | ||||||
| 
 |  | ||||||
| 		sha_end(&ctx, alt_result); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* Append encrypted password to result buffer */ |  | ||||||
| //TODO: replace with something like
 |  | ||||||
| //	bb_uuencode(cp, src, length, bb_uuenc_tbl_XXXbase64);
 |  | ||||||
| #define b64_from_24bit(B2, B1, B0, N) \ |  | ||||||
| do { \ |  | ||||||
| 	unsigned w = ((B2) << 16) | ((B1) << 8) | (B0); \ |  | ||||||
| 	resptr = to64(resptr, w, N); \ |  | ||||||
| } while (0) |  | ||||||
| 	if (_32or64 == 32) { /* sha256 */ |  | ||||||
| 		unsigned i = 0; |  | ||||||
| 		while (1) { |  | ||||||
| 			unsigned j = i + 10; |  | ||||||
| 			unsigned k = i + 20; |  | ||||||
| 			if (j >= 30) j -= 30; |  | ||||||
| 			if (k >= 30) k -= 30; |  | ||||||
| 			b64_from_24bit(alt_result[i], alt_result[j], alt_result[k], 4); |  | ||||||
| 			if (k == 29) |  | ||||||
| 				break; |  | ||||||
| 			i = k + 1; |  | ||||||
| 		} |  | ||||||
| 		b64_from_24bit(0, alt_result[31], alt_result[30], 3); |  | ||||||
| 		/* was:
 |  | ||||||
| 		b64_from_24bit(alt_result[0], alt_result[10], alt_result[20], 4); |  | ||||||
| 		b64_from_24bit(alt_result[21], alt_result[1], alt_result[11], 4); |  | ||||||
| 		b64_from_24bit(alt_result[12], alt_result[22], alt_result[2], 4); |  | ||||||
| 		b64_from_24bit(alt_result[3], alt_result[13], alt_result[23], 4); |  | ||||||
| 		b64_from_24bit(alt_result[24], alt_result[4], alt_result[14], 4); |  | ||||||
| 		b64_from_24bit(alt_result[15], alt_result[25], alt_result[5], 4); |  | ||||||
| 		b64_from_24bit(alt_result[6], alt_result[16], alt_result[26], 4); |  | ||||||
| 		b64_from_24bit(alt_result[27], alt_result[7], alt_result[17], 4); |  | ||||||
| 		b64_from_24bit(alt_result[18], alt_result[28], alt_result[8], 4); |  | ||||||
| 		b64_from_24bit(alt_result[9], alt_result[19], alt_result[29], 4); |  | ||||||
| 		b64_from_24bit(0, alt_result[31], alt_result[30], 3); |  | ||||||
| 		*/ |  | ||||||
| 	} else { |  | ||||||
| 		unsigned i = 0; |  | ||||||
| 		while (1) { |  | ||||||
| 			unsigned j = i + 21; |  | ||||||
| 			unsigned k = i + 42; |  | ||||||
| 			if (j >= 63) j -= 63; |  | ||||||
| 			if (k >= 63) k -= 63; |  | ||||||
| 			b64_from_24bit(alt_result[i], alt_result[j], alt_result[k], 4); |  | ||||||
| 			if (j == 20) |  | ||||||
| 				break; |  | ||||||
| 			i = j + 1; |  | ||||||
| 		} |  | ||||||
| 		b64_from_24bit(0, 0, alt_result[63], 2); |  | ||||||
| 		/* was:
 |  | ||||||
| 		b64_from_24bit(alt_result[0], alt_result[21], alt_result[42], 4); |  | ||||||
| 		b64_from_24bit(alt_result[22], alt_result[43], alt_result[1], 4); |  | ||||||
| 		b64_from_24bit(alt_result[44], alt_result[2], alt_result[23], 4); |  | ||||||
| 		b64_from_24bit(alt_result[3], alt_result[24], alt_result[45], 4); |  | ||||||
| 		b64_from_24bit(alt_result[25], alt_result[46], alt_result[4], 4); |  | ||||||
| 		b64_from_24bit(alt_result[47], alt_result[5], alt_result[26], 4); |  | ||||||
| 		b64_from_24bit(alt_result[6], alt_result[27], alt_result[48], 4); |  | ||||||
| 		b64_from_24bit(alt_result[28], alt_result[49], alt_result[7], 4); |  | ||||||
| 		b64_from_24bit(alt_result[50], alt_result[8], alt_result[29], 4); |  | ||||||
| 		b64_from_24bit(alt_result[9], alt_result[30], alt_result[51], 4); |  | ||||||
| 		b64_from_24bit(alt_result[31], alt_result[52], alt_result[10], 4); |  | ||||||
| 		b64_from_24bit(alt_result[53], alt_result[11], alt_result[32], 4); |  | ||||||
| 		b64_from_24bit(alt_result[12], alt_result[33], alt_result[54], 4); |  | ||||||
| 		b64_from_24bit(alt_result[34], alt_result[55], alt_result[13], 4); |  | ||||||
| 		b64_from_24bit(alt_result[56], alt_result[14], alt_result[35], 4); |  | ||||||
| 		b64_from_24bit(alt_result[15], alt_result[36], alt_result[57], 4); |  | ||||||
| 		b64_from_24bit(alt_result[37], alt_result[58], alt_result[16], 4); |  | ||||||
| 		b64_from_24bit(alt_result[59], alt_result[17], alt_result[38], 4); |  | ||||||
| 		b64_from_24bit(alt_result[18], alt_result[39], alt_result[60], 4); |  | ||||||
| 		b64_from_24bit(alt_result[40], alt_result[61], alt_result[19], 4); |  | ||||||
| 		b64_from_24bit(alt_result[62], alt_result[20], alt_result[41], 4); |  | ||||||
| 		b64_from_24bit(0, 0, alt_result[63], 2); |  | ||||||
| 		*/ |  | ||||||
| 	} |  | ||||||
| 	/* *resptr = '\0'; - xzalloc did it */ |  | ||||||
| #undef b64_from_24bit |  | ||||||
| 
 |  | ||||||
| 	/* Clear the buffer for the intermediate result so that people
 |  | ||||||
| 	   attaching to processes or reading core dumps cannot get any |  | ||||||
| 	   information.  */ |  | ||||||
| 	memset(&L, 0, sizeof(L)); /* [alt]_ctx and XXX_result buffers */ |  | ||||||
| 	memset(key_data, 0, key_len); /* also p_bytes */ |  | ||||||
| 	memset(salt_data, 0, salt_len); /* also s_bytes */ |  | ||||||
| 	free(key_data); |  | ||||||
| 	free(salt_data); |  | ||||||
| #undef p_bytes |  | ||||||
| #undef s_bytes |  | ||||||
| 
 |  | ||||||
| 	return result; |  | ||||||
| #undef alt_result |  | ||||||
| #undef temp_result |  | ||||||
| #undef ctx |  | ||||||
| #undef alt_ctx |  | ||||||
| } |  | ||||||
|  | @ -13,25 +13,6 @@ | ||||||
| #include <linux/ctype.h> | #include <linux/ctype.h> | ||||||
| #include <asm/io.h> | #include <asm/io.h> | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_NRSW_BUILD |  | ||||||
| #include <version_autogenerated.h> |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_NRSW_BUILD |  | ||||||
| 
 |  | ||||||
| int display_options (void) |  | ||||||
| { |  | ||||||
| 	printf ("\n\n%s\n", UBOOT_VERSION); |  | ||||||
| #if defined(BUILD_TAG) |  | ||||||
| 	printf ("%s, Build: %s\n\n", version_string, BUILD_TAG); |  | ||||||
| #else |  | ||||||
| 	printf ("%s\n\n", version_string); |  | ||||||
| #endif |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #else /* CONFIG_NRSW_BUILD */ |  | ||||||
| 
 |  | ||||||
| int display_options (void) | int display_options (void) | ||||||
| { | { | ||||||
| #if defined(BUILD_TAG) | #if defined(BUILD_TAG) | ||||||
|  | @ -42,8 +23,6 @@ int display_options (void) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #endif /* CONFIG_NRSW_BUILD */ |  | ||||||
| 
 |  | ||||||
| void print_freq(uint64_t freq, const char *s) | void print_freq(uint64_t freq, const char *s) | ||||||
| { | { | ||||||
| 	unsigned long m = 0; | 	unsigned long m = 0; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue