net: mvpp2: handle register mapping and access for PPv2.2
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Thu, 16 Feb 2017 07:03:37 +0000 (08:03 +0100)
committerStefan Roese <sr@denx.de>
Wed, 29 Mar 2017 05:41:11 +0000 (07:41 +0200)
commit26a5278c9e6f0aa477f14dc38ccbf8dc30fe9cb3
treed51f5bd463cf7e7c6904f7ff804cc7e673094c88
parent80350f55cf3ab7e7d82833219d37380abf78d173
net: mvpp2: handle register mapping and access for PPv2.2

This commit adjusts the mvpp2 driver register mapping and access logic
to support PPv2.2, to handle a number of differences.

Due to how the registers are laid out in memory, the Device Tree binding
for the "reg" property is different:

- On PPv2.1, we had a first area for the common registers, and then one
  area per port.

- On PPv2.2, we have a first area for the common registers, and a
  second area for all the per-ports registers.

In addition, on PPv2.2, the area for the common registers is split into
so-called "address spaces" of 64 KB each. They allow to access the same
registers, but from different CPUs. Hence the introduction of cpu_base[]
in 'struct mvpp2', and the modification of the mvpp2_write() and
mvpp2_read() register accessors. For PPv2.1, the compatibility is
preserved by using an "address space" size of 0.

Changed by Stefan for U-Boot:
Since we don't support multiple CPUs in U-Boot, I've removed all the
code, macros and variables introduced in the Linux patch version for this.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Stefan Roese <sr@denx.de>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/mvpp2.c