15/Jul/2012


Release notes for KW2 LSP release 3.3.1-PQ
==========================================

Note: This LSP is compatible with U-Boot release 4.0.0 and above.
-----

Table of Contents
-----------------

1.  Contents of this Release
2.  HowTo build
3.  Changes from previous releases
4.  Known Issues
5.  Notes
6.  Disclaimer


1. Contents of This Release
===========================

	Included in current release :
	- Support for ttyS0.
	- Interrupts handling.
	- L2 support + optimized cache opertaions.
	- PEX support.
	- Standard network interface support for the KW2 giga port.
  	- Telephony driver.
	- Legacy NAND flash driver.
	- Memory transfer accelerations by using the XOR-DMA engine.
        - RTC support.
        - Support for passing Marvell Tag list from uboot.
        - Reset support.
        - MV shell Proc FS.
	- PON drivers.
	- USB host support.
	- CESA support.
	- SD/SDIO/MMC driver.
	- Basic gateway network interface support for integrated switch.
	- Initial support for COMM unit.
	- Marvell SATA.
	- SPI flash driver.

	- This release is a patch to Linux 2.6.32.11 which can be download from
          (www.kernel.org)

	Binary drivers:
	- The GPON/EPON drivers are provided as kernel objects
	  (mv_gpon.ko and mv_epon.ko respectively).
	  The files can be found under the binaries directory in the
	  release source tree.
	- Because of licensing issues, the Voice SLIC drivers cannot be provided 
  	  in source code form. Thus, a precompiled library of the Slic
	  drivers are provided under the mv_phone/objs direcotry.

	Unsupported features:
	- USB device support.
	- Advanced Gateway (Switch) network interface features:
	  + All-Multicast mode is not supported in network interfaces
	    connected to the Switch.
	  + L2 IGMP Snooping.
	  + TSO.

	Configuration:
	--------------
    	1. mv88f6500_defconfig
	2. mv88f6500_gw_defconfig
	3. mv88f6500_be_defconfig

	Supported boards:
	-----------------
	1. DB-88F65XX-BP
	2. RD-88F6510-SFU
	3. RD-88F6560
	4. DB-88F6601
	5. RD-88F6601

2. HowTo build
===============
	This release was built using SDK 3.2
	get linux-2.6.32.11 from www.kernel.org
	change its name to the release name (linux_feroceon_...).
	unzip the release.zip in the directory where you put the kernel, say A to replace all.
	define ARCH & CROSS_COMPILE env variables
	'export ARCH=arm'
	'export CROSS_COMPILE=<compiler name>'
	cd to the kernel directory.
	'make mrproper'
	config the kernel:
	'make <platform>_defconfig' 
	'make uImage'
	the kernel uImage will be found under arch/arm/boot/.

3. Changes from previous releases
=================================
- Changes from version 3.3.0
-----------------------------
o Support both NAND and SPI flash devices in run time.
o Support SPI flash MX25L25635E with 32bit address cycle mode.
o Allocate 32MB window size for SPI flash access by CPU(memory mapped).

- Changes from version 3.2.0
-----------------------------
o Avanta-MC SoC Support:
  + Support 6601 device.
  + Support new DB-88F6601 and RD-88F6601 boards.
  + Support new SPI flash M25Q128
  + Support 2 channels TDM
o Networking:
 + Fix Ethernet complex 2xMAC to Switch configuration
 + Fix Switch port init
 + Fix NETA rx tx special init
 + PPPoE fixes
 + Fix NETA BM for HWF only
o Voice:
 + Support Zarlink VE89116 single channel SLIC device

- Changes from version 3.1.0
-----------------------------
o Networking:
  + Fix 2 bugs related to link down in PON port.
  + Add support for L2 deposit via compile-time flag.
  + Add portMask and cpuMask arguments to mvSysNetaInit() function.
  + Rearrange L2FW support.
  + Add support for steering ingress packets to different RXQs according
    to VLAN priority (with and without PnC).
  + Fix bug in mv_eth_tx_policy() function.
  + Fix GRO support.
  + Fix bug in eth_tool dependencies check.
  + Fix bug in BM support when only long pools are used.
  + Check port validity in all functions called from sysfs.
  + Add PNC support for DSCP and VLAN priority setting on per port base.
  + Fix bug in WRR configuration.
  + Change Kconfig defaults for PNC configuration, GRO and others.
  + NFP changes:
    ++ Align NFP sources to NFP drop5
    ++ NFP as kernel module support for static learning mode only
    ++ NFP classification support update:
       +++ Add new priority based classification mode
       +++ Update exact match classification mode
    ++ Fix NFP support for external network drivers
    ++ Fix bugs and cleanup
o Voice:
  + Support Zarlink SLIC driver for VE880 and VE792 devices in user space.
  + Port Zarlink VP-API-II SLIC drivers to latest releases both for user and
    kernel support.

- Changes from version 3.0.0
-----------------------------
o Networking:
  + Support new NFPv2 implementation(replaced NFPv1).
  + PNC: 
    ++ Change RINFO bits configuration. Sysfs command pnc/s_rinfo was changed.
    ++ Add support for dispatching ingress packets to different RXQs accordingly with VLAN priority.
    ++ Enable/Disable access to PNC from driver in run-time by new sysfs command gbe/pnc.
    ++ Remove unused PNC features such: LLC/SNAP detection, IGMP detections, SWF support.
  + mv_neta_tool support is removed.
  + Change BM configuration framework (effect MTU change processing).
  + Fix RX and TX coalescing configuration.
  + Support connection of 2 giga ports to internal switch.
  + Fix big-endian workaround for chip revision A0.
  + Enable / disable NETA driver workarounds in compile time via menu "ERRATA / WA".
  + Fix ethtool functionality.
  + Add support for RX weight configuration.
  + Fix TSO implementation: add gateway driver support.
  + Merge with DSMP and KW40 projects:
    ++ Multi NAPI and multi core support
    ++ WoL support
  + Fix link state processing for PON port
  + Update transmitted bytes for PON port
  + Bugs fixes and code cleanup
o TDM/CommUnit:
  + Support both 8-bit and 16-bit sample sizes.
  + Support CommUnit on RD-6560 board.
  + Fix legacy TDM error handling.
  + Fix CommUnit data data coherency in Rx path.
  + Add CommUnit support for Wideband mode.
  + Fix CommUnit balancing and linear issues.
  + Support Silicon Labs SLIC devices: 3226x and 3217x.
  + Support TDM DCO clock.
  + Support TDM FIQ registeration.
o UART:
  + Fix serial hang during kernel uncompressing.

- Changes from version 2.1.0
-----------------------------
o Misc:
  + Added support for thermal sensor (lm-sensors package can be used to retrieve temperature).
  + Added support for PCI-E error interrupts reporting.
  + Added option to disable L2 cache through Linux command line parameters (pass noL2 param as
    part of the bootargs).
  + Add support for connecting MAC0 & MAC1 to internal switch on DB board.
  + Added option to disable modules auto-detection on DB board (By changing moduleAutoDetect field
    in the boardSpec structure).
  + Switch multi-address mode:
    ++ Configure RD-SFU to work in multi-address mode for switch registers access.
    ++ Add support for automatic configuration of switch multi-address mode on DB board, if Ethernet-complex
       configuration allows.
  + Fixed bug in MPP output driver configuration when using RGMII-B.
  + Added support for configuring GE0 / GE1 into MII mode.
  + Update eth-phy HAL to support initializing the QSGMII phy through the switch SMI bus.
  + Added new APIs to GPP HAL to configure GPIO blink duration and counter association.
  + Fix delay value in mvPexInit() from 500ms to 1ms.
  + Fixed bug in serial driver that caused serial to hang under certain scenarios (implemented serial 
    registers access limitations according to the spec).
o Networking:
  + Added L2 Forwarding demo support.
  + Network driver is now a platform device driver.
  + Support for NFP bridging.
  + Network driver - support multi-core synchronization:
    ++ New locking mechanism (global read/write lock and per-Tx queue locks).
    ++ Use atomic bit operations for multi-core of port flags (when needed).
  + Support removing (cleanup) and re-initialization of network driver in runtime.
  + Gateway driver: support runtime VLAN configuration via sysfs commands.
o CESA:
  + Support Encryption/Authentication parallel mode.
  + Enable SHA256 support thru ZDMA descriptor.
  + Support Tunit clock frequency setting in run time(default to 400MHz).

- Changes from version 2.0.5
-----------------------------
o Applied 16 patches on top of LSP version 2.0.5.
o Support A0 chip revision.

- Changes from version 2.0.4
-----------------------------
o Networking:
  + Force modules detection in Linux (Do not rely on U-Boot scanning result).
  + TxDone handling improvements:
    ++ Divide TxDone and cleanup functionalities to two separate timers.
    ++ Add timer(s) only when necessary (instead of always-present periodic timer).
  + HAL API change:
    ++ mvNetaTxqSentDescNumGet() - now it only reads counter without change it.
    ++ To read and decrement together please call new API: mvNetaTxqSentDescProc().
  + support buffer pool pre-defined size allocation.
  + Tx and Rx Special processing support:
  + support changing Tx and Rx ring size at runtime.
  + Support changing number of buffers (short & long) for port at runtime
  + Support new sysfs operations:
    ++ rx_reset
    ++ txp_reset
    ++ buf_num
  + Bug fixes:
    ++ Fix NFP handling of FIB and NAT rules when using PnC.
    ++ Fix NFP NAT rule aging.
    ++ Fix SKB Recycle bug with fragmented packets.
    ++ Fix tx_done when TX throughput less than RX.
  + Support multi-cache-line operations (used in network driver / NFP).
  + Support multi-core environment (synch with Armada XP code base).
  + Support forcing link status, speed and duplex according to board environment.
  + Coding style improvements.
  + Add MH configuration HAL APIs for TPM
  + Disappear error messages  for ISR error and Oversize packets (use counters)
o TDM:
  + Support PCM clock frequency configuration to 8MHz/4MHz/2MHz for bus master side
    in compile time.
  + Rearrange mv_phone files and folders to distinguish between TDM and SLIC source code.
o CESA:
  + Support SHA256 authentication algorithm.
  + Support SHA256 tests in mv_cesa_tool.
o PM:
  + Support deep idle power up delay.

- Changes from version 2.0.3
-----------------------------
o Support Linux Orion watchdog driver.
o Change Analog Grp1 configuration register setting. 
o Networking:
  + Update sysfs commands for "tos to rxq" and "tos to txq" mapping:
    echo p txq tos > tos_txq  - set <txq> for outgoing IP packets with <tos>, <tos> is decimal
    changed to:
    echo p txq tos > txq_tos  - set <txq> for outgoing IP packets with <tos>, <tos> is hexadecimal
    
    echo p rxq tos > tos_rxq  - set <rxq> for incoming IP packets with <tos>, <tos> is decimal
    changed to:
    echo p rxq tos > rxq_tos  - set <rxq> for incoming IP packets with <tos>, <tos> is hexadecimal
  + Fix bug in SKB recycle (free pkt if recycle failed)
  + Change implementation of mvNetaTxqSentDescNumGet() function, it decrements "transmitted" counter automatically.
    mvNetaTxqSentDescDec() should not be called directly.
  + Add functions for legacy parser TOS to RXQ mapping and others.
  + Add debug messages for ISR and POLL.
  + Disable update of TX descriptor by HW after transmit (save DRAM accesses) - set bit 12 in port configuration
    register.
  + Coding style fixes.
  + Update code releated to PHY access using GbE SMI interface.
  + Bug fix in Rx descriptors counters when I/F down during traffic.
o NAND:
  + Support new nand flash controller(NFC).
o PM:
  + Code tuned to support CPU frequency scaling and CPU deep idle simultaneously.
o TDM:
  + Support Rx/Tx voice processing in interrupt context - configurable in defcofig.
  + Stop DMA engines once mvTdmPcmStop() is dispatched - for legacy unit only.
  + Remove SLIC timer when all channels are disabled.

- Changes from version 2.0.2
----------------------------
o Support RD-88F6560 board.
o CESA:
  + Support dual CESA engines.
  + Support requests processing in chain-mode.
o PM:
  + Update CPU frequency parameter transition_latency to 5usec instead of 1ms.
  + Support DRAM self refresh in deep idle mode.
o PCIe:
  + Update interface initialization sequence.
o TDM:
  + Support voice test application or MMP selection in run-time.
o NAND:
  + Relocate legacy NAND driver to arch/arm/plat-feroceon/mv_drivers_lsp/mv_mtd/
  + Integrated new NAND controller driver to LSP - not supported yet. 
o Networking:
  + Changed CPU performance counters implementation.
  + NETA driver:
    ++ FIx bug for TSO.
    ++ Fix bug for RXQ with more than 255 descriptors.
    ++ Change API of mvNetaRxDescFill() function.
    ++ Merge with DSMP driver.
    ++ Prevent some of ethtool configurations for Giga port connected to switch.
    ++ Coding style changes.
    ++ Double invalidate of RX descriptors and buffers to prevent speculative prefetch.
  + NFP:
    ++ Add ARP support.
    ++ Fix mvNfpPnc crush when entry deleted during traffic.


- Changes from version 2.0.1
----------------------------
o Support SDIO.
o Support USB host.
o Support CESA single engine:
  + Ported IPSec support to OpenSWAN release 2.6.29.
  + See Known Issues for more details.
o Support CommUnit - See Known Issues for more details.
o Remove old files releated to Orion, Disco-Duo and Kirkwood SoC projects.
o Support 3 defconfig flavors: regular(performance oriented), GW(NAT) and big-endian.
o TDM:
  + Fix parallel SPI access bug in SLIC glue driver.
  + Eliminate SLIC timer routine dispatching in case SLIC module is not exists.
o PM:
  + Added CPU Idle support. This enable Linux CPU-Idle framework to shutdown the CPU when it being idle.
    See LspReadme.txt for more details.
  + Added CPU frequency scaling support. Using this mechanism, the CPU frequency can be lowered to DDR frequency.
    See LspReadme.txt for more details.
o Networking:
  + Update SKB headroom size to 96B.
  + Enable SKB recycle.
  + Don't allocate extrabuff for each TX descriptor if GSO is not supported.
  + Fix bug in the function mvNetaMaxRxSizeSet().
  + Add MaxTxSize configuration for TX shaping.
  + Add new function: MV_STATUS mvNetaTxpMaxTxSizeSet(int port, int txp, int maxTxSize);
  + Check that TXP and TXQ max burst configuration value must be larger than MaxTxSize.
  + Update MaxTxSize when MTU changed.
  + Fix PON MIB counters support:
    ++ Default RX MIB set to 0.
    ++ echo mib gp > mib_gpid       - MIB set <mib> for incoming packets with GemPID <gp>
    ++ echo mib > mib_def           - MIB set <mib> for incoming packets not matched any GemPID
  + Add new sysfs commands:
    ++ echo {0|1} > gbe/skb         - enable / disable SKB recycle
    ++ echo p txp > gbe/wrr_regs    - show WRR registers for <p/txp>
    ++ echo p rxq v > gbe/rxq       - show RXQ descriptors ring for <p/rxq>. v=0-brief, v=1-full
    ++ echo p txp txq v > gbe/txq   - show TXQ descriptors ring for <p/txp/txq>. v=0-brief, v=1-full
  + Fix ethtool functionality:
  + Fix TSO functionality.
  + Fix SKB recycle bug.
  + Fix bug in MTU change.
  + Fix spinlock functionality.
  + Add special spinlocks per pool.
  + Fix PNC AInfo dump.
  + Fix NFP IPv6 functionality.


- Changes from version 2.0.0
----------------------------
 o Support big-endian Linux image(use mv88f6500_be_defconfig).
 o Support NOR flash.
 o Support SPI flash.
 o Support 2xPCIe interfaces.
 o Bug fix: I2C transactions from Linux are supported - eliminate use of
	    summary bits for main interrupt cause high and main interrupt cause error registers.
 o Update Marvell Linux I2C driver with following features:
   + Combine access support.
   + Add delay after stop.
   + Port expander support.
 o Change VMALLOC_END definition from (PAGE_OFFSET + 0x28000000) to (PAGE_OFFSET + 0x30000000) in
   order to support larger memory range mapping.
 o Decrease PCIe memory mapping to 16MB.
 o Networking:
   + Support Link Detection from QSGMII ports.
   + Support Link Detection on switch port connected to the GE-PHY using interrupt.
   + Changed API: mvBoardIsPhyToSwitchP0Connected() -> mvBoardGePhySwitchPortGet().
   + New API: mvBoardRgmiiASwitchPortGet().
   + TCAM driver: Fix bug in RXQ display
   + NFP PMT and HWF support:
     ++ Add new file mvNfpPmt.c .
     ++ Add new Kconfig options.
     ++ Add new sysfs command to allocate TXQ for NFP HWF between inport and outport:
	echo "rxp p txp txq" > hwf  - use <txp/txq> for NFP HWF flows from <rxp> to <p>
   + NETA driver(gbe):
     ++ Set MBUS retry enable.
   + mv_neta_tool:
     ++ Add option to display GMAC registers:
	mv_neta_tool -St gmac <port>

- Changes from version 1.2.0
----------------------------
 o Remove Z1 chip revision support.
 o Support Z2 chip revision.
 o Support DB-88F65XX-BP and RD-88F6510-SFU boards(Z2).
 o Networking:
   + Update PMT entries to 4K.
   + Update TXQ configuration for hardware forwarding.
 o The following features are supported for the release:
   + Support legacy NAND controller.
   + Support legacy TDM unit(2-channels).
   + Support single PCIe interface.
   + Support standard MAC0/MAC1 ethernet complex configuration.
   + Support new UART controller.

- Changes from version 1.1.0
----------------------------
 o Networking:
   + NFP PPPoE support (disabled by default).
   + NFP IPv6 support (disabled by default).
   + NFP choosing TXQ accordingly with TOS value (for IPv4)
   + Added support for L2 PON special requrements
	"echo p            > sh_show"    - show port configuration for special TX
    	"echo p txp txq v  > sh_txq     - set txp/txq for special TX with signal header. txq=-1 means remove entry
    	"echo p hex v      > sh_mh      - set 2 bytes of MH/GH for special TX with signal header <v>
    	"echo p hex v      > sh_hw_cmd  - set 4 bytes of TX decriptor field for special TX with signal header <v>
    	"echo p hex v      > sh_mod     - set 10 bits of modification command for special TX with signal header <v>, 
					<hex> == 0xFFFF means remove entry.
   + Run-time configuration of descriptor numbers for RX and TX queues
	- "echo p txp txq v"	- set number of descriptors <v> for <port/txp/txq>.
        - "echo p rxq v"	- set number of descriptors <v> for <port/rxq>
   + NETA driver (neta/gbe)
	- Change APIs of the following functions:
		mvNetaPortDisable(MV_NETA_PORT_CTRL* pPortCtrl) => mvNetaPortDisable(int port);
		mvNetaPortEnable(MV_NETA_PORT_CTRL* pPortCtrl)  => mvNetaPortEnable(int port);
		mvNetaPortUp(MV_NETA_PORT_CTRL* pPortCtrl)      => mvNetaPortUp(int port);
		mvNetaPortDown(MV_NETA_PORT_CTRL* pPortCtrl)   	=> mvNetaPortDown(int port);
		mvNetaLinkStatus(MV_NETA_PORT_CTRL* pPortCtrl, MV_ETH_PORT_STATUS* pStatus); =>
		  mvNetaLinkStatus(int port, MV_ETH_PORT_STATUS* pStatus) 
		mvNetaDefaultsSet(MV_NETA_PORT_CTRL* pPortCtrl) => mvNetaDefaultsSet(int port);
		mvEthTxPolicyRegs(int port, int txp) 		=> mvEthTxpWrrRegs(int port, int txp);
		mvEthPortCounters(int port);			=> mvEthPortCounters(int port, int txp);
		mvEthPortRmonCounters(int port);		=> mvEthPortRmonCounters(int port, int txp);
  	- Move file mvPmt.c from directory neta/gbe to neta/pmt
   	- Create new file mvPmt.h in the directory neta/pmt
	- Fix bugs in noBM, noPNC mode

   + PNC driver changes
	- Change TCAM API
	  	void sram_sw_set_addinfo(struct tcam_entry* te, unsigned int bit); =>
		  void sram_sw_set_ainfo(struct tcam_entry* te, unsigned int bits, unsigned int mask);
	- Change sysfs command
	from 	- echo a 	> pnc/s_ainfo	- set ainfo bit <a>
	to 	- echo a b 	> pnc/s_ainfo   - set ainfo value <a> with mask <b>
	- Fix DSCP configuration
	- Add IPv4 and IPv6 over PPPoE configuration.
	- Add IPv6 2 tuple flow configuration.
   + Performance improvements
	- Use new file for function reordering (Routing).
	- Put all debug code under compilation flag.

 o TDM:
   + Support new software telephony architecture based on TDM/SLIC management seperation.
     The new model supports mapping of SLIC kernel stack APIs to user space call control
     application, where TDM(data path) controlled by Marvell soft DSP engine(MMPv2).
   + VE880/VE792 SLIC/s profile configuration files migrated from kernel space to user space.
   + Remove support for Silabs 3215 SLIC and 3050 DAA due to new architecture redesign.
   + Remove SLIC abstraction layer due to new architecture redesign.
   + Support flexible TDM time slot configuration.         
   + Support new user space voice test application under /tools/voice/.
   + Remove support for kernel telephony test module.  


- Changes from version 1.0.0-NQ
-------------------------------
 o Networking:
   + Bug fixes:
    - Fixed bug with promiscuous mode when a Gateway interface is down.
	- Fixed bug with Tx statistics when using NFP with Gateway interfaces.
	- Fixed bug with loading Switch driver even when Switch was not connected to any GbE port.
   + Enabled flow control between GbE port and Switch CPU port.
   + Added statistics for NFP IPv4 checksum error.
 o Fixed bug in handling GPIO interrupts for GPP's larger then 31 and
   smaller than 64.
 o Fix HAL files copyright header.
 o Fix bug in Pex clock Sample-At-Reset control functions.
 o Update RD-88F6560-GW MPP configurations.
 o Update RD-88F6530-MDU MPP configurations.
 o Enable runtime detection of CPU to DRAM access configuration.


- Changes from version 0.5.0-NQ
-------------------------------
 o Networking:
   + Added RX and TX TOS based QoS support:
	- Define TXQ for Linux generated traffic accordingly with TOS value in IP header.
	- Enable up to CONFIG_MV_ETH_PNC_DSCP_PRIO (4) TCAM entries to map TOS value of incoming IP packets to RXQ.
	- Show RXQ and TXQ TOS map using "sysfs" or "mv_neta_tool"
   + Add some configurations options for PMT:
	- Set ETH_TYPE registers.
	- Set MH registers.
   + Changed some "mv_neta_tool" and "sysfs" configuration commands:
	- mv_neta_tool new supported commands:
	  mv_neta_tool -St tos <port>
  	  mv_neta_tool -tos <port> <rxq> <tos>
	- sysfs deleted commands:
	  echo p txp txq mod > txq_mod  - set owner of TX queue: 0-Free, 1-CPU, 2-HWF

	- sysfs changed commands:
	  echo a   > pnc/hw_inv_all  -  disable all tcam entries\n" replace "hw_invalidate_all" command
	  echo a   > pnc/hw_inv      -  disable tcam entry <a>\n" replace "hw_invalidate" command
	  echo p i > pmt/hw_inv      - disable entry <i> on port <p>\n" replace hw_invalidate command

	- sysfs new commands:
  	  echo p > gbe/tos             - show RX and TX TOS map for port <p>
	  echo p > gbe/mac             - show MAC info for port <p>
	  echo p rxq tos > gbe/tos_rxq - set <rxq> for incoming IP packets with <tos>
	  echo p txq tos > gbe/tos_txq - set <txq> for outgoing IP packets with <tos>
	  echo p txp > pmt/hw_regs     - show PM registers
	  echo p txp i v > pmt/mh_reg  - set MH register <i=0..5> with value <v>
	  echo p txp i v > pmt/eth_reg - set ETH register <i=0..3> with value <v>
 o Enable CPU frequency scaling driver.
 o Changed default NAND partitioning.
 o Added "pon_type" procfs entry to retrieve board's PON configuration.
 o Voice:
   + Support 32 CommUnit channels.
   + Support Zarlink VE792 SLIC device including power supply
     initialization.
   + Implemented CommUnit disable sequence - not fully stable.
   + Support linear mode - not fully stable.
   + Enable TDM error statistics monitoring under Linux proc FS.
   + Fixed end-to-end delay for local call - update CommUnit Rx/Tx
     interrupts synchronization
 o Add support for dynamic initialization of EPON MAC address.


- Changes from version 0.4.0-NQ
-------------------------------
 o Fix copy to user support code, now LSP uses kernel's code for
   copy-to-user instead of marvell's developed code.
 o Fixed bug in SDIO initialization.
 o Fixed SATA host controller initialization for KW2 SoC's.
 o Fixed bug in ethernet complex detection when SATA & 3xFE are used
   simultaneously.
 o Networking:
   + Network driver printed messages cleanup.
   + Drop flow control Pause frames in PnC.
   + Switch: 
	- Disabling all disconnected ports.
	- Enabling Flow Control on external ports.
	- Forcing link up, full-duplex, 1000Mbps speed and flow control for ports connected to a GMAC unit.
	- Improved Switch state and statistics printout.
   + Ethtools:
   	- The interval for ethtool timeout autoneg (MV_ETH_TOOL_AN_TIMEOUT) 
	  was changed to 5000 (5 seconds) instead of 2000 (2 seconds) due to a timeout
	- When restaring autonegotioation with mvEthPhyRestarrAN().
	- AutoNegotation restart was added to ethtools restore setting method and also
	  in one case in set_pauseparam() (for "ethtool -K autoneg on tx on rx on").

- Changes from version 0.3.0-NQ
-------------------------------
 o Added support for Integrated Sata controller.
 o Add support for SPI flash.
 o Add auto-detection for user-selected SDIO configuration on KW2-DB.
 o Fixed issue with Gateway driver not receiving broadcast packets 
   (packets with MAC broadcast destination address).
 o Performing SMI accesses using GbE#1 registers.
 o Fixed minor issue - previously tried to access Switch PHY on port 4 
   even if port 4 is not connected.
 o Enabled the Switch CPU port to send flow control PAUSE frames.
   Notice: The Flow-control feature is still under development and is not 
   fully supported in this version.
 o Fixed issue with NFP not checking L4 checksum.
 o NFP: Removed debug prints.

- Changes from version 0.2.0-NQ
-------------------------------
 o Networking:
   + Support init-time configuration of network ports to appear as Linux network
     interfaces (e.g. eth0, eth1) or to be "disconnected" from Linux (See LSP Readme for further details).
   + Support init-time configuration of working with the Switch in Gateway mode / External Switch mode (non-Gateway): 
     - Separate Switch driver (QD HAL) load from Switch init function
     - Select Gateway mode / External Switch mode according to the mvNetConfig
       parameter in U-Boot. (See LSP Readme for further details).
   + Added support for advanced Gateway driver features:
     - Runtime VLAN configuration
     - Promiscuous mode
     - Adding / deleting specific multicast addresses
     - NFP between two Gateway interfaces / between Gateway interface and
       non-Gateway interface
     - 802.1Q VLAN-tagged traffic
     - Support QSGMII module
   + Added Switch ports link change prints even when working in External Switch mode
   + Added TX no queue feature (tx_noq command in mv_neta_tool).

 o Configure UART driver to work in Polling mode. This might cause the
   UART to work a little slower for applications with large amount of
   printouts.
 o Add support for SGMII output configuration.
 o Minor data-type fixes in mvBoardTdmSpiCsGet() &
   mvBoardTdmDevicesCountGet().
 o Added the ability to connect switch port 5 to KW2 MAC 1 port.
 o Changed RD-SFU board ethernet complex configuration as follows:
   - MAC port 0 is connected to switch port 6.
   - MAC port 1 is connected to switch port 5.
   - Internal PHY is connected to switch port 4.
 o Add support for RD-88F6536-MDU board.
 o Updated Ethernet Complex initialization code to support SGMII,
   QSGMII, Internal PHYs and switch.
 o Cesa HAL code cleanup.
 o TDM:
   - Added support for CommUnit (Up to 4 channels are currently
     supported).
   - Only Zarlink-VE880 SLICs are currently supported.
   - Added an option to compile the mv_phone.ko driver using a pre-built
     SLIC drivers library (This is the default kernel setting).
   - Updated SLIC electrical initialization parameters table (For
     Zarlink-VE880).
   - Fix SLIC initialization process.
   - Enhanced phone_test utilitiy with capability to read SLIC
     registers.


- Changes from version 0.1.0-NQ
-------------------------------
 o Initial support for TDM-32 Channels unit.

- Changes from version 0.0.5-NQ
-------------------------------
 o Updated LSP kernel version from 2.6.31.8 to 2.6.32.11.
 o Minor syntax fixes for tools/Makefile file.
 o Skip ethernet complex registers initialization in Linux, and rely on
   Uboot's initialization.
 o Integration of Cesa unit on KW2 Silicon.
 o Fixed bug in spi HAL in baud-rate calculation function
   (mvSpiBaudRateSet()).
 o Updated PON drivers and HALs after KW2 Silicon bringup.
 o Enable auto-detection of TDM modules.
 o Provide PON mode according to Sample-At-Reset value.
 o Enable CPU-Idle support.
 o Change default NAND device partitioning.
 o Fix Zarlink-VE880 SLIC timing configuration.
 o Neta:
 	- Configure the number of TCONTS at boot time according to PON
	  configuration in Sample-At-Reset register.
	- Added GRO support.
 o Added gateway support:
	- Adaptation of switch drivers to support KW2 internal switch.
 	- Link detection.
	- Interface configuration via mvNetConfig parameter in U-Boot:
	  + setting MAC address and port(s) per interface.
	  + setting interface MTU.
	- Runtime configuration of interface's Unicast MAC address.
	- HW L2 switching according to interface (VLAN) configuration.
	- Routing between Switch and non-Switch interface.
	- Change MTU at runtime.

- Changes from version 0.0.4-NQ
-------------------------------
 o Add initial support for RD-88F6510-SFU board. Support for this board
 is minimal and still not stable.
 o TDM:
 	- Update support for Zarlink-VE880 SLIC.
	- Fix new PLL(x58) support for legacy TDM unit.
	- Update SPI baud rate for SLIC devices to 2M.
 o Neta:
 	- Partial IGMP support.
	- Fix scatter-gather bug in Tx path.
	- Fixed bug in NFP NAT mode.
	- Fixed Neta register defaults.
 o Fixed phy register access from Linux.
 o Add initial support for USB host in DB board.


- Version 0.0.4-NQ
------------------
 o First LSP to support KW2 SoC.
   This is a preliminary version intended for integration purposes.

4. Known Issues
===============
Networking:
- For getting GRO offload paramaters , you must have version
  ethtool-2.6.33-pre1 or higher.
- MTU change is not supported.
- When working with QSGMII module connected to the Switch, flow control is not enabled on the Switch external ports.
- Connecting Switch port 5 to RGMII or internal PHY is currently not supported.
- Allmulticast mode is not supported for Gateway interfaces.
- Cannot use Gateway mode for RD-SFU board, must select External Switch mode.

Telephony/CommUnit:
- No support for Linear mode(A-law/U-law only).
- False MCSC/MCDMA parity error generation.
- Zarlink SLIC/s initialization process may end up with false off-hook detection for part/all lines.
- FSync signal is tied to the TDM enable - therefore all CommUnit blocks are functional prior to SLIC/s
  initialization process.
- Periodic interrupt counter drifts by one frame(125usec).
- Re-enabling the CommUnit may end up with small sampling offset(1 or 2 samples) between voice channels.

USB:
- Linux doesn't handle well a case of 2 ISO devices(full speed) working
  simultaneously through the high speed hub.

NAND:
- When working with 4bit ECC configuration, it is not recommended to perform
  read from an erased page, since no ECC was calculated for this page.
  In this case we compared the page data against 512 bytes of 0xFF and if we
  get a match, then return gracefully, otherwise, there is an uncorrectable
  error.

CESA:
- OpenSSL speed test multiple sessions cause to board terminal ,telnet and ssh
  sessions to stop working.

5. Notes
========

- This release support up to 512MB of DRAM with current memory layout definition.

5. Disclaimer
=============
This document provides preliminary information about the products described, and such 
information should not be used for purpose of final design. Visit the Marvell(r) web 
site at www.marvell.com for the latest information on Marvell products.

No part of this document may be reproduced or transmitted in any form or by any means, 
electronic or mechanical, including photocopying and recording, for any purpose, 
without the express written permission of Marvell. Marvell retains the right to make 
changes to this document at any time, without notice. Marvell makes no warranty of 
any kind, expressed or implied, with regard to any information contained in this 
document, including, but not limited to, the implied warranties of merchantability 
or fitness for any particular purpose. Further, Marvell does not warrant the accuracy 
or completeness of the information, text, graphics, or other items contained within 
this document. Marvell makes no commitment either to update or to keep current the 
information contained in this document. Marvell products are not designed for use in 
life-support equipment or applications that would cause a life-threatening situation 
if any such products failed. Do not use Marvell products in these types of equipment 
or applications. The user should contact Marvell to obtain the latest specifications 
before finalizing a product design. Marvell assumes no responsibility, either for use 
of these products or for any infringements of patents and trademarks, or other rights 
of third parties resulting from its use. No license is granted under any patents, 
patent rights, or trademarks of Marvell.These products may include one or more 
optional functions. The user has the choice of implementing any particular optional 
function. Should the user choose to implement any of these optional functions, it is 
possible that the use could be subject to third party intellectual property rights. 
Marvell recommends that the user investigate whether third party intellectual property 
rights are relevant to the intended use of these products and obtain licenses as 
appropriate under relevant intellectual property rights. 
Marvell comprises Marvell Technology Group Ltd. (MTGL) and its subsidiaries, Marvell 
International Ltd. (MIL), Marvell Semiconductor, Inc. (MSI), Marvell Asia Pte Ltd. (MAPL), 
Marvell Japan K.K. (MJKK), Marvell Semiconductor Israel Ltd. (MSIL), SysKonnect GmbH, 
and Radlan Computer Communications, Ltd.
Export Controls.  With respect to any of Marvell's Information, the user or recipient, 
in the absence of appropriate U.S. government authorization, agrees: 1) not to re-export 
or release any such information consisting of technology, software or source code 
controlled for national security reasons by the U.S. Export Control Regulations ("EAR"), 
to a national of EAR Country Groups D:1 or E:2; 2) not to export the direct product of 
such technology or such software, to EAR Country Groups D:1 or E:2, if such technology or 
software and direct products thereof are controlled for national security reasons by the 
EAR; and, 3) in the case of technology controlled for national security reasons under the 
EAR where the direct product of the technology is a complete plant or component of a plant, 
not to export to EAR Country Groups D:1 or E:2 the direct product of the plant or major 
component thereof, if such direct product is controlled for national security reasons by 
the EAR, or is subject to controls under the U.S. Munitions List  ("USML").  At all times 
hereunder, the recipient of any such information agrees that they shall be deemed to have 
manually signed this document in connection with their receipt of any such information. 
Copyright (c) 2004.  Marvell.  All rights reserved.  Marvell, the Marvell logo, Moving 
Forward Faster, Alaska, and GalNet are registered trademarks of Marvell.  Discovery, 
Fastwriter, GalTis, Horizon, Libertas, Link Street, NetGX, PHY Advantage, Prestera, 
Raising The Technology Bar, UniMAC, Virtual Cable Tester, and Yukon are trademarks of 
Marvell.  All other trademarks are the property of their respective owners.
