lantiq: drop lzma-loader
It isn't used any more. Signed-off-by: Mathias Kresin <dev@kresin.me>
This commit is contained in:
		| @@ -1,65 +0,0 @@ | ||||
| # | ||||
| # Copyright (C) 2011 OpenWrt.org | ||||
| # Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||||
| # | ||||
| # This is free software, licensed under the GNU General Public License v2. | ||||
| # See /LICENSE for more information. | ||||
| # | ||||
|  | ||||
| include $(TOPDIR)/rules.mk | ||||
|  | ||||
| LZMA_TEXT_START	:= 0x80a00000 | ||||
| LOADER		:= loader.bin | ||||
| LOADER_NAME	:= $(basename $(notdir $(LOADER))) | ||||
| LOADER_DATA 	:= | ||||
| TARGET_DIR	:= | ||||
| FLASH_OFFS	:= | ||||
| FLASH_MAX	:= | ||||
| BOARD		:= | ||||
|  | ||||
| ifeq ($(TARGET_DIR),) | ||||
| TARGET_DIR	:= $(KDIR) | ||||
| endif | ||||
|  | ||||
| LOADER_BIN	:= $(TARGET_DIR)/$(LOADER_NAME).bin | ||||
| LOADER_GZ	:= $(TARGET_DIR)/$(LOADER_NAME).gz | ||||
| LOADER_ELF	:= $(TARGET_DIR)/$(LOADER_NAME).elf | ||||
|  | ||||
| PKG_NAME := lzma-loader | ||||
| PKG_BUILD_DIR := $(KDIR)/$(PKG_NAME) | ||||
|  | ||||
| .PHONY : loader-compile loader.bin loader.elf loader.gz | ||||
|  | ||||
| $(PKG_BUILD_DIR)/.prepared: | ||||
| 	mkdir $(PKG_BUILD_DIR) | ||||
| 	$(CP) ./src/* $(PKG_BUILD_DIR)/ | ||||
| 	touch $@ | ||||
|  | ||||
| loader-compile: $(PKG_BUILD_DIR)/.prepared | ||||
| 	$(MAKE) -C $(PKG_BUILD_DIR) CROSS_COMPILE="$(TARGET_CROSS)" \ | ||||
| 		LZMA_TEXT_START=$(LZMA_TEXT_START) \ | ||||
| 		LOADER_DATA=$(LOADER_DATA) \ | ||||
| 		FLASH_OFFS=$(FLASH_OFFS) \ | ||||
| 		FLASH_MAX=$(FLASH_MAX) \ | ||||
| 		BOARD="$(BOARD)" \ | ||||
| 		PLATFORM="lantiq" \ | ||||
| 		clean all | ||||
|  | ||||
| loader.gz: $(PKG_BUILD_DIR)/loader.bin | ||||
| 	gzip -nc9 $< > $(LOADER_GZ) | ||||
|  | ||||
| loader.elf: $(PKG_BUILD_DIR)/loader.elf | ||||
| 	$(CP) $< $(LOADER_ELF) | ||||
|  | ||||
| loader.bin: $(PKG_BUILD_DIR)/loader.bin | ||||
| 	$(CP) $< $(LOADER_BIN) | ||||
|  | ||||
| download: | ||||
| prepare: $(PKG_BUILD_DIR)/.prepared | ||||
| compile: loader-compile | ||||
|  | ||||
| install: | ||||
|  | ||||
| clean: | ||||
| 	rm -rf $(PKG_BUILD_DIR) | ||||
|  | ||||
| @@ -1,584 +0,0 @@ | ||||
| /* | ||||
|   LzmaDecode.c | ||||
|   LZMA Decoder (optimized for Speed version) | ||||
|    | ||||
|   LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) | ||||
|   http://www.7-zip.org/ | ||||
|  | ||||
|   LZMA SDK is licensed under two licenses: | ||||
|   1) GNU Lesser General Public License (GNU LGPL) | ||||
|   2) Common Public License (CPL) | ||||
|   It means that you can select one of these two licenses and  | ||||
|   follow rules of that license. | ||||
|  | ||||
|   SPECIAL EXCEPTION: | ||||
|   Igor Pavlov, as the author of this Code, expressly permits you to  | ||||
|   statically or dynamically link your Code (or bind by name) to the  | ||||
|   interfaces of this file without subjecting your linked Code to the  | ||||
|   terms of the CPL or GNU LGPL. Any modifications or additions  | ||||
|   to this file, however, are subject to the LGPL or CPL terms. | ||||
| */ | ||||
|  | ||||
| #include "LzmaDecode.h" | ||||
|  | ||||
| #define kNumTopBits 24 | ||||
| #define kTopValue ((UInt32)1 << kNumTopBits) | ||||
|  | ||||
| #define kNumBitModelTotalBits 11 | ||||
| #define kBitModelTotal (1 << kNumBitModelTotalBits) | ||||
| #define kNumMoveBits 5 | ||||
|  | ||||
| #define RC_READ_BYTE (*Buffer++) | ||||
|  | ||||
| #define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \ | ||||
|   { int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }} | ||||
|  | ||||
| #ifdef _LZMA_IN_CB | ||||
|  | ||||
| #define RC_TEST { if (Buffer == BufferLim) \ | ||||
|   { SizeT size; int result = InCallback->Read(InCallback, &Buffer, &size); if (result != LZMA_RESULT_OK) return result; \ | ||||
|   BufferLim = Buffer + size; if (size == 0) return LZMA_RESULT_DATA_ERROR; }} | ||||
|  | ||||
| #define RC_INIT Buffer = BufferLim = 0; RC_INIT2 | ||||
|  | ||||
| #else | ||||
|  | ||||
| #define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; } | ||||
|  | ||||
| #define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2 | ||||
|   | ||||
| #endif | ||||
|  | ||||
| #define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; } | ||||
|  | ||||
| #define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound) | ||||
| #define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits; | ||||
| #define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits; | ||||
|  | ||||
| #define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \ | ||||
|   { UpdateBit0(p); mi <<= 1; A0; } else \ | ||||
|   { UpdateBit1(p); mi = (mi + mi) + 1; A1; }  | ||||
|    | ||||
| #define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;)                | ||||
|  | ||||
| #define RangeDecoderBitTreeDecode(probs, numLevels, res) \ | ||||
|   { int i = numLevels; res = 1; \ | ||||
|   do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \ | ||||
|   res -= (1 << numLevels); } | ||||
|  | ||||
|  | ||||
| #define kNumPosBitsMax 4 | ||||
| #define kNumPosStatesMax (1 << kNumPosBitsMax) | ||||
|  | ||||
| #define kLenNumLowBits 3 | ||||
| #define kLenNumLowSymbols (1 << kLenNumLowBits) | ||||
| #define kLenNumMidBits 3 | ||||
| #define kLenNumMidSymbols (1 << kLenNumMidBits) | ||||
| #define kLenNumHighBits 8 | ||||
| #define kLenNumHighSymbols (1 << kLenNumHighBits) | ||||
|  | ||||
| #define LenChoice 0 | ||||
| #define LenChoice2 (LenChoice + 1) | ||||
| #define LenLow (LenChoice2 + 1) | ||||
| #define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) | ||||
| #define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) | ||||
| #define kNumLenProbs (LenHigh + kLenNumHighSymbols)  | ||||
|  | ||||
|  | ||||
| #define kNumStates 12 | ||||
| #define kNumLitStates 7 | ||||
|  | ||||
| #define kStartPosModelIndex 4 | ||||
| #define kEndPosModelIndex 14 | ||||
| #define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) | ||||
|  | ||||
| #define kNumPosSlotBits 6 | ||||
| #define kNumLenToPosStates 4 | ||||
|  | ||||
| #define kNumAlignBits 4 | ||||
| #define kAlignTableSize (1 << kNumAlignBits) | ||||
|  | ||||
| #define kMatchMinLen 2 | ||||
|  | ||||
| #define IsMatch 0 | ||||
| #define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) | ||||
| #define IsRepG0 (IsRep + kNumStates) | ||||
| #define IsRepG1 (IsRepG0 + kNumStates) | ||||
| #define IsRepG2 (IsRepG1 + kNumStates) | ||||
| #define IsRep0Long (IsRepG2 + kNumStates) | ||||
| #define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) | ||||
| #define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) | ||||
| #define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) | ||||
| #define LenCoder (Align + kAlignTableSize) | ||||
| #define RepLenCoder (LenCoder + kNumLenProbs) | ||||
| #define Literal (RepLenCoder + kNumLenProbs) | ||||
|  | ||||
| #if Literal != LZMA_BASE_SIZE | ||||
| StopCompilingDueBUG | ||||
| #endif | ||||
|  | ||||
| int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size) | ||||
| { | ||||
|   unsigned char prop0; | ||||
|   if (size < LZMA_PROPERTIES_SIZE) | ||||
|     return LZMA_RESULT_DATA_ERROR; | ||||
|   prop0 = propsData[0]; | ||||
|   if (prop0 >= (9 * 5 * 5)) | ||||
|     return LZMA_RESULT_DATA_ERROR; | ||||
|   { | ||||
|     for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5)); | ||||
|     for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9); | ||||
|     propsRes->lc = prop0; | ||||
|     /* | ||||
|     unsigned char remainder = (unsigned char)(prop0 / 9); | ||||
|     propsRes->lc = prop0 % 9; | ||||
|     propsRes->pb = remainder / 5; | ||||
|     propsRes->lp = remainder % 5; | ||||
|     */ | ||||
|   } | ||||
|  | ||||
|   #ifdef _LZMA_OUT_READ | ||||
|   { | ||||
|     int i; | ||||
|     propsRes->DictionarySize = 0; | ||||
|     for (i = 0; i < 4; i++) | ||||
|       propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8); | ||||
|     if (propsRes->DictionarySize == 0) | ||||
|       propsRes->DictionarySize = 1; | ||||
|   } | ||||
|   #endif | ||||
|   return LZMA_RESULT_OK; | ||||
| } | ||||
|  | ||||
| #define kLzmaStreamWasFinishedId (-1) | ||||
|  | ||||
| int LzmaDecode(CLzmaDecoderState *vs, | ||||
|     #ifdef _LZMA_IN_CB | ||||
|     ILzmaInCallback *InCallback, | ||||
|     #else | ||||
|     const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, | ||||
|     #endif | ||||
|     unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed) | ||||
| { | ||||
|   CProb *p = vs->Probs; | ||||
|   SizeT nowPos = 0; | ||||
|   Byte previousByte = 0; | ||||
|   UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1; | ||||
|   UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1; | ||||
|   int lc = vs->Properties.lc; | ||||
|  | ||||
|   #ifdef _LZMA_OUT_READ | ||||
|    | ||||
|   UInt32 Range = vs->Range; | ||||
|   UInt32 Code = vs->Code; | ||||
|   #ifdef _LZMA_IN_CB | ||||
|   const Byte *Buffer = vs->Buffer; | ||||
|   const Byte *BufferLim = vs->BufferLim; | ||||
|   #else | ||||
|   const Byte *Buffer = inStream; | ||||
|   const Byte *BufferLim = inStream + inSize; | ||||
|   #endif | ||||
|   int state = vs->State; | ||||
|   UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3]; | ||||
|   int len = vs->RemainLen; | ||||
|   UInt32 globalPos = vs->GlobalPos; | ||||
|   UInt32 distanceLimit = vs->DistanceLimit; | ||||
|  | ||||
|   Byte *dictionary = vs->Dictionary; | ||||
|   UInt32 dictionarySize = vs->Properties.DictionarySize; | ||||
|   UInt32 dictionaryPos = vs->DictionaryPos; | ||||
|  | ||||
|   Byte tempDictionary[4]; | ||||
|  | ||||
|   #ifndef _LZMA_IN_CB | ||||
|   *inSizeProcessed = 0; | ||||
|   #endif | ||||
|   *outSizeProcessed = 0; | ||||
|   if (len == kLzmaStreamWasFinishedId) | ||||
|     return LZMA_RESULT_OK; | ||||
|  | ||||
|   if (dictionarySize == 0) | ||||
|   { | ||||
|     dictionary = tempDictionary; | ||||
|     dictionarySize = 1; | ||||
|     tempDictionary[0] = vs->TempDictionary[0]; | ||||
|   } | ||||
|  | ||||
|   if (len == kLzmaNeedInitId) | ||||
|   { | ||||
|     { | ||||
|       UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); | ||||
|       UInt32 i; | ||||
|       for (i = 0; i < numProbs; i++) | ||||
|         p[i] = kBitModelTotal >> 1;  | ||||
|       rep0 = rep1 = rep2 = rep3 = 1; | ||||
|       state = 0; | ||||
|       globalPos = 0; | ||||
|       distanceLimit = 0; | ||||
|       dictionaryPos = 0; | ||||
|       dictionary[dictionarySize - 1] = 0; | ||||
|       #ifdef _LZMA_IN_CB | ||||
|       RC_INIT; | ||||
|       #else | ||||
|       RC_INIT(inStream, inSize); | ||||
|       #endif | ||||
|     } | ||||
|     len = 0; | ||||
|   } | ||||
|   while(len != 0 && nowPos < outSize) | ||||
|   { | ||||
|     UInt32 pos = dictionaryPos - rep0; | ||||
|     if (pos >= dictionarySize) | ||||
|       pos += dictionarySize; | ||||
|     outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos]; | ||||
|     if (++dictionaryPos == dictionarySize) | ||||
|       dictionaryPos = 0; | ||||
|     len--; | ||||
|   } | ||||
|   if (dictionaryPos == 0) | ||||
|     previousByte = dictionary[dictionarySize - 1]; | ||||
|   else | ||||
|     previousByte = dictionary[dictionaryPos - 1]; | ||||
|  | ||||
|   #else /* if !_LZMA_OUT_READ */ | ||||
|  | ||||
|   int state = 0; | ||||
|   UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1; | ||||
|   int len = 0; | ||||
|   const Byte *Buffer; | ||||
|   const Byte *BufferLim; | ||||
|   UInt32 Range; | ||||
|   UInt32 Code; | ||||
|  | ||||
|   #ifndef _LZMA_IN_CB | ||||
|   *inSizeProcessed = 0; | ||||
|   #endif | ||||
|   *outSizeProcessed = 0; | ||||
|  | ||||
|   { | ||||
|     UInt32 i; | ||||
|     UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); | ||||
|     for (i = 0; i < numProbs; i++) | ||||
|       p[i] = kBitModelTotal >> 1; | ||||
|   } | ||||
|    | ||||
|   #ifdef _LZMA_IN_CB | ||||
|   RC_INIT; | ||||
|   #else | ||||
|   RC_INIT(inStream, inSize); | ||||
|   #endif | ||||
|  | ||||
|   #endif /* _LZMA_OUT_READ */ | ||||
|  | ||||
|   while(nowPos < outSize) | ||||
|   { | ||||
|     CProb *prob; | ||||
|     UInt32 bound; | ||||
|     int posState = (int)( | ||||
|         (nowPos  | ||||
|         #ifdef _LZMA_OUT_READ | ||||
|         + globalPos | ||||
|         #endif | ||||
|         ) | ||||
|         & posStateMask); | ||||
|  | ||||
|     prob = p + IsMatch + (state << kNumPosBitsMax) + posState; | ||||
|     IfBit0(prob) | ||||
|     { | ||||
|       int symbol = 1; | ||||
|       UpdateBit0(prob) | ||||
|       prob = p + Literal + (LZMA_LIT_SIZE *  | ||||
|         ((( | ||||
|         (nowPos  | ||||
|         #ifdef _LZMA_OUT_READ | ||||
|         + globalPos | ||||
|         #endif | ||||
|         ) | ||||
|         & literalPosMask) << lc) + (previousByte >> (8 - lc)))); | ||||
|  | ||||
|       if (state >= kNumLitStates) | ||||
|       { | ||||
|         int matchByte; | ||||
|         #ifdef _LZMA_OUT_READ | ||||
|         UInt32 pos = dictionaryPos - rep0; | ||||
|         if (pos >= dictionarySize) | ||||
|           pos += dictionarySize; | ||||
|         matchByte = dictionary[pos]; | ||||
|         #else | ||||
|         matchByte = outStream[nowPos - rep0]; | ||||
|         #endif | ||||
|         do | ||||
|         { | ||||
|           int bit; | ||||
|           CProb *probLit; | ||||
|           matchByte <<= 1; | ||||
|           bit = (matchByte & 0x100); | ||||
|           probLit = prob + 0x100 + bit + symbol; | ||||
|           RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break) | ||||
|         } | ||||
|         while (symbol < 0x100); | ||||
|       } | ||||
|       while (symbol < 0x100) | ||||
|       { | ||||
|         CProb *probLit = prob + symbol; | ||||
|         RC_GET_BIT(probLit, symbol) | ||||
|       } | ||||
|       previousByte = (Byte)symbol; | ||||
|  | ||||
|       outStream[nowPos++] = previousByte; | ||||
|       #ifdef _LZMA_OUT_READ | ||||
|       if (distanceLimit < dictionarySize) | ||||
|         distanceLimit++; | ||||
|  | ||||
|       dictionary[dictionaryPos] = previousByte; | ||||
|       if (++dictionaryPos == dictionarySize) | ||||
|         dictionaryPos = 0; | ||||
|       #endif | ||||
|       if (state < 4) state = 0; | ||||
|       else if (state < 10) state -= 3; | ||||
|       else state -= 6; | ||||
|     } | ||||
|     else              | ||||
|     { | ||||
|       UpdateBit1(prob); | ||||
|       prob = p + IsRep + state; | ||||
|       IfBit0(prob) | ||||
|       { | ||||
|         UpdateBit0(prob); | ||||
|         rep3 = rep2; | ||||
|         rep2 = rep1; | ||||
|         rep1 = rep0; | ||||
|         state = state < kNumLitStates ? 0 : 3; | ||||
|         prob = p + LenCoder; | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|         UpdateBit1(prob); | ||||
|         prob = p + IsRepG0 + state; | ||||
|         IfBit0(prob) | ||||
|         { | ||||
|           UpdateBit0(prob); | ||||
|           prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState; | ||||
|           IfBit0(prob) | ||||
|           { | ||||
|             #ifdef _LZMA_OUT_READ | ||||
|             UInt32 pos; | ||||
|             #endif | ||||
|             UpdateBit0(prob); | ||||
|              | ||||
|             #ifdef _LZMA_OUT_READ | ||||
|             if (distanceLimit == 0) | ||||
|             #else | ||||
|             if (nowPos == 0) | ||||
|             #endif | ||||
|               return LZMA_RESULT_DATA_ERROR; | ||||
|              | ||||
|             state = state < kNumLitStates ? 9 : 11; | ||||
|             #ifdef _LZMA_OUT_READ | ||||
|             pos = dictionaryPos - rep0; | ||||
|             if (pos >= dictionarySize) | ||||
|               pos += dictionarySize; | ||||
|             previousByte = dictionary[pos]; | ||||
|             dictionary[dictionaryPos] = previousByte; | ||||
|             if (++dictionaryPos == dictionarySize) | ||||
|               dictionaryPos = 0; | ||||
|             #else | ||||
|             previousByte = outStream[nowPos - rep0]; | ||||
|             #endif | ||||
|             outStream[nowPos++] = previousByte; | ||||
|             #ifdef _LZMA_OUT_READ | ||||
|             if (distanceLimit < dictionarySize) | ||||
|               distanceLimit++; | ||||
|             #endif | ||||
|  | ||||
|             continue; | ||||
|           } | ||||
|           else | ||||
|           { | ||||
|             UpdateBit1(prob); | ||||
|           } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|           UInt32 distance; | ||||
|           UpdateBit1(prob); | ||||
|           prob = p + IsRepG1 + state; | ||||
|           IfBit0(prob) | ||||
|           { | ||||
|             UpdateBit0(prob); | ||||
|             distance = rep1; | ||||
|           } | ||||
|           else  | ||||
|           { | ||||
|             UpdateBit1(prob); | ||||
|             prob = p + IsRepG2 + state; | ||||
|             IfBit0(prob) | ||||
|             { | ||||
|               UpdateBit0(prob); | ||||
|               distance = rep2; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|               UpdateBit1(prob); | ||||
|               distance = rep3; | ||||
|               rep3 = rep2; | ||||
|             } | ||||
|             rep2 = rep1; | ||||
|           } | ||||
|           rep1 = rep0; | ||||
|           rep0 = distance; | ||||
|         } | ||||
|         state = state < kNumLitStates ? 8 : 11; | ||||
|         prob = p + RepLenCoder; | ||||
|       } | ||||
|       { | ||||
|         int numBits, offset; | ||||
|         CProb *probLen = prob + LenChoice; | ||||
|         IfBit0(probLen) | ||||
|         { | ||||
|           UpdateBit0(probLen); | ||||
|           probLen = prob + LenLow + (posState << kLenNumLowBits); | ||||
|           offset = 0; | ||||
|           numBits = kLenNumLowBits; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|           UpdateBit1(probLen); | ||||
|           probLen = prob + LenChoice2; | ||||
|           IfBit0(probLen) | ||||
|           { | ||||
|             UpdateBit0(probLen); | ||||
|             probLen = prob + LenMid + (posState << kLenNumMidBits); | ||||
|             offset = kLenNumLowSymbols; | ||||
|             numBits = kLenNumMidBits; | ||||
|           } | ||||
|           else | ||||
|           { | ||||
|             UpdateBit1(probLen); | ||||
|             probLen = prob + LenHigh; | ||||
|             offset = kLenNumLowSymbols + kLenNumMidSymbols; | ||||
|             numBits = kLenNumHighBits; | ||||
|           } | ||||
|         } | ||||
|         RangeDecoderBitTreeDecode(probLen, numBits, len); | ||||
|         len += offset; | ||||
|       } | ||||
|  | ||||
|       if (state < 4) | ||||
|       { | ||||
|         int posSlot; | ||||
|         state += kNumLitStates; | ||||
|         prob = p + PosSlot + | ||||
|             ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) <<  | ||||
|             kNumPosSlotBits); | ||||
|         RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot); | ||||
|         if (posSlot >= kStartPosModelIndex) | ||||
|         { | ||||
|           int numDirectBits = ((posSlot >> 1) - 1); | ||||
|           rep0 = (2 | ((UInt32)posSlot & 1)); | ||||
|           if (posSlot < kEndPosModelIndex) | ||||
|           { | ||||
|             rep0 <<= numDirectBits; | ||||
|             prob = p + SpecPos + rep0 - posSlot - 1; | ||||
|           } | ||||
|           else | ||||
|           { | ||||
|             numDirectBits -= kNumAlignBits; | ||||
|             do | ||||
|             { | ||||
|               RC_NORMALIZE | ||||
|               Range >>= 1; | ||||
|               rep0 <<= 1; | ||||
|               if (Code >= Range) | ||||
|               { | ||||
|                 Code -= Range; | ||||
|                 rep0 |= 1; | ||||
|               } | ||||
|             } | ||||
|             while (--numDirectBits != 0); | ||||
|             prob = p + Align; | ||||
|             rep0 <<= kNumAlignBits; | ||||
|             numDirectBits = kNumAlignBits; | ||||
|           } | ||||
|           { | ||||
|             int i = 1; | ||||
|             int mi = 1; | ||||
|             do | ||||
|             { | ||||
|               CProb *prob3 = prob + mi; | ||||
|               RC_GET_BIT2(prob3, mi, ; , rep0 |= i); | ||||
|               i <<= 1; | ||||
|             } | ||||
|             while(--numDirectBits != 0); | ||||
|           } | ||||
|         } | ||||
|         else | ||||
|           rep0 = posSlot; | ||||
|         if (++rep0 == (UInt32)(0)) | ||||
|         { | ||||
|           /* it's for stream version */ | ||||
|           len = kLzmaStreamWasFinishedId; | ||||
|           break; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       len += kMatchMinLen; | ||||
|       #ifdef _LZMA_OUT_READ | ||||
|       if (rep0 > distanceLimit)  | ||||
|       #else | ||||
|       if (rep0 > nowPos) | ||||
|       #endif | ||||
|         return LZMA_RESULT_DATA_ERROR; | ||||
|  | ||||
|       #ifdef _LZMA_OUT_READ | ||||
|       if (dictionarySize - distanceLimit > (UInt32)len) | ||||
|         distanceLimit += len; | ||||
|       else | ||||
|         distanceLimit = dictionarySize; | ||||
|       #endif | ||||
|  | ||||
|       do | ||||
|       { | ||||
|         #ifdef _LZMA_OUT_READ | ||||
|         UInt32 pos = dictionaryPos - rep0; | ||||
|         if (pos >= dictionarySize) | ||||
|           pos += dictionarySize; | ||||
|         previousByte = dictionary[pos]; | ||||
|         dictionary[dictionaryPos] = previousByte; | ||||
|         if (++dictionaryPos == dictionarySize) | ||||
|           dictionaryPos = 0; | ||||
|         #else | ||||
|         previousByte = outStream[nowPos - rep0]; | ||||
|         #endif | ||||
|         len--; | ||||
|         outStream[nowPos++] = previousByte; | ||||
|       } | ||||
|       while(len != 0 && nowPos < outSize); | ||||
|     } | ||||
|   } | ||||
|   RC_NORMALIZE; | ||||
|  | ||||
|   #ifdef _LZMA_OUT_READ | ||||
|   vs->Range = Range; | ||||
|   vs->Code = Code; | ||||
|   vs->DictionaryPos = dictionaryPos; | ||||
|   vs->GlobalPos = globalPos + (UInt32)nowPos; | ||||
|   vs->DistanceLimit = distanceLimit; | ||||
|   vs->Reps[0] = rep0; | ||||
|   vs->Reps[1] = rep1; | ||||
|   vs->Reps[2] = rep2; | ||||
|   vs->Reps[3] = rep3; | ||||
|   vs->State = state; | ||||
|   vs->RemainLen = len; | ||||
|   vs->TempDictionary[0] = tempDictionary[0]; | ||||
|   #endif | ||||
|  | ||||
|   #ifdef _LZMA_IN_CB | ||||
|   vs->Buffer = Buffer; | ||||
|   vs->BufferLim = BufferLim; | ||||
|   #else | ||||
|   *inSizeProcessed = (SizeT)(Buffer - inStream); | ||||
|   #endif | ||||
|   *outSizeProcessed = nowPos; | ||||
|   return LZMA_RESULT_OK; | ||||
| } | ||||
| @@ -1,113 +0,0 @@ | ||||
| /*  | ||||
|   LzmaDecode.h | ||||
|   LZMA Decoder interface | ||||
|  | ||||
|   LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) | ||||
|   http://www.7-zip.org/ | ||||
|  | ||||
|   LZMA SDK is licensed under two licenses: | ||||
|   1) GNU Lesser General Public License (GNU LGPL) | ||||
|   2) Common Public License (CPL) | ||||
|   It means that you can select one of these two licenses and  | ||||
|   follow rules of that license. | ||||
|  | ||||
|   SPECIAL EXCEPTION: | ||||
|   Igor Pavlov, as the author of this code, expressly permits you to  | ||||
|   statically or dynamically link your code (or bind by name) to the  | ||||
|   interfaces of this file without subjecting your linked code to the  | ||||
|   terms of the CPL or GNU LGPL. Any modifications or additions  | ||||
|   to this file, however, are subject to the LGPL or CPL terms. | ||||
| */ | ||||
|  | ||||
| #ifndef __LZMADECODE_H | ||||
| #define __LZMADECODE_H | ||||
|  | ||||
| #include "LzmaTypes.h" | ||||
|  | ||||
| /* #define _LZMA_IN_CB */ | ||||
| /* Use callback for input data */ | ||||
|  | ||||
| /* #define _LZMA_OUT_READ */ | ||||
| /* Use read function for output data */ | ||||
|  | ||||
| /* #define _LZMA_PROB32 */ | ||||
| /* It can increase speed on some 32-bit CPUs,  | ||||
|    but memory usage will be doubled in that case */ | ||||
|  | ||||
| /* #define _LZMA_LOC_OPT */ | ||||
| /* Enable local speed optimizations inside code */ | ||||
|  | ||||
| #ifdef _LZMA_PROB32 | ||||
| #define CProb UInt32 | ||||
| #else | ||||
| #define CProb UInt16 | ||||
| #endif | ||||
|  | ||||
| #define LZMA_RESULT_OK 0 | ||||
| #define LZMA_RESULT_DATA_ERROR 1 | ||||
|  | ||||
| #ifdef _LZMA_IN_CB | ||||
| typedef struct _ILzmaInCallback | ||||
| { | ||||
|   int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize); | ||||
| } ILzmaInCallback; | ||||
| #endif | ||||
|  | ||||
| #define LZMA_BASE_SIZE 1846 | ||||
| #define LZMA_LIT_SIZE 768 | ||||
|  | ||||
| #define LZMA_PROPERTIES_SIZE 5 | ||||
|  | ||||
| typedef struct _CLzmaProperties | ||||
| { | ||||
|   int lc; | ||||
|   int lp; | ||||
|   int pb; | ||||
|   #ifdef _LZMA_OUT_READ | ||||
|   UInt32 DictionarySize; | ||||
|   #endif | ||||
| }CLzmaProperties; | ||||
|  | ||||
| int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size); | ||||
|  | ||||
| #define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp))) | ||||
|  | ||||
| #define kLzmaNeedInitId (-2) | ||||
|  | ||||
| typedef struct _CLzmaDecoderState | ||||
| { | ||||
|   CLzmaProperties Properties; | ||||
|   CProb *Probs; | ||||
|  | ||||
|   #ifdef _LZMA_IN_CB | ||||
|   const unsigned char *Buffer; | ||||
|   const unsigned char *BufferLim; | ||||
|   #endif | ||||
|  | ||||
|   #ifdef _LZMA_OUT_READ | ||||
|   unsigned char *Dictionary; | ||||
|   UInt32 Range; | ||||
|   UInt32 Code; | ||||
|   UInt32 DictionaryPos; | ||||
|   UInt32 GlobalPos; | ||||
|   UInt32 DistanceLimit; | ||||
|   UInt32 Reps[4]; | ||||
|   int State; | ||||
|   int RemainLen; | ||||
|   unsigned char TempDictionary[4]; | ||||
|   #endif | ||||
| } CLzmaDecoderState; | ||||
|  | ||||
| #ifdef _LZMA_OUT_READ | ||||
| #define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; } | ||||
| #endif | ||||
|  | ||||
| int LzmaDecode(CLzmaDecoderState *vs, | ||||
|     #ifdef _LZMA_IN_CB | ||||
|     ILzmaInCallback *inCallback, | ||||
|     #else | ||||
|     const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, | ||||
|     #endif | ||||
|     unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed); | ||||
|  | ||||
| #endif | ||||
| @@ -1,45 +0,0 @@ | ||||
| /*  | ||||
| LzmaTypes.h  | ||||
|  | ||||
| Types for LZMA Decoder | ||||
|  | ||||
| This file written and distributed to public domain by Igor Pavlov. | ||||
| This file is part of LZMA SDK 4.40 (2006-05-01) | ||||
| */ | ||||
|  | ||||
| #ifndef __LZMATYPES_H | ||||
| #define __LZMATYPES_H | ||||
|  | ||||
| #ifndef _7ZIP_BYTE_DEFINED | ||||
| #define _7ZIP_BYTE_DEFINED | ||||
| typedef unsigned char Byte; | ||||
| #endif  | ||||
|  | ||||
| #ifndef _7ZIP_UINT16_DEFINED | ||||
| #define _7ZIP_UINT16_DEFINED | ||||
| typedef unsigned short UInt16; | ||||
| #endif  | ||||
|  | ||||
| #ifndef _7ZIP_UINT32_DEFINED | ||||
| #define _7ZIP_UINT32_DEFINED | ||||
| #ifdef _LZMA_UINT32_IS_ULONG | ||||
| typedef unsigned long UInt32; | ||||
| #else | ||||
| typedef unsigned int UInt32; | ||||
| #endif | ||||
| #endif  | ||||
|  | ||||
| /* #define _LZMA_NO_SYSTEM_SIZE_T */ | ||||
| /* You can use it, if you don't want <stddef.h> */ | ||||
|  | ||||
| #ifndef _7ZIP_SIZET_DEFINED | ||||
| #define _7ZIP_SIZET_DEFINED | ||||
| #ifdef _LZMA_NO_SYSTEM_SIZE_T | ||||
| typedef UInt32 SizeT; | ||||
| #else | ||||
| #include <stddef.h> | ||||
| typedef size_t SizeT; | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
| @@ -1,110 +0,0 @@ | ||||
| # | ||||
| # Makefile for the LZMA compressed kernel loader for | ||||
| # Atheros AR7XXX/AR9XXX based boards | ||||
| # | ||||
| # Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||||
| # | ||||
| # Some parts of this file was based on the OpenWrt specific lzma-loader | ||||
| # for the BCM47xx and ADM5120 based boards: | ||||
| #	Copyright (C) 2004 Manuel Novoa III (mjn3@codepoet.org) | ||||
| #	Copyright (C) 2005 Mineharu Takahara <mtakahar@yahoo.com> | ||||
| #	Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify it | ||||
| # under the terms of the GNU General Public License version 2 as published | ||||
| # by the Free Software Foundation. | ||||
| # | ||||
|  | ||||
| LOADADDR	:= | ||||
| LZMA_TEXT_START	:= 0x80a00000 | ||||
| LOADER_DATA	:= | ||||
| BOARD		:= | ||||
| FLASH_OFFS	:= | ||||
| FLASH_MAX	:= | ||||
| PLATFORM	:= | ||||
|  | ||||
| CC		:= $(CROSS_COMPILE)gcc | ||||
| LD		:= $(CROSS_COMPILE)ld | ||||
| OBJCOPY		:= $(CROSS_COMPILE)objcopy | ||||
| OBJDUMP		:= $(CROSS_COMPILE)objdump | ||||
|  | ||||
| BIN_FLAGS	:= -O binary -R .reginfo -R .note -R .comment -R .mdebug -R .MIPS.abiflags -S | ||||
|  | ||||
| CFLAGS		= -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs -Os \ | ||||
| 		  -fno-strict-aliasing -fno-common -fomit-frame-pointer -G 0 \ | ||||
| 		  -mno-abicalls -fno-pic -ffunction-sections -pipe -mlong-calls \ | ||||
| 		  -fno-common -ffreestanding -fhonour-copts \ | ||||
| 		  -mabi=32 -march=mips32r2 \ | ||||
| 		  -Wa,-32 -Wa,-march=mips32r2 -Wa,-mips32r2 -Wa,--trap | ||||
| CFLAGS		+= -D_LZMA_PROB32 -DARCH=$(PLATFORM) | ||||
|  | ||||
| ASFLAGS		= $(CFLAGS) -D__ASSEMBLY__ | ||||
|  | ||||
| LDFLAGS		= -static --gc-sections -no-warn-mismatch | ||||
| LDFLAGS		+= -e startup -T loader.lds -Ttext $(LZMA_TEXT_START) | ||||
|  | ||||
| O_FORMAT 	= $(shell $(OBJDUMP) -i | head -2 | grep elf32) | ||||
|  | ||||
| OBJECTS		:= head.o loader.o cache.o board-$(PLATFORM).o printf.o LzmaDecode.o | ||||
|  | ||||
| include $(PLATFORM).mk | ||||
| CFLAGS+=$(CACHE_FLAGS) | ||||
| ASFLAGS+=$(CACHE_FLAGS) | ||||
|  | ||||
| ifneq ($(strip $(LOADER_DATA)),) | ||||
| OBJECTS		+= data.o | ||||
| CFLAGS		+= -DLZMA_WRAPPER=1 -DLOADADDR=$(LOADADDR) | ||||
| endif | ||||
|  | ||||
| ifneq ($(strip $(KERNEL_CMDLINE)),) | ||||
| CFLAGS		+= -DCONFIG_KERNEL_CMDLINE='"$(KERNEL_CMDLINE)"' | ||||
| endif | ||||
|  | ||||
| ifneq ($(strip $(FLASH_OFFS)),) | ||||
| CFLAGS		+= -DCONFIG_FLASH_OFFS=$(FLASH_OFFS) | ||||
| endif | ||||
|  | ||||
| ifneq ($(strip $(FLASH_MAX)),) | ||||
| CFLAGS		+= -DCONFIG_FLASH_MAX=$(FLASH_MAX) | ||||
| endif | ||||
|  | ||||
| BOARD_DEF := $(shell echo $(strip $(BOARD)) | tr a-z A-Z | tr - _) | ||||
| ifneq ($(BOARD_DEF),) | ||||
| CFLAGS		+= -DCONFIG_BOARD_$(BOARD_DEF) | ||||
| endif | ||||
|  | ||||
| all: loader.elf | ||||
|  | ||||
| # Don't build dependencies, this may die if $(CC) isn't gcc | ||||
| dep: | ||||
|  | ||||
| install: | ||||
|  | ||||
| %.o : %.c | ||||
| 	$(CC) $(CFLAGS) -c -o $@ $< | ||||
|  | ||||
| %.o : %.S | ||||
| 	$(CC) $(ASFLAGS) -c -o $@ $< | ||||
|  | ||||
| data.o: $(LOADER_DATA) | ||||
| 	$(LD) -r -b binary --oformat $(O_FORMAT) -T lzma-data.lds -o $@ $< | ||||
|  | ||||
| loader: $(OBJECTS) | ||||
| 	$(LD) $(LDFLAGS) -o $@ $(OBJECTS) | ||||
|  | ||||
| loader.bin: loader | ||||
| 	$(OBJCOPY) $(BIN_FLAGS) $< $@ | ||||
|  | ||||
| loader2.o: loader.bin | ||||
| 	$(LD) -r -b binary --oformat $(O_FORMAT) -o $@ $< | ||||
|  | ||||
| loader.elf: loader2.o | ||||
| 	$(LD) -e startup -T loader2.lds -Ttext $(LOADADDR) -o $@ $< | ||||
|  | ||||
| mrproper: clean | ||||
|  | ||||
| clean: | ||||
| 	rm -f loader *.elf *.bin *.o | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -1 +0,0 @@ | ||||
| CACHE_FLAGS+=-DCONFIG_ICACHE_SIZE="(32 * 1024)" -DCONFIG_DCACHE_SIZE="(64 * 1024)" -DCONFIG_CACHELINE_SIZE=32 | ||||
| @@ -1,725 +0,0 @@ | ||||
| /* | ||||
|  *  Atheros AR71XX/AR724X/AR913X SoC register definitions | ||||
|  * | ||||
|  *  Copyright (C) 2010-2011 Jaiganesh Narayanan <jnarayanan@atheros.com> | ||||
|  *  Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||||
|  *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||||
|  * | ||||
|  *  Parts of this file are based on Atheros' 2.6.15/2.6.31 BSP | ||||
|  * | ||||
|  *  This program is free software; you can redistribute it and/or modify it | ||||
|  *  under the terms of the GNU General Public License version 2 as published | ||||
|  *  by the Free Software Foundation. | ||||
|  */ | ||||
|  | ||||
| #ifndef __ASM_MACH_AR71XX_REGS_H | ||||
| #define __ASM_MACH_AR71XX_REGS_H | ||||
|  | ||||
| #define BIT(_x)			(1UL << (_x)) | ||||
|  | ||||
| #define AR71XX_APB_BASE		0x18000000 | ||||
| #define AR71XX_GE0_BASE		0x19000000 | ||||
| #define AR71XX_GE0_SIZE		0x10000 | ||||
| #define AR71XX_GE1_BASE		0x1a000000 | ||||
| #define AR71XX_GE1_SIZE		0x10000 | ||||
| #define AR71XX_EHCI_BASE	0x1b000000 | ||||
| #define AR71XX_EHCI_SIZE	0x1000 | ||||
| #define AR71XX_OHCI_BASE	0x1c000000 | ||||
| #define AR71XX_OHCI_SIZE	0x1000 | ||||
| #define AR71XX_SPI_BASE		0x1f000000 | ||||
| #define AR71XX_SPI_SIZE		0x01000000 | ||||
|  | ||||
| #define AR71XX_DDR_CTRL_BASE	(AR71XX_APB_BASE + 0x00000000) | ||||
| #define AR71XX_DDR_CTRL_SIZE	0x100 | ||||
| #define AR71XX_UART_BASE	(AR71XX_APB_BASE + 0x00020000) | ||||
| #define AR71XX_UART_SIZE	0x100 | ||||
| #define AR71XX_USB_CTRL_BASE	(AR71XX_APB_BASE + 0x00030000) | ||||
| #define AR71XX_USB_CTRL_SIZE	0x100 | ||||
| #define AR71XX_GPIO_BASE        (AR71XX_APB_BASE + 0x00040000) | ||||
| #define AR71XX_GPIO_SIZE        0x100 | ||||
| #define AR71XX_PLL_BASE		(AR71XX_APB_BASE + 0x00050000) | ||||
| #define AR71XX_PLL_SIZE		0x100 | ||||
| #define AR71XX_RESET_BASE	(AR71XX_APB_BASE + 0x00060000) | ||||
| #define AR71XX_RESET_SIZE	0x100 | ||||
| #define AR71XX_MII_BASE		(AR71XX_APB_BASE + 0x00070000) | ||||
| #define AR71XX_MII_SIZE		0x100 | ||||
|  | ||||
| #define AR71XX_PCI_MEM_BASE	0x10000000 | ||||
| #define AR71XX_PCI_MEM_SIZE	0x07000000 | ||||
|  | ||||
| #define AR71XX_PCI_WIN0_OFFS	0x10000000 | ||||
| #define AR71XX_PCI_WIN1_OFFS	0x11000000 | ||||
| #define AR71XX_PCI_WIN2_OFFS	0x12000000 | ||||
| #define AR71XX_PCI_WIN3_OFFS	0x13000000 | ||||
| #define AR71XX_PCI_WIN4_OFFS	0x14000000 | ||||
| #define AR71XX_PCI_WIN5_OFFS	0x15000000 | ||||
| #define AR71XX_PCI_WIN6_OFFS	0x16000000 | ||||
| #define AR71XX_PCI_WIN7_OFFS	0x07000000 | ||||
|  | ||||
| #define AR71XX_PCI_CFG_BASE	\ | ||||
| 	(AR71XX_PCI_MEM_BASE + AR71XX_PCI_WIN7_OFFS + 0x10000) | ||||
| #define AR71XX_PCI_CFG_SIZE	0x100 | ||||
|  | ||||
| #define AR7240_USB_CTRL_BASE	(AR71XX_APB_BASE + 0x00030000) | ||||
| #define AR7240_USB_CTRL_SIZE	0x100 | ||||
| #define AR7240_OHCI_BASE	0x1b000000 | ||||
| #define AR7240_OHCI_SIZE	0x1000 | ||||
|  | ||||
| #define AR724X_PCI_MEM_BASE	0x10000000 | ||||
| #define AR724X_PCI_MEM_SIZE	0x04000000 | ||||
|  | ||||
| #define AR724X_PCI_CFG_BASE	0x14000000 | ||||
| #define AR724X_PCI_CFG_SIZE	0x1000 | ||||
| #define AR724X_PCI_CRP_BASE	(AR71XX_APB_BASE + 0x000c0000) | ||||
| #define AR724X_PCI_CRP_SIZE	0x1000 | ||||
| #define AR724X_PCI_CTRL_BASE	(AR71XX_APB_BASE + 0x000f0000) | ||||
| #define AR724X_PCI_CTRL_SIZE	0x100 | ||||
|  | ||||
| #define AR724X_EHCI_BASE	0x1b000000 | ||||
| #define AR724X_EHCI_SIZE	0x1000 | ||||
|  | ||||
| #define AR913X_EHCI_BASE	0x1b000000 | ||||
| #define AR913X_EHCI_SIZE	0x1000 | ||||
| #define AR913X_WMAC_BASE	(AR71XX_APB_BASE + 0x000C0000) | ||||
| #define AR913X_WMAC_SIZE	0x30000 | ||||
|  | ||||
| #define AR933X_UART_BASE	(AR71XX_APB_BASE + 0x00020000) | ||||
| #define AR933X_UART_SIZE	0x14 | ||||
| #define AR933X_GMAC_BASE	(AR71XX_APB_BASE + 0x00070000) | ||||
| #define AR933X_GMAC_SIZE	0x04 | ||||
| #define AR933X_WMAC_BASE	(AR71XX_APB_BASE + 0x00100000) | ||||
| #define AR933X_WMAC_SIZE	0x20000 | ||||
| #define AR933X_EHCI_BASE	0x1b000000 | ||||
| #define AR933X_EHCI_SIZE	0x1000 | ||||
|  | ||||
| #define AR934X_GMAC_BASE	(AR71XX_APB_BASE + 0x00070000) | ||||
| #define AR934X_GMAC_SIZE	0x14 | ||||
| #define AR934X_WMAC_BASE	(AR71XX_APB_BASE + 0x00100000) | ||||
| #define AR934X_WMAC_SIZE	0x20000 | ||||
| #define AR934X_EHCI_BASE	0x1b000000 | ||||
| #define AR934X_EHCI_SIZE	0x200 | ||||
|  | ||||
| #define QCA955X_PCI_MEM_BASE0	0x10000000 | ||||
| #define QCA955X_PCI_MEM_BASE1	0x12000000 | ||||
| #define QCA955X_PCI_MEM_SIZE	0x02000000 | ||||
| #define QCA955X_PCI_CFG_BASE0	0x14000000 | ||||
| #define QCA955X_PCI_CFG_BASE1	0x16000000 | ||||
| #define QCA955X_PCI_CFG_SIZE	0x1000 | ||||
| #define QCA955X_PCI_CRP_BASE0	(AR71XX_APB_BASE + 0x000c0000) | ||||
| #define QCA955X_PCI_CRP_BASE1	(AR71XX_APB_BASE + 0x00250000) | ||||
| #define QCA955X_PCI_CRP_SIZE	0x1000 | ||||
| #define QCA955X_PCI_CTRL_BASE0	(AR71XX_APB_BASE + 0x000f0000) | ||||
| #define QCA955X_PCI_CTRL_BASE1	(AR71XX_APB_BASE + 0x00280000) | ||||
| #define QCA955X_PCI_CTRL_SIZE	0x100 | ||||
|  | ||||
| #define QCA955X_WMAC_BASE	(AR71XX_APB_BASE + 0x00100000) | ||||
| #define QCA955X_WMAC_SIZE	0x20000 | ||||
| #define QCA955X_EHCI0_BASE	0x1b000000 | ||||
| #define QCA955X_EHCI1_BASE	0x1b400000 | ||||
| #define QCA955X_EHCI_SIZE	0x1000 | ||||
| #define QCA955X_GMAC_BASE	(AR71XX_APB_BASE + 0x00070000) | ||||
| #define QCA955X_GMAC_SIZE	0x40 | ||||
|  | ||||
| #define AR9300_OTP_BASE		0x14000 | ||||
| #define AR9300_OTP_STATUS	0x15f18 | ||||
| #define AR9300_OTP_STATUS_TYPE		0x7 | ||||
| #define AR9300_OTP_STATUS_VALID		0x4 | ||||
| #define AR9300_OTP_STATUS_ACCESS_BUSY	0x2 | ||||
| #define AR9300_OTP_STATUS_SM_BUSY	0x1 | ||||
| #define AR9300_OTP_READ_DATA	0x15f1c | ||||
|  | ||||
| /* | ||||
|  * DDR_CTRL block | ||||
|  */ | ||||
| #define AR71XX_DDR_REG_PCI_WIN0		0x7c | ||||
| #define AR71XX_DDR_REG_PCI_WIN1		0x80 | ||||
| #define AR71XX_DDR_REG_PCI_WIN2		0x84 | ||||
| #define AR71XX_DDR_REG_PCI_WIN3		0x88 | ||||
| #define AR71XX_DDR_REG_PCI_WIN4		0x8c | ||||
| #define AR71XX_DDR_REG_PCI_WIN5		0x90 | ||||
| #define AR71XX_DDR_REG_PCI_WIN6		0x94 | ||||
| #define AR71XX_DDR_REG_PCI_WIN7		0x98 | ||||
| #define AR71XX_DDR_REG_FLUSH_GE0	0x9c | ||||
| #define AR71XX_DDR_REG_FLUSH_GE1	0xa0 | ||||
| #define AR71XX_DDR_REG_FLUSH_USB	0xa4 | ||||
| #define AR71XX_DDR_REG_FLUSH_PCI	0xa8 | ||||
|  | ||||
| #define AR724X_DDR_REG_FLUSH_GE0	0x7c | ||||
| #define AR724X_DDR_REG_FLUSH_GE1	0x80 | ||||
| #define AR724X_DDR_REG_FLUSH_USB	0x84 | ||||
| #define AR724X_DDR_REG_FLUSH_PCIE	0x88 | ||||
|  | ||||
| #define AR913X_DDR_REG_FLUSH_GE0	0x7c | ||||
| #define AR913X_DDR_REG_FLUSH_GE1	0x80 | ||||
| #define AR913X_DDR_REG_FLUSH_USB	0x84 | ||||
| #define AR913X_DDR_REG_FLUSH_WMAC	0x88 | ||||
|  | ||||
| #define AR933X_DDR_REG_FLUSH_GE0	0x7c | ||||
| #define AR933X_DDR_REG_FLUSH_GE1	0x80 | ||||
| #define AR933X_DDR_REG_FLUSH_USB	0x84 | ||||
| #define AR933X_DDR_REG_FLUSH_WMAC	0x88 | ||||
|  | ||||
| #define AR934X_DDR_REG_FLUSH_GE0	0x9c | ||||
| #define AR934X_DDR_REG_FLUSH_GE1	0xa0 | ||||
| #define AR934X_DDR_REG_FLUSH_USB	0xa4 | ||||
| #define AR934X_DDR_REG_FLUSH_PCIE	0xa8 | ||||
| #define AR934X_DDR_REG_FLUSH_WMAC	0xac | ||||
|  | ||||
| /* | ||||
|  * PLL block | ||||
|  */ | ||||
| #define AR71XX_PLL_REG_CPU_CONFIG	0x00 | ||||
| #define AR71XX_PLL_REG_SEC_CONFIG	0x04 | ||||
| #define AR71XX_PLL_REG_ETH0_INT_CLOCK	0x10 | ||||
| #define AR71XX_PLL_REG_ETH1_INT_CLOCK	0x14 | ||||
|  | ||||
| #define AR71XX_PLL_DIV_SHIFT		3 | ||||
| #define AR71XX_PLL_DIV_MASK		0x1f | ||||
| #define AR71XX_CPU_DIV_SHIFT		16 | ||||
| #define AR71XX_CPU_DIV_MASK		0x3 | ||||
| #define AR71XX_DDR_DIV_SHIFT		18 | ||||
| #define AR71XX_DDR_DIV_MASK		0x3 | ||||
| #define AR71XX_AHB_DIV_SHIFT		20 | ||||
| #define AR71XX_AHB_DIV_MASK		0x7 | ||||
|  | ||||
| #define AR71XX_ETH0_PLL_SHIFT		17 | ||||
| #define AR71XX_ETH1_PLL_SHIFT		19 | ||||
|  | ||||
| #define AR724X_PLL_REG_CPU_CONFIG	0x00 | ||||
| #define AR724X_PLL_REG_PCIE_CONFIG	0x18 | ||||
|  | ||||
| #define AR724X_PLL_DIV_SHIFT		0 | ||||
| #define AR724X_PLL_DIV_MASK		0x3ff | ||||
| #define AR724X_PLL_REF_DIV_SHIFT	10 | ||||
| #define AR724X_PLL_REF_DIV_MASK		0xf | ||||
| #define AR724X_AHB_DIV_SHIFT		19 | ||||
| #define AR724X_AHB_DIV_MASK		0x1 | ||||
| #define AR724X_DDR_DIV_SHIFT		22 | ||||
| #define AR724X_DDR_DIV_MASK		0x3 | ||||
|  | ||||
| #define AR7242_PLL_REG_ETH0_INT_CLOCK	0x2c | ||||
|  | ||||
| #define AR913X_PLL_REG_CPU_CONFIG	0x00 | ||||
| #define AR913X_PLL_REG_ETH_CONFIG	0x04 | ||||
| #define AR913X_PLL_REG_ETH0_INT_CLOCK	0x14 | ||||
| #define AR913X_PLL_REG_ETH1_INT_CLOCK	0x18 | ||||
|  | ||||
| #define AR913X_PLL_DIV_SHIFT		0 | ||||
| #define AR913X_PLL_DIV_MASK		0x3ff | ||||
| #define AR913X_DDR_DIV_SHIFT		22 | ||||
| #define AR913X_DDR_DIV_MASK		0x3 | ||||
| #define AR913X_AHB_DIV_SHIFT		19 | ||||
| #define AR913X_AHB_DIV_MASK		0x1 | ||||
|  | ||||
| #define AR913X_ETH0_PLL_SHIFT		20 | ||||
| #define AR913X_ETH1_PLL_SHIFT		22 | ||||
|  | ||||
| #define AR933X_PLL_CPU_CONFIG_REG	0x00 | ||||
| #define AR933X_PLL_CLOCK_CTRL_REG	0x08 | ||||
|  | ||||
| #define AR933X_PLL_CPU_CONFIG_NINT_SHIFT	10 | ||||
| #define AR933X_PLL_CPU_CONFIG_NINT_MASK		0x3f | ||||
| #define AR933X_PLL_CPU_CONFIG_REFDIV_SHIFT	16 | ||||
| #define AR933X_PLL_CPU_CONFIG_REFDIV_MASK	0x1f | ||||
| #define AR933X_PLL_CPU_CONFIG_OUTDIV_SHIFT	23 | ||||
| #define AR933X_PLL_CPU_CONFIG_OUTDIV_MASK	0x7 | ||||
|  | ||||
| #define AR933X_PLL_CLOCK_CTRL_BYPASS		BIT(2) | ||||
| #define AR933X_PLL_CLOCK_CTRL_CPU_DIV_SHIFT	5 | ||||
| #define AR933X_PLL_CLOCK_CTRL_CPU_DIV_MASK	0x3 | ||||
| #define AR933X_PLL_CLOCK_CTRL_DDR_DIV_SHIFT	10 | ||||
| #define AR933X_PLL_CLOCK_CTRL_DDR_DIV_MASK	0x3 | ||||
| #define AR933X_PLL_CLOCK_CTRL_AHB_DIV_SHIFT	15 | ||||
| #define AR933X_PLL_CLOCK_CTRL_AHB_DIV_MASK	0x7 | ||||
|  | ||||
| #define AR934X_PLL_CPU_CONFIG_REG		0x00 | ||||
| #define AR934X_PLL_DDR_CONFIG_REG		0x04 | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_REG		0x08 | ||||
| #define AR934X_PLL_ETH_XMII_CONTROL_REG		0x2c | ||||
|  | ||||
| #define AR934X_PLL_CPU_CONFIG_NFRAC_SHIFT	0 | ||||
| #define AR934X_PLL_CPU_CONFIG_NFRAC_MASK	0x3f | ||||
| #define AR934X_PLL_CPU_CONFIG_NINT_SHIFT	6 | ||||
| #define AR934X_PLL_CPU_CONFIG_NINT_MASK		0x3f | ||||
| #define AR934X_PLL_CPU_CONFIG_REFDIV_SHIFT	12 | ||||
| #define AR934X_PLL_CPU_CONFIG_REFDIV_MASK	0x1f | ||||
| #define AR934X_PLL_CPU_CONFIG_OUTDIV_SHIFT	19 | ||||
| #define AR934X_PLL_CPU_CONFIG_OUTDIV_MASK	0x3 | ||||
|  | ||||
| #define AR934X_PLL_DDR_CONFIG_NFRAC_SHIFT	0 | ||||
| #define AR934X_PLL_DDR_CONFIG_NFRAC_MASK	0x3ff | ||||
| #define AR934X_PLL_DDR_CONFIG_NINT_SHIFT	10 | ||||
| #define AR934X_PLL_DDR_CONFIG_NINT_MASK		0x3f | ||||
| #define AR934X_PLL_DDR_CONFIG_REFDIV_SHIFT	16 | ||||
| #define AR934X_PLL_DDR_CONFIG_REFDIV_MASK	0x1f | ||||
| #define AR934X_PLL_DDR_CONFIG_OUTDIV_SHIFT	23 | ||||
| #define AR934X_PLL_DDR_CONFIG_OUTDIV_MASK	0x7 | ||||
|  | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_PLL_BYPASS	BIT(2) | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_PLL_BYPASS	BIT(3) | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_PLL_BYPASS	BIT(4) | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_POST_DIV_SHIFT	5 | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_POST_DIV_MASK	0x1f | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_POST_DIV_SHIFT	10 | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_POST_DIV_MASK	0x1f | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_POST_DIV_SHIFT	15 | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_POST_DIV_MASK	0x1f | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_CPUCLK_FROM_CPUPLL	BIT(20) | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_DDRCLK_FROM_DDRPLL	BIT(21) | ||||
| #define AR934X_PLL_CPU_DDR_CLK_CTRL_AHBCLK_FROM_DDRPLL	BIT(24) | ||||
|  | ||||
| #define QCA955X_PLL_CPU_CONFIG_REG		0x00 | ||||
| #define QCA955X_PLL_DDR_CONFIG_REG		0x04 | ||||
| #define QCA955X_PLL_CLK_CTRL_REG		0x08 | ||||
|  | ||||
| #define QCA955X_PLL_CPU_CONFIG_NFRAC_SHIFT	0 | ||||
| #define QCA955X_PLL_CPU_CONFIG_NFRAC_MASK	0x3f | ||||
| #define QCA955X_PLL_CPU_CONFIG_NINT_SHIFT	6 | ||||
| #define QCA955X_PLL_CPU_CONFIG_NINT_MASK	0x3f | ||||
| #define QCA955X_PLL_CPU_CONFIG_REFDIV_SHIFT	12 | ||||
| #define QCA955X_PLL_CPU_CONFIG_REFDIV_MASK	0x1f | ||||
| #define QCA955X_PLL_CPU_CONFIG_OUTDIV_SHIFT	19 | ||||
| #define QCA955X_PLL_CPU_CONFIG_OUTDIV_MASK	0x3 | ||||
|  | ||||
| #define QCA955X_PLL_DDR_CONFIG_NFRAC_SHIFT	0 | ||||
| #define QCA955X_PLL_DDR_CONFIG_NFRAC_MASK	0x3ff | ||||
| #define QCA955X_PLL_DDR_CONFIG_NINT_SHIFT	10 | ||||
| #define QCA955X_PLL_DDR_CONFIG_NINT_MASK	0x3f | ||||
| #define QCA955X_PLL_DDR_CONFIG_REFDIV_SHIFT	16 | ||||
| #define QCA955X_PLL_DDR_CONFIG_REFDIV_MASK	0x1f | ||||
| #define QCA955X_PLL_DDR_CONFIG_OUTDIV_SHIFT	23 | ||||
| #define QCA955X_PLL_DDR_CONFIG_OUTDIV_MASK	0x7 | ||||
|  | ||||
| #define QCA955X_PLL_CLK_CTRL_CPU_PLL_BYPASS		BIT(2) | ||||
| #define QCA955X_PLL_CLK_CTRL_DDR_PLL_BYPASS		BIT(3) | ||||
| #define QCA955X_PLL_CLK_CTRL_AHB_PLL_BYPASS		BIT(4) | ||||
| #define QCA955X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT		5 | ||||
| #define QCA955X_PLL_CLK_CTRL_CPU_POST_DIV_MASK		0x1f | ||||
| #define QCA955X_PLL_CLK_CTRL_DDR_POST_DIV_SHIFT		10 | ||||
| #define QCA955X_PLL_CLK_CTRL_DDR_POST_DIV_MASK		0x1f | ||||
| #define QCA955X_PLL_CLK_CTRL_AHB_POST_DIV_SHIFT		15 | ||||
| #define QCA955X_PLL_CLK_CTRL_AHB_POST_DIV_MASK		0x1f | ||||
| #define QCA955X_PLL_CLK_CTRL_CPUCLK_FROM_CPUPLL		BIT(20) | ||||
| #define QCA955X_PLL_CLK_CTRL_DDRCLK_FROM_DDRPLL		BIT(21) | ||||
| #define QCA955X_PLL_CLK_CTRL_AHBCLK_FROM_DDRPLL		BIT(24) | ||||
|  | ||||
| /* | ||||
|  * USB_CONFIG block | ||||
|  */ | ||||
| #define AR71XX_USB_CTRL_REG_FLADJ	0x00 | ||||
| #define AR71XX_USB_CTRL_REG_CONFIG	0x04 | ||||
|  | ||||
| /* | ||||
|  * RESET block | ||||
|  */ | ||||
| #define AR71XX_RESET_REG_TIMER			0x00 | ||||
| #define AR71XX_RESET_REG_TIMER_RELOAD		0x04 | ||||
| #define AR71XX_RESET_REG_WDOG_CTRL		0x08 | ||||
| #define AR71XX_RESET_REG_WDOG			0x0c | ||||
| #define AR71XX_RESET_REG_MISC_INT_STATUS	0x10 | ||||
| #define AR71XX_RESET_REG_MISC_INT_ENABLE	0x14 | ||||
| #define AR71XX_RESET_REG_PCI_INT_STATUS		0x18 | ||||
| #define AR71XX_RESET_REG_PCI_INT_ENABLE		0x1c | ||||
| #define AR71XX_RESET_REG_GLOBAL_INT_STATUS	0x20 | ||||
| #define AR71XX_RESET_REG_RESET_MODULE		0x24 | ||||
| #define AR71XX_RESET_REG_PERFC_CTRL		0x2c | ||||
| #define AR71XX_RESET_REG_PERFC0			0x30 | ||||
| #define AR71XX_RESET_REG_PERFC1			0x34 | ||||
| #define AR71XX_RESET_REG_REV_ID			0x90 | ||||
|  | ||||
| #define AR913X_RESET_REG_GLOBAL_INT_STATUS	0x18 | ||||
| #define AR913X_RESET_REG_RESET_MODULE		0x1c | ||||
| #define AR913X_RESET_REG_PERF_CTRL		0x20 | ||||
| #define AR913X_RESET_REG_PERFC0			0x24 | ||||
| #define AR913X_RESET_REG_PERFC1			0x28 | ||||
|  | ||||
| #define AR724X_RESET_REG_RESET_MODULE		0x1c | ||||
|  | ||||
| #define AR933X_RESET_REG_RESET_MODULE		0x1c | ||||
| #define AR933X_RESET_REG_BOOTSTRAP		0xac | ||||
|  | ||||
| #define AR934X_RESET_REG_RESET_MODULE		0x1c | ||||
| #define AR934X_RESET_REG_BOOTSTRAP		0xb0 | ||||
| #define AR934X_RESET_REG_PCIE_WMAC_INT_STATUS	0xac | ||||
|  | ||||
| #define QCA955X_RESET_REG_BOOTSTRAP		0xb0 | ||||
| #define QCA955X_RESET_REG_EXT_INT_STATUS	0xac | ||||
|  | ||||
| #define MISC_INT_ETHSW			BIT(12) | ||||
| #define MISC_INT_TIMER4			BIT(10) | ||||
| #define MISC_INT_TIMER3			BIT(9) | ||||
| #define MISC_INT_TIMER2			BIT(8) | ||||
| #define MISC_INT_DMA			BIT(7) | ||||
| #define MISC_INT_OHCI			BIT(6) | ||||
| #define MISC_INT_PERFC			BIT(5) | ||||
| #define MISC_INT_WDOG			BIT(4) | ||||
| #define MISC_INT_UART			BIT(3) | ||||
| #define MISC_INT_GPIO			BIT(2) | ||||
| #define MISC_INT_ERROR			BIT(1) | ||||
| #define MISC_INT_TIMER			BIT(0) | ||||
|  | ||||
| #define AR71XX_RESET_EXTERNAL		BIT(28) | ||||
| #define AR71XX_RESET_FULL_CHIP		BIT(24) | ||||
| #define AR71XX_RESET_CPU_NMI		BIT(21) | ||||
| #define AR71XX_RESET_CPU_COLD		BIT(20) | ||||
| #define AR71XX_RESET_DMA		BIT(19) | ||||
| #define AR71XX_RESET_SLIC		BIT(18) | ||||
| #define AR71XX_RESET_STEREO		BIT(17) | ||||
| #define AR71XX_RESET_DDR		BIT(16) | ||||
| #define AR71XX_RESET_GE1_MAC		BIT(13) | ||||
| #define AR71XX_RESET_GE1_PHY		BIT(12) | ||||
| #define AR71XX_RESET_USBSUS_OVERRIDE	BIT(10) | ||||
| #define AR71XX_RESET_GE0_MAC		BIT(9) | ||||
| #define AR71XX_RESET_GE0_PHY		BIT(8) | ||||
| #define AR71XX_RESET_USB_OHCI_DLL	BIT(6) | ||||
| #define AR71XX_RESET_USB_HOST		BIT(5) | ||||
| #define AR71XX_RESET_USB_PHY		BIT(4) | ||||
| #define AR71XX_RESET_PCI_BUS		BIT(1) | ||||
| #define AR71XX_RESET_PCI_CORE		BIT(0) | ||||
|  | ||||
| #define AR7240_RESET_USB_HOST		BIT(5) | ||||
| #define AR7240_RESET_OHCI_DLL		BIT(3) | ||||
|  | ||||
| #define AR724X_RESET_GE1_MDIO		BIT(23) | ||||
| #define AR724X_RESET_GE0_MDIO		BIT(22) | ||||
| #define AR724X_RESET_PCIE_PHY_SERIAL	BIT(10) | ||||
| #define AR724X_RESET_PCIE_PHY		BIT(7) | ||||
| #define AR724X_RESET_PCIE		BIT(6) | ||||
| #define AR724X_RESET_USB_HOST		BIT(5) | ||||
| #define AR724X_RESET_USB_PHY		BIT(4) | ||||
| #define AR724X_RESET_USBSUS_OVERRIDE	BIT(3) | ||||
|  | ||||
| #define AR913X_RESET_AMBA2WMAC		BIT(22) | ||||
| #define AR913X_RESET_USBSUS_OVERRIDE	BIT(10) | ||||
| #define AR913X_RESET_USB_HOST		BIT(5) | ||||
| #define AR913X_RESET_USB_PHY		BIT(4) | ||||
|  | ||||
| #define AR933X_RESET_GE1_MDIO		BIT(23) | ||||
| #define AR933X_RESET_GE0_MDIO		BIT(22) | ||||
| #define AR933X_RESET_GE1_MAC		BIT(13) | ||||
| #define AR933X_RESET_WMAC		BIT(11) | ||||
| #define AR933X_RESET_GE0_MAC		BIT(9) | ||||
| #define AR933X_RESET_USB_HOST		BIT(5) | ||||
| #define AR933X_RESET_USB_PHY		BIT(4) | ||||
| #define AR933X_RESET_USBSUS_OVERRIDE	BIT(3) | ||||
|  | ||||
| #define AR934X_RESET_HOST		BIT(31) | ||||
| #define AR934X_RESET_SLIC		BIT(30) | ||||
| #define AR934X_RESET_HDMA		BIT(29) | ||||
| #define AR934X_RESET_EXTERNAL		BIT(28) | ||||
| #define AR934X_RESET_RTC		BIT(27) | ||||
| #define AR934X_RESET_PCIE_EP_INT	BIT(26) | ||||
| #define AR934X_RESET_CHKSUM_ACC		BIT(25) | ||||
| #define AR934X_RESET_FULL_CHIP		BIT(24) | ||||
| #define AR934X_RESET_GE1_MDIO		BIT(23) | ||||
| #define AR934X_RESET_GE0_MDIO		BIT(22) | ||||
| #define AR934X_RESET_CPU_NMI		BIT(21) | ||||
| #define AR934X_RESET_CPU_COLD		BIT(20) | ||||
| #define AR934X_RESET_HOST_RESET_INT	BIT(19) | ||||
| #define AR934X_RESET_PCIE_EP		BIT(18) | ||||
| #define AR934X_RESET_UART1		BIT(17) | ||||
| #define AR934X_RESET_DDR		BIT(16) | ||||
| #define AR934X_RESET_USB_PHY_PLL_PWD_EXT BIT(15) | ||||
| #define AR934X_RESET_NANDF		BIT(14) | ||||
| #define AR934X_RESET_GE1_MAC		BIT(13) | ||||
| #define AR934X_RESET_ETH_SWITCH_ANALOG	BIT(12) | ||||
| #define AR934X_RESET_USB_PHY_ANALOG	BIT(11) | ||||
| #define AR934X_RESET_HOST_DMA_INT	BIT(10) | ||||
| #define AR934X_RESET_GE0_MAC		BIT(9) | ||||
| #define AR934X_RESET_ETH_SWITCH		BIT(8) | ||||
| #define AR934X_RESET_PCIE_PHY		BIT(7) | ||||
| #define AR934X_RESET_PCIE		BIT(6) | ||||
| #define AR934X_RESET_USB_HOST		BIT(5) | ||||
| #define AR934X_RESET_USB_PHY		BIT(4) | ||||
| #define AR934X_RESET_USBSUS_OVERRIDE	BIT(3) | ||||
| #define AR934X_RESET_LUT		BIT(2) | ||||
| #define AR934X_RESET_MBOX		BIT(1) | ||||
| #define AR934X_RESET_I2S		BIT(0) | ||||
|  | ||||
| #define AR933X_BOOTSTRAP_MDIO_GPIO_EN	BIT(18) | ||||
| #define AR933X_BOOTSTRAP_EEPBUSY	BIT(4) | ||||
| #define AR933X_BOOTSTRAP_REF_CLK_40	BIT(0) | ||||
|  | ||||
| #define AR934X_BOOTSTRAP_SW_OPTION8	BIT(23) | ||||
| #define AR934X_BOOTSTRAP_SW_OPTION7	BIT(22) | ||||
| #define AR934X_BOOTSTRAP_SW_OPTION6	BIT(21) | ||||
| #define AR934X_BOOTSTRAP_SW_OPTION5	BIT(20) | ||||
| #define AR934X_BOOTSTRAP_SW_OPTION4	BIT(19) | ||||
| #define AR934X_BOOTSTRAP_SW_OPTION3	BIT(18) | ||||
| #define AR934X_BOOTSTRAP_SW_OPTION2	BIT(17) | ||||
| #define AR934X_BOOTSTRAP_SW_OPTION1	BIT(16) | ||||
| #define AR934X_BOOTSTRAP_USB_MODE_DEVICE BIT(7) | ||||
| #define AR934X_BOOTSTRAP_PCIE_RC	BIT(6) | ||||
| #define AR934X_BOOTSTRAP_EJTAG_MODE	BIT(5) | ||||
| #define AR934X_BOOTSTRAP_REF_CLK_40	BIT(4) | ||||
| #define AR934X_BOOTSTRAP_BOOT_FROM_SPI	BIT(2) | ||||
| #define AR934X_BOOTSTRAP_SDRAM_DISABLED	BIT(1) | ||||
| #define AR934X_BOOTSTRAP_DDR1		BIT(0) | ||||
|  | ||||
| #define QCA955X_BOOTSTRAP_REF_CLK_40	BIT(4) | ||||
|  | ||||
| #define AR934X_PCIE_WMAC_INT_WMAC_MISC		BIT(0) | ||||
| #define AR934X_PCIE_WMAC_INT_WMAC_TX		BIT(1) | ||||
| #define AR934X_PCIE_WMAC_INT_WMAC_RXLP		BIT(2) | ||||
| #define AR934X_PCIE_WMAC_INT_WMAC_RXHP		BIT(3) | ||||
| #define AR934X_PCIE_WMAC_INT_PCIE_RC		BIT(4) | ||||
| #define AR934X_PCIE_WMAC_INT_PCIE_RC0		BIT(5) | ||||
| #define AR934X_PCIE_WMAC_INT_PCIE_RC1		BIT(6) | ||||
| #define AR934X_PCIE_WMAC_INT_PCIE_RC2		BIT(7) | ||||
| #define AR934X_PCIE_WMAC_INT_PCIE_RC3		BIT(8) | ||||
| #define AR934X_PCIE_WMAC_INT_WMAC_ALL \ | ||||
| 	(AR934X_PCIE_WMAC_INT_WMAC_MISC | AR934X_PCIE_WMAC_INT_WMAC_TX | \ | ||||
| 	 AR934X_PCIE_WMAC_INT_WMAC_RXLP | AR934X_PCIE_WMAC_INT_WMAC_RXHP) | ||||
|  | ||||
| #define AR934X_PCIE_WMAC_INT_PCIE_ALL \ | ||||
| 	(AR934X_PCIE_WMAC_INT_PCIE_RC | AR934X_PCIE_WMAC_INT_PCIE_RC0 | \ | ||||
| 	 AR934X_PCIE_WMAC_INT_PCIE_RC1 | AR934X_PCIE_WMAC_INT_PCIE_RC2 | \ | ||||
| 	 AR934X_PCIE_WMAC_INT_PCIE_RC3) | ||||
|  | ||||
| #define QCA955X_EXT_INT_WMAC_MISC		BIT(0) | ||||
| #define QCA955X_EXT_INT_WMAC_TX			BIT(1) | ||||
| #define QCA955X_EXT_INT_WMAC_RXLP		BIT(2) | ||||
| #define QCA955X_EXT_INT_WMAC_RXHP		BIT(3) | ||||
| #define QCA955X_EXT_INT_PCIE_RC1		BIT(4) | ||||
| #define QCA955X_EXT_INT_PCIE_RC1_INT0		BIT(5) | ||||
| #define QCA955X_EXT_INT_PCIE_RC1_INT1		BIT(6) | ||||
| #define QCA955X_EXT_INT_PCIE_RC1_INT2		BIT(7) | ||||
| #define QCA955X_EXT_INT_PCIE_RC1_INT3		BIT(8) | ||||
| #define QCA955X_EXT_INT_PCIE_RC2		BIT(12) | ||||
| #define QCA955X_EXT_INT_PCIE_RC2_INT0		BIT(13) | ||||
| #define QCA955X_EXT_INT_PCIE_RC2_INT1		BIT(14) | ||||
| #define QCA955X_EXT_INT_PCIE_RC2_INT2		BIT(15) | ||||
| #define QCA955X_EXT_INT_PCIE_RC2_INT3		BIT(16) | ||||
| #define QCA955X_EXT_INT_USB1			BIT(24) | ||||
| #define QCA955X_EXT_INT_USB2			BIT(28) | ||||
|  | ||||
| #define QCA955X_EXT_INT_WMAC_ALL \ | ||||
| 	(QCA955X_EXT_INT_WMAC_MISC | QCA955X_EXT_INT_WMAC_TX | \ | ||||
| 	 QCA955X_EXT_INT_WMAC_RXLP | QCA955X_EXT_INT_WMAC_RXHP) | ||||
|  | ||||
| #define QCA955X_EXT_INT_PCIE_RC1_ALL \ | ||||
| 	(QCA955X_EXT_INT_PCIE_RC1 | QCA955X_EXT_INT_PCIE_RC1_INT0 | \ | ||||
| 	 QCA955X_EXT_INT_PCIE_RC1_INT1 | QCA955X_EXT_INT_PCIE_RC1_INT2 | \ | ||||
| 	 QCA955X_EXT_INT_PCIE_RC1_INT3) | ||||
|  | ||||
| #define QCA955X_EXT_INT_PCIE_RC2_ALL \ | ||||
| 	(QCA955X_EXT_INT_PCIE_RC2 | QCA955X_EXT_INT_PCIE_RC2_INT0 | \ | ||||
| 	 QCA955X_EXT_INT_PCIE_RC2_INT1 | QCA955X_EXT_INT_PCIE_RC2_INT2 | \ | ||||
| 	 QCA955X_EXT_INT_PCIE_RC2_INT3) | ||||
|  | ||||
| #define REV_ID_MAJOR_MASK		0xfff0 | ||||
| #define REV_ID_MAJOR_AR71XX		0x00a0 | ||||
| #define REV_ID_MAJOR_AR913X		0x00b0 | ||||
| #define REV_ID_MAJOR_AR7240		0x00c0 | ||||
| #define REV_ID_MAJOR_AR7241		0x0100 | ||||
| #define REV_ID_MAJOR_AR7242		0x1100 | ||||
| #define REV_ID_MAJOR_AR9330		0x0110 | ||||
| #define REV_ID_MAJOR_AR9331		0x1110 | ||||
| #define REV_ID_MAJOR_AR9341		0x0120 | ||||
| #define REV_ID_MAJOR_AR9342		0x1120 | ||||
| #define REV_ID_MAJOR_AR9344		0x2120 | ||||
| #define REV_ID_MAJOR_QCA9558		0x1130 | ||||
|  | ||||
| #define AR71XX_REV_ID_MINOR_MASK	0x3 | ||||
| #define AR71XX_REV_ID_MINOR_AR7130	0x0 | ||||
| #define AR71XX_REV_ID_MINOR_AR7141	0x1 | ||||
| #define AR71XX_REV_ID_MINOR_AR7161	0x2 | ||||
| #define AR71XX_REV_ID_REVISION_MASK	0x3 | ||||
| #define AR71XX_REV_ID_REVISION_SHIFT	2 | ||||
|  | ||||
| #define AR913X_REV_ID_MINOR_MASK	0x3 | ||||
| #define AR913X_REV_ID_MINOR_AR9130	0x0 | ||||
| #define AR913X_REV_ID_MINOR_AR9132	0x1 | ||||
| #define AR913X_REV_ID_REVISION_MASK	0x3 | ||||
| #define AR913X_REV_ID_REVISION_SHIFT	2 | ||||
|  | ||||
| #define AR933X_REV_ID_REVISION_MASK	0x3 | ||||
|  | ||||
| #define AR724X_REV_ID_REVISION_MASK	0x3 | ||||
|  | ||||
| #define AR934X_REV_ID_REVISION_MASK     0xf | ||||
|  | ||||
| #define AR944X_REV_ID_REVISION_MASK	0xf | ||||
|  | ||||
| /* | ||||
|  * SPI block | ||||
|  */ | ||||
| #define AR71XX_SPI_REG_FS	0x00	/* Function Select */ | ||||
| #define AR71XX_SPI_REG_CTRL	0x04	/* SPI Control */ | ||||
| #define AR71XX_SPI_REG_IOC	0x08	/* SPI I/O Control */ | ||||
| #define AR71XX_SPI_REG_RDS	0x0c	/* Read Data Shift */ | ||||
|  | ||||
| #define AR71XX_SPI_FS_GPIO	BIT(0)	/* Enable GPIO mode */ | ||||
|  | ||||
| #define AR71XX_SPI_CTRL_RD	BIT(6)	/* Remap Disable */ | ||||
| #define AR71XX_SPI_CTRL_DIV_MASK 0x3f | ||||
|  | ||||
| #define AR71XX_SPI_IOC_DO	BIT(0)	/* Data Out pin */ | ||||
| #define AR71XX_SPI_IOC_CLK	BIT(8)	/* CLK pin */ | ||||
| #define AR71XX_SPI_IOC_CS(n)	BIT(16 + (n)) | ||||
| #define AR71XX_SPI_IOC_CS0	AR71XX_SPI_IOC_CS(0) | ||||
| #define AR71XX_SPI_IOC_CS1	AR71XX_SPI_IOC_CS(1) | ||||
| #define AR71XX_SPI_IOC_CS2	AR71XX_SPI_IOC_CS(2) | ||||
| #define AR71XX_SPI_IOC_CS_ALL	(AR71XX_SPI_IOC_CS0 | AR71XX_SPI_IOC_CS1 | \ | ||||
| 				 AR71XX_SPI_IOC_CS2) | ||||
|  | ||||
| /* | ||||
|  * GPIO block | ||||
|  */ | ||||
| #define AR71XX_GPIO_REG_OE		0x00 | ||||
| #define AR71XX_GPIO_REG_IN		0x04 | ||||
| #define AR71XX_GPIO_REG_OUT		0x08 | ||||
| #define AR71XX_GPIO_REG_SET		0x0c | ||||
| #define AR71XX_GPIO_REG_CLEAR		0x10 | ||||
| #define AR71XX_GPIO_REG_INT_MODE	0x14 | ||||
| #define AR71XX_GPIO_REG_INT_TYPE	0x18 | ||||
| #define AR71XX_GPIO_REG_INT_POLARITY	0x1c | ||||
| #define AR71XX_GPIO_REG_INT_PENDING	0x20 | ||||
| #define AR71XX_GPIO_REG_INT_ENABLE	0x24 | ||||
| #define AR71XX_GPIO_REG_FUNC		0x28 | ||||
|  | ||||
| #define AR934X_GPIO_REG_OUT_FUNC0	0x2c | ||||
| #define AR934X_GPIO_REG_OUT_FUNC1	0x30 | ||||
| #define AR934X_GPIO_REG_OUT_FUNC2	0x34 | ||||
| #define AR934X_GPIO_REG_OUT_FUNC3	0x38 | ||||
| #define AR934X_GPIO_REG_OUT_FUNC4	0x3c | ||||
| #define AR934X_GPIO_REG_OUT_FUNC5	0x40 | ||||
| #define AR934X_GPIO_REG_FUNC		0x6c | ||||
|  | ||||
| #define AR71XX_GPIO_COUNT		16 | ||||
| #define AR724X_GPIO_COUNT		18 | ||||
| #define AR913X_GPIO_COUNT		22 | ||||
| #define AR933X_GPIO_COUNT		30 | ||||
| #define AR934X_GPIO_COUNT		23 | ||||
| #define QCA955X_GPIO_COUNT		24 | ||||
|  | ||||
| #define AR71XX_GPIO_FUNC_STEREO_EN		BIT(17) | ||||
| #define AR71XX_GPIO_FUNC_SLIC_EN		BIT(16) | ||||
| #define AR71XX_GPIO_FUNC_SPI_CS2_EN		BIT(13) | ||||
| #define AR71XX_GPIO_FUNC_SPI_CS1_EN		BIT(12) | ||||
| #define AR71XX_GPIO_FUNC_UART_EN		BIT(8) | ||||
| #define AR71XX_GPIO_FUNC_USB_OC_EN		BIT(4) | ||||
| #define AR71XX_GPIO_FUNC_USB_CLK_EN		BIT(0) | ||||
|  | ||||
| #define AR724X_GPIO_FUNC_GE0_MII_CLK_EN		BIT(19) | ||||
| #define AR724X_GPIO_FUNC_SPI_EN			BIT(18) | ||||
| #define AR724X_GPIO_FUNC_SPI_CS_EN2		BIT(14) | ||||
| #define AR724X_GPIO_FUNC_SPI_CS_EN1		BIT(13) | ||||
| #define AR724X_GPIO_FUNC_CLK_OBS5_EN		BIT(12) | ||||
| #define AR724X_GPIO_FUNC_CLK_OBS4_EN		BIT(11) | ||||
| #define AR724X_GPIO_FUNC_CLK_OBS3_EN		BIT(10) | ||||
| #define AR724X_GPIO_FUNC_CLK_OBS2_EN		BIT(9) | ||||
| #define AR724X_GPIO_FUNC_CLK_OBS1_EN		BIT(8) | ||||
| #define AR724X_GPIO_FUNC_ETH_SWITCH_LED4_EN	BIT(7) | ||||
| #define AR724X_GPIO_FUNC_ETH_SWITCH_LED3_EN	BIT(6) | ||||
| #define AR724X_GPIO_FUNC_ETH_SWITCH_LED2_EN	BIT(5) | ||||
| #define AR724X_GPIO_FUNC_ETH_SWITCH_LED1_EN	BIT(4) | ||||
| #define AR724X_GPIO_FUNC_ETH_SWITCH_LED0_EN	BIT(3) | ||||
| #define AR724X_GPIO_FUNC_UART_RTS_CTS_EN	BIT(2) | ||||
| #define AR724X_GPIO_FUNC_UART_EN		BIT(1) | ||||
| #define AR724X_GPIO_FUNC_JTAG_DISABLE		BIT(0) | ||||
|  | ||||
| #define AR913X_GPIO_FUNC_WMAC_LED_EN		BIT(22) | ||||
| #define AR913X_GPIO_FUNC_EXP_PORT_CS_EN		BIT(21) | ||||
| #define AR913X_GPIO_FUNC_I2S_REFCLKEN		BIT(20) | ||||
| #define AR913X_GPIO_FUNC_I2S_MCKEN		BIT(19) | ||||
| #define AR913X_GPIO_FUNC_I2S1_EN		BIT(18) | ||||
| #define AR913X_GPIO_FUNC_I2S0_EN		BIT(17) | ||||
| #define AR913X_GPIO_FUNC_SLIC_EN		BIT(16) | ||||
| #define AR913X_GPIO_FUNC_UART_RTSCTS_EN		BIT(9) | ||||
| #define AR913X_GPIO_FUNC_UART_EN		BIT(8) | ||||
| #define AR913X_GPIO_FUNC_USB_CLK_EN		BIT(4) | ||||
|  | ||||
| #define AR933X_GPIO_FUNC_SPDIF2TCK		BIT(31) | ||||
| #define AR933X_GPIO_FUNC_SPDIF_EN		BIT(30) | ||||
| #define AR933X_GPIO_FUNC_I2SO_22_18_EN		BIT(29) | ||||
| #define AR933X_GPIO_FUNC_I2S_MCK_EN		BIT(27) | ||||
| #define AR933X_GPIO_FUNC_I2SO_EN		BIT(26) | ||||
| #define AR933X_GPIO_FUNC_ETH_SWITCH_LED_DUPL	BIT(25) | ||||
| #define AR933X_GPIO_FUNC_ETH_SWITCH_LED_COLL	BIT(24) | ||||
| #define AR933X_GPIO_FUNC_ETH_SWITCH_LED_ACT	BIT(23) | ||||
| #define AR933X_GPIO_FUNC_SPI_EN			BIT(18) | ||||
| #define AR933X_GPIO_FUNC_SPI_CS_EN2		BIT(14) | ||||
| #define AR933X_GPIO_FUNC_SPI_CS_EN1		BIT(13) | ||||
| #define AR933X_GPIO_FUNC_ETH_SWITCH_LED4_EN	BIT(7) | ||||
| #define AR933X_GPIO_FUNC_ETH_SWITCH_LED3_EN	BIT(6) | ||||
| #define AR933X_GPIO_FUNC_ETH_SWITCH_LED2_EN	BIT(5) | ||||
| #define AR933X_GPIO_FUNC_ETH_SWITCH_LED1_EN	BIT(4) | ||||
| #define AR933X_GPIO_FUNC_ETH_SWITCH_LED0_EN	BIT(3) | ||||
| #define AR933X_GPIO_FUNC_UART_RTS_CTS_EN	BIT(2) | ||||
| #define AR933X_GPIO_FUNC_UART_EN		BIT(1) | ||||
| #define AR933X_GPIO_FUNC_JTAG_DISABLE		BIT(0) | ||||
|  | ||||
| #define AR934X_GPIO_FUNC_DDR_DQOE_EN	BIT(17) | ||||
| #define AR934X_GPIO_FUNC_SPI_CS_1_EN	BIT(14) | ||||
| #define AR934X_GPIO_FUNC_SPI_CS_0_EN	BIT(13) | ||||
|  | ||||
| #define AR934X_GPIO_OUT_GPIO		0x00 | ||||
|  | ||||
| /* | ||||
|  * MII_CTRL block | ||||
|  */ | ||||
| #define AR71XX_MII_REG_MII0_CTRL	0x00 | ||||
| #define AR71XX_MII_REG_MII1_CTRL	0x04 | ||||
|  | ||||
| #define AR71XX_MII_CTRL_IF_MASK		3 | ||||
| #define AR71XX_MII_CTRL_SPEED_SHIFT	4 | ||||
| #define AR71XX_MII_CTRL_SPEED_MASK	3 | ||||
| #define AR71XX_MII_CTRL_SPEED_10	0 | ||||
| #define AR71XX_MII_CTRL_SPEED_100	1 | ||||
| #define AR71XX_MII_CTRL_SPEED_1000	2 | ||||
|  | ||||
| #define AR71XX_MII0_CTRL_IF_GMII	0 | ||||
| #define AR71XX_MII0_CTRL_IF_MII		1 | ||||
| #define AR71XX_MII0_CTRL_IF_RGMII	2 | ||||
| #define AR71XX_MII0_CTRL_IF_RMII	3 | ||||
|  | ||||
| #define AR71XX_MII1_CTRL_IF_RGMII	0 | ||||
| #define AR71XX_MII1_CTRL_IF_RMII	1 | ||||
|  | ||||
| /* | ||||
|  * AR933X GMAC interface | ||||
|  */ | ||||
| #define AR933X_GMAC_REG_ETH_CFG		0x00 | ||||
|  | ||||
| #define AR933X_ETH_CFG_RGMII_GE0	BIT(0) | ||||
| #define AR933X_ETH_CFG_MII_GE0		BIT(1) | ||||
| #define AR933X_ETH_CFG_GMII_GE0		BIT(2) | ||||
| #define AR933X_ETH_CFG_MII_GE0_MASTER	BIT(3) | ||||
| #define AR933X_ETH_CFG_MII_GE0_SLAVE	BIT(4) | ||||
| #define AR933X_ETH_CFG_MII_GE0_ERR_EN	BIT(5) | ||||
| #define AR933X_ETH_CFG_SW_PHY_SWAP	BIT(7) | ||||
| #define AR933X_ETH_CFG_SW_PHY_ADDR_SWAP	BIT(8) | ||||
| #define AR933X_ETH_CFG_RMII_GE0		BIT(9) | ||||
| #define AR933X_ETH_CFG_RMII_GE0_SPD_10	0 | ||||
| #define AR933X_ETH_CFG_RMII_GE0_SPD_100	BIT(10) | ||||
|  | ||||
| /* | ||||
|  * AR934X GMAC Interface | ||||
|  */ | ||||
| #define AR934X_GMAC_REG_ETH_CFG		0x00 | ||||
|  | ||||
| #define AR934X_ETH_CFG_RGMII_GMAC0	BIT(0) | ||||
| #define AR934X_ETH_CFG_MII_GMAC0	BIT(1) | ||||
| #define AR934X_ETH_CFG_GMII_GMAC0	BIT(2) | ||||
| #define AR934X_ETH_CFG_MII_GMAC0_MASTER	BIT(3) | ||||
| #define AR934X_ETH_CFG_MII_GMAC0_SLAVE	BIT(4) | ||||
| #define AR934X_ETH_CFG_MII_GMAC0_ERR_EN	BIT(5) | ||||
| #define AR934X_ETH_CFG_SW_ONLY_MODE	BIT(6) | ||||
| #define AR934X_ETH_CFG_SW_PHY_SWAP	BIT(7) | ||||
| #define AR934X_ETH_CFG_SW_APB_ACCESS	BIT(9) | ||||
| #define AR934X_ETH_CFG_RMII_GMAC0	BIT(10) | ||||
| #define AR933X_ETH_CFG_MII_CNTL_SPEED	BIT(11) | ||||
| #define AR934X_ETH_CFG_RMII_GMAC0_MASTER BIT(12) | ||||
| #define AR933X_ETH_CFG_SW_ACC_MSB_FIRST	BIT(13) | ||||
|  | ||||
| /* | ||||
|  * QCA955X GMAC Interface | ||||
|  */ | ||||
|  | ||||
| #define QCA955X_GMAC_REG_ETH_CFG	0x00 | ||||
|  | ||||
| #define QCA955X_ETH_CFG_RGMII_GMAC0	BIT(0) | ||||
| #define QCA955X_ETH_CFG_SGMII_GMAC0	BIT(6) | ||||
|  | ||||
| #endif /* __ASM_MACH_AR71XX_REGS_H */ | ||||
| @@ -1,56 +0,0 @@ | ||||
| /* | ||||
|  * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards | ||||
|  * | ||||
|  * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms of the GNU General Public License version 2 as published | ||||
|  * by the Free Software Foundation. | ||||
|  */ | ||||
|  | ||||
| #include <stddef.h> | ||||
| #include "config.h" | ||||
| #include "ar71xx_regs.h" | ||||
|  | ||||
| #define READREG(r)	*(volatile unsigned int *)(r) | ||||
| #define WRITEREG(r,v)	*(volatile unsigned int *)(r) = v | ||||
|  | ||||
| #define KSEG1ADDR(_x)	(((_x) & 0x1fffffff) | 0xa0000000) | ||||
|  | ||||
| #define UART_BASE	0xb8020000 | ||||
|  | ||||
| #define UART_TX		0 | ||||
| #define UART_LSR	5 | ||||
|  | ||||
| #define UART_LSR_THRE   0x20 | ||||
|  | ||||
| #define UART_READ(r)		READREG(UART_BASE + 4 * (r)) | ||||
| #define UART_WRITE(r,v)		WRITEREG(UART_BASE + 4 * (r), (v)) | ||||
|  | ||||
| void board_putc(int ch) | ||||
| { | ||||
| 	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0); | ||||
| 	UART_WRITE(UART_TX, ch); | ||||
| 	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0); | ||||
| } | ||||
|  | ||||
| #ifdef CONFIG_BOARD_TL_WR1043ND_V1 | ||||
| static void tlwr1043nd_init(void) | ||||
| { | ||||
| 	unsigned int reg = KSEG1ADDR(AR71XX_RESET_BASE); | ||||
| 	unsigned int t; | ||||
|  | ||||
| 	t = READREG(reg + AR913X_RESET_REG_RESET_MODULE); | ||||
| 	t |= AR71XX_RESET_GE0_PHY; | ||||
| 	WRITEREG(reg + AR913X_RESET_REG_RESET_MODULE, t); | ||||
| 	/* flush write */ | ||||
| 	t = READREG(reg + AR913X_RESET_REG_RESET_MODULE); | ||||
| } | ||||
| #else | ||||
| static inline void tlwr1043nd_init(void) {} | ||||
| #endif | ||||
|  | ||||
| void board_init(void) | ||||
| { | ||||
| 	tlwr1043nd_init(); | ||||
| } | ||||
| @@ -1,33 +0,0 @@ | ||||
| /* | ||||
|  * Arch specific code for Lantiq based boards | ||||
|  * | ||||
|  * Copyright (C) 2013 John Crispin <blogic@openwrt.org> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms of the GNU General Public License version 2 as published | ||||
|  * by the Free Software Foundation. | ||||
|  */ | ||||
|  | ||||
| #include <stddef.h> | ||||
| #include "config.h" | ||||
|  | ||||
| #define READREG(r)		*(volatile unsigned int *)(r) | ||||
| #define WRITEREG(r,v)		*(volatile unsigned int *)(r) = v | ||||
|  | ||||
| #define UART_BASE		0xbe100c00 | ||||
| #define ASC_TBUF		(UART_BASE | 0x20) | ||||
| #define ASC_FSTAT		(UART_BASE | 0x48) | ||||
|  | ||||
| #define TXMASK          0x3F00 | ||||
| #define TXOFFSET        8 | ||||
|  | ||||
| void board_putc(char c) | ||||
| { | ||||
| 	while ((READREG(ASC_FSTAT) & TXMASK) >> TXOFFSET); | ||||
|  | ||||
| 	WRITEREG(ASC_TBUF, c); | ||||
| } | ||||
|  | ||||
| void board_init(void) | ||||
| { | ||||
| } | ||||
| @@ -1,42 +0,0 @@ | ||||
| /* | ||||
|  * Arch specific code for Ralink based boards | ||||
|  * | ||||
|  * Copyright (C) 2013 John Crispin <blogic@openwrt.org> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms of the GNU General Public License version 2 as published | ||||
|  * by the Free Software Foundation. | ||||
|  */ | ||||
|  | ||||
| #include <stddef.h> | ||||
| #include "config.h" | ||||
|  | ||||
| #define READREG(r)		*(volatile unsigned int *)(r) | ||||
| #define WRITEREG(r,v)		*(volatile unsigned int *)(r) = v | ||||
|  | ||||
| #define KSEG1ADDR(_x)		(((_x) & 0x1fffffff) | 0xa0000000) | ||||
|  | ||||
| #ifdef CONFIG_SOC_RT288X | ||||
| #define UART_BASE		0xb0300c00 | ||||
| #else | ||||
| #define UART_BASE		0xb0000c00 | ||||
| #endif | ||||
|  | ||||
| #define UART_TX			1 | ||||
| #define UART_LSR		7 | ||||
|  | ||||
| #define UART_LSR_THRE		0x20 | ||||
|  | ||||
| #define UART_READ(r)		READREG(UART_BASE + 4 * (r)) | ||||
| #define UART_WRITE(r,v)		WRITEREG(UART_BASE + 4 * (r), (v)) | ||||
|  | ||||
| void board_putc(int ch) | ||||
| { | ||||
| 	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0); | ||||
| 	UART_WRITE(UART_TX, ch); | ||||
| 	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0); | ||||
| } | ||||
|  | ||||
| void board_init(void) | ||||
| { | ||||
| } | ||||
| @@ -1,43 +0,0 @@ | ||||
| /* | ||||
|  * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards | ||||
|  * | ||||
|  * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||||
|  * | ||||
|  * The cache manipulation routine has been taken from the U-Boot project. | ||||
|  *	(C) Copyright 2003 | ||||
|  *	Wolfgang Denk, DENX Software Engineering, <wd@denx.de> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms of the GNU General Public License version 2 as published | ||||
|  * by the Free Software Foundation. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include "cache.h" | ||||
| #include "cacheops.h" | ||||
| #include "config.h" | ||||
|  | ||||
| #define cache_op(op,addr)						\ | ||||
| 	__asm__ __volatile__(						\ | ||||
| 	"	.set	push					\n"	\ | ||||
| 	"	.set	noreorder				\n"	\ | ||||
| 	"	.set	mips3\n\t				\n"	\ | ||||
| 	"	cache	%0, %1					\n"	\ | ||||
| 	"	.set	pop					\n"	\ | ||||
| 	:								\ | ||||
| 	: "i" (op), "R" (*(unsigned char *)(addr))) | ||||
|  | ||||
| void flush_cache(unsigned long start_addr, unsigned long size) | ||||
| { | ||||
| 	unsigned long lsize = CONFIG_CACHELINE_SIZE; | ||||
| 	unsigned long addr = start_addr & ~(lsize - 1); | ||||
| 	unsigned long aend = (start_addr + size - 1) & ~(lsize - 1); | ||||
|  | ||||
| 	while (1) { | ||||
| 		cache_op(Hit_Writeback_Inv_D, addr); | ||||
| 		cache_op(Hit_Invalidate_I, addr); | ||||
| 		if (addr == aend) | ||||
| 			break; | ||||
| 		addr += lsize; | ||||
| 	} | ||||
| } | ||||
| @@ -1,17 +0,0 @@ | ||||
| /* | ||||
|  * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards | ||||
|  * | ||||
|  * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms of the GNU General Public License version 2 as published | ||||
|  * by the Free Software Foundation. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifndef __CACHE_H | ||||
| #define __CACHE_H | ||||
|  | ||||
| void flush_cache(unsigned long start_addr, unsigned long size); | ||||
|  | ||||
| #endif /* __CACHE_H */ | ||||
| @@ -1,85 +0,0 @@ | ||||
| /* | ||||
|  * Cache operations for the cache instruction. | ||||
|  * | ||||
|  * This file is subject to the terms and conditions of the GNU General Public | ||||
|  * License.  See the file "COPYING" in the main directory of this archive | ||||
|  * for more details. | ||||
|  * | ||||
|  * (C) Copyright 1996, 97, 99, 2002, 03 Ralf Baechle | ||||
|  * (C) Copyright 1999 Silicon Graphics, Inc. | ||||
|  */ | ||||
| #ifndef	__ASM_CACHEOPS_H | ||||
| #define	__ASM_CACHEOPS_H | ||||
|  | ||||
| /* | ||||
|  * Cache Operations available on all MIPS processors with R4000-style caches | ||||
|  */ | ||||
| #define Index_Invalidate_I      0x00 | ||||
| #define Index_Writeback_Inv_D   0x01 | ||||
| #define Index_Load_Tag_I	0x04 | ||||
| #define Index_Load_Tag_D	0x05 | ||||
| #define Index_Store_Tag_I	0x08 | ||||
| #define Index_Store_Tag_D	0x09 | ||||
| #if defined(CONFIG_CPU_LOONGSON2) | ||||
| #define Hit_Invalidate_I	0x00 | ||||
| #else | ||||
| #define Hit_Invalidate_I	0x10 | ||||
| #endif | ||||
| #define Hit_Invalidate_D	0x11 | ||||
| #define Hit_Writeback_Inv_D	0x15 | ||||
|  | ||||
| /* | ||||
|  * R4000-specific cacheops | ||||
|  */ | ||||
| #define Create_Dirty_Excl_D	0x0d | ||||
| #define Fill			0x14 | ||||
| #define Hit_Writeback_I		0x18 | ||||
| #define Hit_Writeback_D		0x19 | ||||
|  | ||||
| /* | ||||
|  * R4000SC and R4400SC-specific cacheops | ||||
|  */ | ||||
| #define Index_Invalidate_SI     0x02 | ||||
| #define Index_Writeback_Inv_SD  0x03 | ||||
| #define Index_Load_Tag_SI	0x06 | ||||
| #define Index_Load_Tag_SD	0x07 | ||||
| #define Index_Store_Tag_SI	0x0A | ||||
| #define Index_Store_Tag_SD	0x0B | ||||
| #define Create_Dirty_Excl_SD	0x0f | ||||
| #define Hit_Invalidate_SI	0x12 | ||||
| #define Hit_Invalidate_SD	0x13 | ||||
| #define Hit_Writeback_Inv_SD	0x17 | ||||
| #define Hit_Writeback_SD	0x1b | ||||
| #define Hit_Set_Virtual_SI	0x1e | ||||
| #define Hit_Set_Virtual_SD	0x1f | ||||
|  | ||||
| /* | ||||
|  * R5000-specific cacheops | ||||
|  */ | ||||
| #define R5K_Page_Invalidate_S	0x17 | ||||
|  | ||||
| /* | ||||
|  * RM7000-specific cacheops | ||||
|  */ | ||||
| #define Page_Invalidate_T	0x16 | ||||
|  | ||||
| /* | ||||
|  * R10000-specific cacheops | ||||
|  * | ||||
|  * Cacheops 0x02, 0x06, 0x0a, 0x0c-0x0e, 0x16, 0x1a and 0x1e are unused. | ||||
|  * Most of the _S cacheops are identical to the R4000SC _SD cacheops. | ||||
|  */ | ||||
| #define Index_Writeback_Inv_S	0x03 | ||||
| #define Index_Load_Tag_S	0x07 | ||||
| #define Index_Store_Tag_S	0x0B | ||||
| #define Hit_Invalidate_S	0x13 | ||||
| #define Cache_Barrier		0x14 | ||||
| #define Hit_Writeback_Inv_S	0x17 | ||||
| #define Index_Load_Data_I	0x18 | ||||
| #define Index_Load_Data_D	0x19 | ||||
| #define Index_Load_Data_S	0x1b | ||||
| #define Index_Store_Data_I	0x1c | ||||
| #define Index_Store_Data_D	0x1d | ||||
| #define Index_Store_Data_S	0x1f | ||||
|  | ||||
| #endif	/* __ASM_CACHEOPS_H */ | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards | ||||
|  * | ||||
|  * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms of the GNU General Public License version 2 as published | ||||
|  * by the Free Software Foundation. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifndef _CONFIG_H_ | ||||
| #define _CONFIG_H_ | ||||
|  | ||||
| #ifndef CONFIG_FLASH_OFFS | ||||
| #define CONFIG_FLASH_OFFS	0 | ||||
| #endif | ||||
|  | ||||
| #ifndef CONFIG_FLASH_MAX | ||||
| #define CONFIG_FLASH_MAX	0 | ||||
| #endif | ||||
|  | ||||
| #ifndef CONFIG_FLASH_STEP | ||||
| #define CONFIG_FLASH_STEP	0x1000 | ||||
| #endif | ||||
|  | ||||
| #endif /* _CONFIG_H_ */ | ||||
| @@ -1,39 +0,0 @@ | ||||
| /* | ||||
|  * Copyright (C) 1994, 1995, 1996, 1997, 2000, 2001 by Ralf Baechle | ||||
|  * | ||||
|  * Copyright (C) 2001, Monta Vista Software | ||||
|  * Author: jsun@mvista.com or jsun@junsun.net | ||||
|  */ | ||||
| #ifndef _cp0regdef_h_ | ||||
| #define _cp0regdef_h_ | ||||
|  | ||||
| #define CP0_INDEX $0 | ||||
| #define CP0_RANDOM $1 | ||||
| #define CP0_ENTRYLO0 $2 | ||||
| #define CP0_ENTRYLO1 $3 | ||||
| #define CP0_CONTEXT $4 | ||||
| #define CP0_PAGEMASK $5 | ||||
| #define CP0_WIRED $6 | ||||
| #define CP0_BADVADDR $8 | ||||
| #define CP0_COUNT $9 | ||||
| #define CP0_ENTRYHI $10 | ||||
| #define CP0_COMPARE $11 | ||||
| #define CP0_STATUS $12 | ||||
| #define CP0_CAUSE $13 | ||||
| #define CP0_EPC $14 | ||||
| #define CP0_PRID $15 | ||||
| #define CP0_CONFIG $16 | ||||
| #define CP0_LLADDR $17 | ||||
| #define CP0_WATCHLO $18 | ||||
| #define CP0_WATCHHI $19 | ||||
| #define CP0_XCONTEXT $20 | ||||
| #define CP0_FRAMEMASK $21 | ||||
| #define CP0_DIAGNOSTIC $22 | ||||
| #define CP0_PERFORMANCE $25 | ||||
| #define CP0_ECC $26 | ||||
| #define CP0_CACHEERR $27 | ||||
| #define CP0_TAGLO $28 | ||||
| #define CP0_TAGHI $29 | ||||
| #define CP0_ERROREPC $30 | ||||
|  | ||||
| #endif | ||||
| @@ -1,121 +0,0 @@ | ||||
| /* | ||||
|  * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards | ||||
|  * | ||||
|  * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||||
|  * | ||||
|  * Some parts of this code was based on the OpenWrt specific lzma-loader | ||||
|  * for the BCM47xx and ADM5120 based boards: | ||||
|  *	Copyright (C) 2004 Manuel Novoa III (mjn3@codepoet.org) | ||||
|  *	Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms of the GNU General Public License version 2 as published | ||||
|  * by the Free Software Foundation. | ||||
|  */ | ||||
|  | ||||
| #include <asm/asm.h> | ||||
| #include <asm/regdef.h> | ||||
| #include "cp0regdef.h" | ||||
| #include "cacheops.h" | ||||
| #include "config.h" | ||||
|  | ||||
| #define KSEG0		0x80000000 | ||||
|  | ||||
| 	.macro	ehb | ||||
| 	sll     zero, 3 | ||||
| 	.endm | ||||
|  | ||||
| 	.text | ||||
|  | ||||
| LEAF(startup) | ||||
| 	.set noreorder | ||||
| 	.set mips32 | ||||
|  | ||||
| 	mtc0	zero, CP0_WATCHLO	# clear watch registers | ||||
| 	mtc0	zero, CP0_WATCHHI | ||||
| 	mtc0	zero, CP0_CAUSE		# clear before writing status register | ||||
|  | ||||
| 	mfc0	t0, CP0_STATUS | ||||
| 	li	t1, 0x1000001f | ||||
| 	or	t0, t1 | ||||
| 	xori	t0, 0x1f | ||||
| 	mtc0	t0, CP0_STATUS | ||||
| 	ehb | ||||
|  | ||||
| 	mtc0	zero, CP0_COUNT | ||||
| 	mtc0	zero, CP0_COMPARE | ||||
| 	ehb | ||||
|  | ||||
| 	la	t0, __reloc_label	# get linked address of label | ||||
| 	bal	__reloc_label		# branch and link to label to | ||||
| 	nop				# get actual address | ||||
| __reloc_label: | ||||
| 	subu	t0, ra, t0		# get reloc_delta | ||||
|  | ||||
| 	beqz	t0, __reloc_done         # if delta is 0 we are in the right place | ||||
| 	nop | ||||
|  | ||||
| 	/* Copy our code to the right place */ | ||||
| 	la	t1, _code_start		# get linked address of _code_start | ||||
| 	la	t2, _code_end		# get linked address of _code_end | ||||
| 	addu	t0, t0, t1		# calculate actual address of _code_start | ||||
|  | ||||
| __reloc_copy: | ||||
| 	lw	t3, 0(t0) | ||||
| 	sw	t3, 0(t1) | ||||
| 	add	t1, 4 | ||||
| 	blt	t1, t2, __reloc_copy | ||||
| 	add	t0, 4 | ||||
|  | ||||
| 	/* flush cache */ | ||||
| 	la	t0, _code_start | ||||
| 	la	t1, _code_end | ||||
|  | ||||
| 	li	t2, ~(CONFIG_CACHELINE_SIZE - 1) | ||||
| 	and	t0, t2 | ||||
| 	and	t1, t2 | ||||
| 	li	t2, CONFIG_CACHELINE_SIZE | ||||
|  | ||||
| 	b	__flush_check | ||||
| 	nop | ||||
|  | ||||
| __flush_line: | ||||
| 	cache	Hit_Writeback_Inv_D, 0(t0) | ||||
| 	cache	Hit_Invalidate_I, 0(t0) | ||||
| 	add	t0, t2 | ||||
|  | ||||
| __flush_check: | ||||
| 	bne	t0, t1, __flush_line | ||||
| 	nop | ||||
|  | ||||
| 	sync | ||||
|  | ||||
| __reloc_done: | ||||
|  | ||||
| 	/* clear bss */ | ||||
| 	la	t0, _bss_start | ||||
| 	la	t1, _bss_end | ||||
| 	b	__bss_check | ||||
| 	nop | ||||
|  | ||||
| __bss_fill: | ||||
| 	sw	zero, 0(t0) | ||||
| 	addi	t0, 4 | ||||
|  | ||||
| __bss_check: | ||||
| 	bne	t0, t1, __bss_fill | ||||
| 	nop | ||||
|  | ||||
| 	/* Setup new "C" stack */ | ||||
| 	la	sp, _stack | ||||
|  | ||||
| 	/* reserve stack space for a0-a3 registers */ | ||||
| 	subu	sp, 16 | ||||
|  | ||||
| 	/* jump to the decompressor routine */ | ||||
| 	la	t0, loader_main | ||||
| 	jr	t0 | ||||
| 	nop | ||||
|  | ||||
| 	.set reorder | ||||
| END(startup) | ||||
| @@ -1 +0,0 @@ | ||||
| CACHE_FLAGS+=-DCONFIG_ICACHE_SIZE="(32 * 1024)" -DCONFIG_DCACHE_SIZE="(32 * 1024)" -DCONFIG_CACHELINE_SIZE=32 | ||||
| @@ -1,263 +0,0 @@ | ||||
| /* | ||||
|  * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards | ||||
|  * | ||||
|  * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||||
|  * | ||||
|  * Some parts of this code was based on the OpenWrt specific lzma-loader | ||||
|  * for the BCM47xx and ADM5120 based boards: | ||||
|  *	Copyright (C) 2004 Manuel Novoa III (mjn3@codepoet.org) | ||||
|  *	Copyright (C) 2005 Mineharu Takahara <mtakahar@yahoo.com> | ||||
|  *	Copyright (C) 2005 by Oleg I. Vdovikin <oleg@cs.msu.su> | ||||
|  * | ||||
|  * The image_header structure has been taken from the U-Boot project. | ||||
|  *	(C) Copyright 2008 Semihalf | ||||
|  *	(C) Copyright 2000-2005 | ||||
|  *	Wolfgang Denk, DENX Software Engineering, wd@denx.de. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms of the GNU General Public License version 2 as published | ||||
|  * by the Free Software Foundation. | ||||
|  */ | ||||
|  | ||||
| #include <stddef.h> | ||||
| #include <stdint.h> | ||||
|  | ||||
| #include "config.h" | ||||
| #include "cache.h" | ||||
| #include "printf.h" | ||||
| #include "LzmaDecode.h" | ||||
|  | ||||
| #define AR71XX_FLASH_START	0x1f000000 | ||||
| #define AR71XX_FLASH_END	0x1fe00000 | ||||
|  | ||||
| #define KSEG0			0x80000000 | ||||
| #define KSEG1			0xa0000000 | ||||
|  | ||||
| #define KSEG1ADDR(a)		((((unsigned)(a)) & 0x1fffffffU) | KSEG1) | ||||
|  | ||||
| #undef LZMA_DEBUG | ||||
|  | ||||
| #ifdef LZMA_DEBUG | ||||
| #  define DBG(f, a...)	printf(f, ## a) | ||||
| #else | ||||
| #  define DBG(f, a...)	do {} while (0) | ||||
| #endif | ||||
|  | ||||
| #define IH_MAGIC_OKLI		0x4f4b4c49	/* 'OKLI' */ | ||||
|  | ||||
| #define IH_NMLEN		32	/* Image Name Length		*/ | ||||
|  | ||||
| typedef struct image_header { | ||||
| 	uint32_t	ih_magic;	/* Image Header Magic Number	*/ | ||||
| 	uint32_t	ih_hcrc;	/* Image Header CRC Checksum	*/ | ||||
| 	uint32_t	ih_time;	/* Image Creation Timestamp	*/ | ||||
| 	uint32_t	ih_size;	/* Image Data Size		*/ | ||||
| 	uint32_t	ih_load;	/* Data	 Load  Address		*/ | ||||
| 	uint32_t	ih_ep;		/* Entry Point Address		*/ | ||||
| 	uint32_t	ih_dcrc;	/* Image Data CRC Checksum	*/ | ||||
| 	uint8_t		ih_os;		/* Operating System		*/ | ||||
| 	uint8_t		ih_arch;	/* CPU architecture		*/ | ||||
| 	uint8_t		ih_type;	/* Image Type			*/ | ||||
| 	uint8_t		ih_comp;	/* Compression Type		*/ | ||||
| 	uint8_t		ih_name[IH_NMLEN];	/* Image Name		*/ | ||||
| } image_header_t; | ||||
|  | ||||
| /* beyond the image end, size not known in advance */ | ||||
| extern unsigned char workspace[]; | ||||
| extern void board_init(void); | ||||
|  | ||||
| static CLzmaDecoderState lzma_state; | ||||
| static unsigned char *lzma_data; | ||||
| static unsigned long lzma_datasize; | ||||
| static unsigned long lzma_outsize; | ||||
| static unsigned long kernel_la; | ||||
|  | ||||
| #ifdef CONFIG_KERNEL_CMDLINE | ||||
| #define kernel_argc	1 | ||||
| static const char kernel_cmdline[] = CONFIG_KERNEL_CMDLINE; | ||||
| static const char *kernel_argv[] = { | ||||
| 	kernel_cmdline, | ||||
| 	NULL, | ||||
| }; | ||||
| #endif /* CONFIG_KERNEL_CMDLINE */ | ||||
|  | ||||
| static void halt(void) | ||||
| { | ||||
| 	printf("\nSystem halted!\n"); | ||||
| 	for(;;); | ||||
| } | ||||
|  | ||||
| static __inline__ unsigned long get_be32(void *buf) | ||||
| { | ||||
| 	unsigned char *p = buf; | ||||
|  | ||||
| 	return (((unsigned long) p[0] << 24) + | ||||
| 	        ((unsigned long) p[1] << 16) + | ||||
| 	        ((unsigned long) p[2] << 8) + | ||||
| 	        (unsigned long) p[3]); | ||||
| } | ||||
|  | ||||
| static __inline__ unsigned char lzma_get_byte(void) | ||||
| { | ||||
| 	unsigned char c; | ||||
|  | ||||
| 	lzma_datasize--; | ||||
| 	c = *lzma_data++; | ||||
|  | ||||
| 	return c; | ||||
| } | ||||
|  | ||||
| static int lzma_init_props(void) | ||||
| { | ||||
| 	unsigned char props[LZMA_PROPERTIES_SIZE]; | ||||
| 	int res; | ||||
| 	int i; | ||||
|  | ||||
| 	/* read lzma properties */ | ||||
| 	for (i = 0; i < LZMA_PROPERTIES_SIZE; i++) | ||||
| 		props[i] = lzma_get_byte(); | ||||
|  | ||||
| 	/* read the lower half of uncompressed size in the header */ | ||||
| 	lzma_outsize = ((SizeT) lzma_get_byte()) + | ||||
| 		       ((SizeT) lzma_get_byte() << 8) + | ||||
| 		       ((SizeT) lzma_get_byte() << 16) + | ||||
| 		       ((SizeT) lzma_get_byte() << 24); | ||||
|  | ||||
| 	/* skip rest of the header (upper half of uncompressed size) */ | ||||
| 	for (i = 0; i < 4; i++) | ||||
| 		lzma_get_byte(); | ||||
|  | ||||
| 	res = LzmaDecodeProperties(&lzma_state.Properties, props, | ||||
| 					LZMA_PROPERTIES_SIZE); | ||||
| 	return res; | ||||
| } | ||||
|  | ||||
| static int lzma_decompress(unsigned char *outStream) | ||||
| { | ||||
| 	SizeT ip, op; | ||||
| 	int ret; | ||||
|  | ||||
| 	lzma_state.Probs = (CProb *) workspace; | ||||
|  | ||||
| 	ret = LzmaDecode(&lzma_state, lzma_data, lzma_datasize, &ip, outStream, | ||||
| 			 lzma_outsize, &op); | ||||
|  | ||||
| 	if (ret != LZMA_RESULT_OK) { | ||||
| 		int i; | ||||
|  | ||||
| 		DBG("LzmaDecode error %d at %08x, osize:%d ip:%d op:%d\n", | ||||
| 		    ret, lzma_data + ip, lzma_outsize, ip, op); | ||||
|  | ||||
| 		for (i = 0; i < 16; i++) | ||||
| 			DBG("%02x ", lzma_data[ip + i]); | ||||
|  | ||||
| 		DBG("\n"); | ||||
| 	} | ||||
|  | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| #if (LZMA_WRAPPER) | ||||
| static void lzma_init_data(void) | ||||
| { | ||||
| 	extern unsigned char _lzma_data_start[]; | ||||
| 	extern unsigned char _lzma_data_end[]; | ||||
|  | ||||
| 	kernel_la = LOADADDR; | ||||
| 	lzma_data = _lzma_data_start; | ||||
| 	lzma_datasize = _lzma_data_end - _lzma_data_start; | ||||
| } | ||||
| #else | ||||
| static void lzma_init_data(void) | ||||
| { | ||||
| 	struct image_header *hdr = NULL; | ||||
| 	unsigned char *flash_base; | ||||
| 	unsigned long flash_ofs; | ||||
| 	unsigned long kernel_ofs; | ||||
| 	unsigned long kernel_size; | ||||
|  | ||||
| 	flash_base = (unsigned char *) KSEG1ADDR(AR71XX_FLASH_START); | ||||
|  | ||||
| 	printf("Looking for OpenWrt image... "); | ||||
|  | ||||
| 	for (flash_ofs = CONFIG_FLASH_OFFS; | ||||
| 	     flash_ofs <= (CONFIG_FLASH_OFFS + CONFIG_FLASH_MAX); | ||||
| 	     flash_ofs += CONFIG_FLASH_STEP) { | ||||
| 		unsigned long magic; | ||||
| 		unsigned char *p; | ||||
|  | ||||
| 		p = flash_base + flash_ofs; | ||||
| 		magic = get_be32(p); | ||||
| 		if (magic == IH_MAGIC_OKLI) { | ||||
| 			hdr = (struct image_header *) p; | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (hdr == NULL) { | ||||
| 		printf("not found!\n"); | ||||
| 		halt(); | ||||
| 	} | ||||
|  | ||||
| 	printf("found at 0x%08x\n", flash_base + flash_ofs); | ||||
|  | ||||
| 	kernel_ofs = sizeof(struct image_header); | ||||
| 	kernel_size = get_be32(&hdr->ih_size); | ||||
| 	kernel_la = get_be32(&hdr->ih_load); | ||||
|  | ||||
| 	lzma_data = flash_base + flash_ofs + kernel_ofs; | ||||
| 	lzma_datasize = kernel_size; | ||||
| } | ||||
| #endif /* (LZMA_WRAPPER) */ | ||||
|  | ||||
| void loader_main(unsigned long reg_a0, unsigned long reg_a1, | ||||
| 		 unsigned long reg_a2, unsigned long reg_a3) | ||||
| { | ||||
| 	void (*kernel_entry) (unsigned long, unsigned long, unsigned long, | ||||
| 			      unsigned long); | ||||
| 	int res; | ||||
|  | ||||
| 	board_init(); | ||||
|  | ||||
| 	printf("\n\nOpenWrt kernel loader for MIPS based SoC\n"); | ||||
| 	printf("Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>\n"); | ||||
|  | ||||
| 	lzma_init_data(); | ||||
|  | ||||
| 	res = lzma_init_props(); | ||||
| 	if (res != LZMA_RESULT_OK) { | ||||
| 		printf("Incorrect LZMA stream properties!\n"); | ||||
| 		halt(); | ||||
| 	} | ||||
|  | ||||
| 	printf("Decompressing kernel... "); | ||||
|  | ||||
| 	res = lzma_decompress((unsigned char *) kernel_la); | ||||
| 	if (res != LZMA_RESULT_OK) { | ||||
| 		printf("failed, "); | ||||
| 		switch (res) { | ||||
| 		case LZMA_RESULT_DATA_ERROR: | ||||
| 			printf("data error!\n"); | ||||
| 			break; | ||||
| 		default: | ||||
| 			printf("unknown error %d!\n", res); | ||||
| 		} | ||||
| 		halt(); | ||||
| 	} else { | ||||
| 		printf("done!\n"); | ||||
| 	} | ||||
|  | ||||
| 	flush_cache(kernel_la, lzma_outsize); | ||||
|  | ||||
| 	printf("Starting kernel at %08x...\n\n", kernel_la); | ||||
|  | ||||
| #ifdef CONFIG_KERNEL_CMDLINE | ||||
| 	reg_a0 = kernel_argc; | ||||
| 	reg_a1 = (unsigned long) kernel_argv; | ||||
| 	reg_a2 = 0; | ||||
| 	reg_a3 = 0; | ||||
| #endif | ||||
|  | ||||
| 	kernel_entry = (void *) kernel_la; | ||||
| 	kernel_entry(reg_a0, reg_a1, reg_a2, reg_a3); | ||||
| } | ||||
| @@ -1,35 +0,0 @@ | ||||
| OUTPUT_ARCH(mips) | ||||
| SECTIONS { | ||||
| 	.text : { | ||||
| 		_code_start = .; | ||||
| 		*(.text) | ||||
| 		*(.text.*) | ||||
| 		*(.rodata) | ||||
| 		*(.rodata.*) | ||||
| 		*(.data.lzma) | ||||
| 	} | ||||
|  | ||||
| 	. = ALIGN(32); | ||||
| 	.data : { | ||||
| 		*(.data) | ||||
| 		*(.data.*) | ||||
| 		. = . + 524288;		/* workaround for buggy bootloaders */ | ||||
| 	} | ||||
|  | ||||
| 	. = ALIGN(32); | ||||
| 	_code_end = .; | ||||
|  | ||||
| 	_bss_start = .; | ||||
| 	.bss : { | ||||
| 		*(.bss) | ||||
| 		*(.bss.*) | ||||
| 	} | ||||
|  | ||||
| 	. = ALIGN(32); | ||||
| 	_bss_end = .; | ||||
|  | ||||
| 	. = . + 8192; | ||||
| 	_stack = .; | ||||
|  | ||||
| 	workspace = .; | ||||
| } | ||||
| @@ -1,10 +0,0 @@ | ||||
| OUTPUT_ARCH(mips) | ||||
| SECTIONS { | ||||
| 	.text : { | ||||
| 		startup = .; | ||||
| 		*(.text) | ||||
| 		*(.text.*) | ||||
| 		*(.data) | ||||
| 		*(.data.*) | ||||
| 	} | ||||
| } | ||||
| @@ -1,8 +0,0 @@ | ||||
| OUTPUT_ARCH(mips) | ||||
| SECTIONS { | ||||
| 	.data.lzma : { | ||||
| 		_lzma_data_start = .; | ||||
| 		*(.data) | ||||
| 		_lzma_data_end = .; | ||||
| 	} | ||||
| } | ||||
| @@ -1,350 +0,0 @@ | ||||
| /* | ||||
|  * Copyright (C) 2001 MontaVista Software Inc. | ||||
|  * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net | ||||
|  * | ||||
|  * 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. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include	"printf.h" | ||||
|  | ||||
| extern void board_putc(int ch); | ||||
|  | ||||
| /* this is the maximum width for a variable */ | ||||
| #define		LP_MAX_BUF	256 | ||||
|  | ||||
| /* macros */ | ||||
| #define		IsDigit(x)	( ((x) >= '0') && ((x) <= '9') ) | ||||
| #define		Ctod(x)		( (x) - '0') | ||||
|  | ||||
| /* forward declaration */ | ||||
| static int PrintChar(char *, char, int, int); | ||||
| static int PrintString(char *, char *, int, int); | ||||
| static int PrintNum(char *, unsigned long, int, int, int, int, char, int); | ||||
|  | ||||
| /* private variable */ | ||||
| static const char theFatalMsg[] = "fatal error in lp_Print!"; | ||||
|  | ||||
| /* -*- | ||||
|  * A low level printf() function. | ||||
|  */ | ||||
| static void | ||||
| lp_Print(void (*output)(void *, char *, int), | ||||
| 	 void * arg, | ||||
| 	 char *fmt, | ||||
| 	 va_list ap) | ||||
| { | ||||
|  | ||||
| #define 	OUTPUT(arg, s, l)  \ | ||||
|   { if (((l) < 0) || ((l) > LP_MAX_BUF)) { \ | ||||
|        (*output)(arg, (char*)theFatalMsg, sizeof(theFatalMsg)-1); for(;;); \ | ||||
|     } else { \ | ||||
|       (*output)(arg, s, l); \ | ||||
|     } \ | ||||
|   } | ||||
|  | ||||
|     char buf[LP_MAX_BUF]; | ||||
|  | ||||
|     char c; | ||||
|     char *s; | ||||
|     long int num; | ||||
|  | ||||
|     int longFlag; | ||||
|     int negFlag; | ||||
|     int width; | ||||
|     int prec; | ||||
|     int ladjust; | ||||
|     char padc; | ||||
|  | ||||
|     int length; | ||||
|  | ||||
|     for(;;) { | ||||
| 	{ | ||||
| 	    /* scan for the next '%' */ | ||||
| 	    char *fmtStart = fmt; | ||||
| 	    while ( (*fmt != '\0') && (*fmt != '%')) { | ||||
| 		fmt ++; | ||||
| 	    } | ||||
|  | ||||
| 	    /* flush the string found so far */ | ||||
| 	    OUTPUT(arg, fmtStart, fmt-fmtStart); | ||||
|  | ||||
| 	    /* are we hitting the end? */ | ||||
| 	    if (*fmt == '\0') break; | ||||
| 	} | ||||
|  | ||||
| 	/* we found a '%' */ | ||||
| 	fmt ++; | ||||
|  | ||||
| 	/* check for long */ | ||||
| 	if (*fmt == 'l') { | ||||
| 	    longFlag = 1; | ||||
| 	    fmt ++; | ||||
| 	} else { | ||||
| 	    longFlag = 0; | ||||
| 	} | ||||
|  | ||||
| 	/* check for other prefixes */ | ||||
| 	width = 0; | ||||
| 	prec = -1; | ||||
| 	ladjust = 0; | ||||
| 	padc = ' '; | ||||
|  | ||||
| 	if (*fmt == '-') { | ||||
| 	    ladjust = 1; | ||||
| 	    fmt ++; | ||||
| 	} | ||||
|  | ||||
| 	if (*fmt == '0') { | ||||
| 	    padc = '0'; | ||||
| 	    fmt++; | ||||
| 	} | ||||
|  | ||||
| 	if (IsDigit(*fmt)) { | ||||
| 	    while (IsDigit(*fmt)) { | ||||
| 		width = 10 * width + Ctod(*fmt++); | ||||
| 	    } | ||||
| 	} | ||||
|  | ||||
| 	if (*fmt == '.') { | ||||
| 	    fmt ++; | ||||
| 	    if (IsDigit(*fmt)) { | ||||
| 		prec = 0; | ||||
| 		while (IsDigit(*fmt)) { | ||||
| 		    prec = prec*10 + Ctod(*fmt++); | ||||
| 		} | ||||
| 	    } | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	/* check format flag */ | ||||
| 	negFlag = 0; | ||||
| 	switch (*fmt) { | ||||
| 	 case 'b': | ||||
| 	    if (longFlag) { | ||||
| 		num = va_arg(ap, long int); | ||||
| 	    } else { | ||||
| 		num = va_arg(ap, int); | ||||
| 	    } | ||||
| 	    length = PrintNum(buf, num, 2, 0, width, ladjust, padc, 0); | ||||
| 	    OUTPUT(arg, buf, length); | ||||
| 	    break; | ||||
|  | ||||
| 	 case 'd': | ||||
| 	 case 'D': | ||||
| 	    if (longFlag) { | ||||
| 		num = va_arg(ap, long int); | ||||
| 	    } else { | ||||
| 		num = va_arg(ap, int); | ||||
| 	    } | ||||
| 	    if (num < 0) { | ||||
| 		num = - num; | ||||
| 		negFlag = 1; | ||||
| 	    } | ||||
| 	    length = PrintNum(buf, num, 10, negFlag, width, ladjust, padc, 0); | ||||
| 	    OUTPUT(arg, buf, length); | ||||
| 	    break; | ||||
|  | ||||
| 	 case 'o': | ||||
| 	 case 'O': | ||||
| 	    if (longFlag) { | ||||
| 		num = va_arg(ap, long int); | ||||
| 	    } else { | ||||
| 		num = va_arg(ap, int); | ||||
| 	    } | ||||
| 	    length = PrintNum(buf, num, 8, 0, width, ladjust, padc, 0); | ||||
| 	    OUTPUT(arg, buf, length); | ||||
| 	    break; | ||||
|  | ||||
| 	 case 'u': | ||||
| 	 case 'U': | ||||
| 	    if (longFlag) { | ||||
| 		num = va_arg(ap, long int); | ||||
| 	    } else { | ||||
| 		num = va_arg(ap, int); | ||||
| 	    } | ||||
| 	    length = PrintNum(buf, num, 10, 0, width, ladjust, padc, 0); | ||||
| 	    OUTPUT(arg, buf, length); | ||||
| 	    break; | ||||
|  | ||||
| 	 case 'x': | ||||
| 	    if (longFlag) { | ||||
| 		num = va_arg(ap, long int); | ||||
| 	    } else { | ||||
| 		num = va_arg(ap, int); | ||||
| 	    } | ||||
| 	    length = PrintNum(buf, num, 16, 0, width, ladjust, padc, 0); | ||||
| 	    OUTPUT(arg, buf, length); | ||||
| 	    break; | ||||
|  | ||||
| 	 case 'X': | ||||
| 	    if (longFlag) { | ||||
| 		num = va_arg(ap, long int); | ||||
| 	    } else { | ||||
| 		num = va_arg(ap, int); | ||||
| 	    } | ||||
| 	    length = PrintNum(buf, num, 16, 0, width, ladjust, padc, 1); | ||||
| 	    OUTPUT(arg, buf, length); | ||||
| 	    break; | ||||
|  | ||||
| 	 case 'c': | ||||
| 	    c = (char)va_arg(ap, int); | ||||
| 	    length = PrintChar(buf, c, width, ladjust); | ||||
| 	    OUTPUT(arg, buf, length); | ||||
| 	    break; | ||||
|  | ||||
| 	 case 's': | ||||
| 	    s = (char*)va_arg(ap, char *); | ||||
| 	    length = PrintString(buf, s, width, ladjust); | ||||
| 	    OUTPUT(arg, buf, length); | ||||
| 	    break; | ||||
|  | ||||
| 	 case '\0': | ||||
| 	    fmt --; | ||||
| 	    break; | ||||
|  | ||||
| 	 default: | ||||
| 	    /* output this char as it is */ | ||||
| 	    OUTPUT(arg, fmt, 1); | ||||
| 	}	/* switch (*fmt) */ | ||||
|  | ||||
| 	fmt ++; | ||||
|     }		/* for(;;) */ | ||||
|  | ||||
|     /* special termination call */ | ||||
|     OUTPUT(arg, "\0", 1); | ||||
| } | ||||
|  | ||||
|  | ||||
| /* --------------- local help functions --------------------- */ | ||||
| static int | ||||
| PrintChar(char * buf, char c, int length, int ladjust) | ||||
| { | ||||
|     int i; | ||||
|  | ||||
|     if (length < 1) length = 1; | ||||
|     if (ladjust) { | ||||
| 	*buf = c; | ||||
| 	for (i=1; i< length; i++) buf[i] = ' '; | ||||
|     } else { | ||||
| 	for (i=0; i< length-1; i++) buf[i] = ' '; | ||||
| 	buf[length - 1] = c; | ||||
|     } | ||||
|     return length; | ||||
| } | ||||
|  | ||||
| static int | ||||
| PrintString(char * buf, char* s, int length, int ladjust) | ||||
| { | ||||
|     int i; | ||||
|     int len=0; | ||||
|     char* s1 = s; | ||||
|     while (*s1++) len++; | ||||
|     if (length < len) length = len; | ||||
|  | ||||
|     if (ladjust) { | ||||
| 	for (i=0; i< len; i++) buf[i] = s[i]; | ||||
| 	for (i=len; i< length; i++) buf[i] = ' '; | ||||
|     } else { | ||||
| 	for (i=0; i< length-len; i++) buf[i] = ' '; | ||||
| 	for (i=length-len; i < length; i++) buf[i] = s[i-length+len]; | ||||
|     } | ||||
|     return length; | ||||
| } | ||||
|  | ||||
| static int | ||||
| PrintNum(char * buf, unsigned long u, int base, int negFlag, | ||||
| 	 int length, int ladjust, char padc, int upcase) | ||||
| { | ||||
|     /* algorithm : | ||||
|      *  1. prints the number from left to right in reverse form. | ||||
|      *  2. fill the remaining spaces with padc if length is longer than | ||||
|      *     the actual length | ||||
|      *     TRICKY : if left adjusted, no "0" padding. | ||||
|      *		    if negtive, insert  "0" padding between "0" and number. | ||||
|      *  3. if (!ladjust) we reverse the whole string including paddings | ||||
|      *  4. otherwise we only reverse the actual string representing the num. | ||||
|      */ | ||||
|  | ||||
|     int actualLength =0; | ||||
|     char *p = buf; | ||||
|     int i; | ||||
|  | ||||
|     do { | ||||
| 	int tmp = u %base; | ||||
| 	if (tmp <= 9) { | ||||
| 	    *p++ = '0' + tmp; | ||||
| 	} else if (upcase) { | ||||
| 	    *p++ = 'A' + tmp - 10; | ||||
| 	} else { | ||||
| 	    *p++ = 'a' + tmp - 10; | ||||
| 	} | ||||
| 	u /= base; | ||||
|     } while (u != 0); | ||||
|  | ||||
|     if (negFlag) { | ||||
| 	*p++ = '-'; | ||||
|     } | ||||
|  | ||||
|     /* figure out actual length and adjust the maximum length */ | ||||
|     actualLength = p - buf; | ||||
|     if (length < actualLength) length = actualLength; | ||||
|  | ||||
|     /* add padding */ | ||||
|     if (ladjust) { | ||||
| 	padc = ' '; | ||||
|     } | ||||
|     if (negFlag && !ladjust && (padc == '0')) { | ||||
| 	for (i = actualLength-1; i< length-1; i++) buf[i] = padc; | ||||
| 	buf[length -1] = '-'; | ||||
|     } else { | ||||
| 	for (i = actualLength; i< length; i++) buf[i] = padc; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /* prepare to reverse the string */ | ||||
|     { | ||||
| 	int begin = 0; | ||||
| 	int end; | ||||
| 	if (ladjust) { | ||||
| 	    end = actualLength - 1; | ||||
| 	} else { | ||||
| 	    end = length -1; | ||||
| 	} | ||||
|  | ||||
| 	while (end > begin) { | ||||
| 	    char tmp = buf[begin]; | ||||
| 	    buf[begin] = buf[end]; | ||||
| 	    buf[end] = tmp; | ||||
| 	    begin ++; | ||||
| 	    end --; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     /* adjust the string pointer */ | ||||
|     return length; | ||||
| } | ||||
|  | ||||
| static void printf_output(void *arg, char *s, int l) | ||||
| { | ||||
|     int i; | ||||
|  | ||||
|     // special termination call | ||||
|     if ((l==1) && (s[0] == '\0')) return; | ||||
|  | ||||
|     for (i=0; i< l; i++) { | ||||
| 	board_putc(s[i]); | ||||
| 	if (s[i] == '\n') board_putc('\r'); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void printf(char *fmt, ...) | ||||
| { | ||||
|     va_list ap; | ||||
|     va_start(ap, fmt); | ||||
|     lp_Print(printf_output, 0, fmt, ap); | ||||
|     va_end(ap); | ||||
| } | ||||
| @@ -1,18 +0,0 @@ | ||||
| /* | ||||
|  * Copyright (C) 2001 MontaVista Software Inc. | ||||
|  * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net | ||||
|  * | ||||
|  * 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. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifndef _printf_h_ | ||||
| #define _printf_h_ | ||||
|  | ||||
| #include <stdarg.h> | ||||
| void printf(char *fmt, ...); | ||||
|  | ||||
| #endif /* _printf_h_ */ | ||||
| @@ -1 +0,0 @@ | ||||
| CACHE_FLAGS+=-DCONFIG_ICACHE_SIZE="(32 * 1024)" -DCONFIG_DCACHE_SIZE="(16 * 1024)" -DCONFIG_CACHELINE_SIZE=32 | ||||
		Reference in New Issue
	
	Block a user