Am 04.10.2017 um 17:34 schrieb Andrew Lunn:
On Wed, Oct 04, 2017 at 04:19:23PM +0200, Jörg Willmann wrote:
On Wed, 4 Oct 2017, Andrew Lunn wrote:
On Wed, Oct 04, 2017 at 07:56:53AM +0200, Jörg Willmann wrote:
Hi,
we use a QorIQ P1011 connected via SGMII to a switch (Marvell 88E6352).
Currently we still use a really old linux kernel (2.6.33) successfully.
For configuration of the MDIO Bus attached to the corresponding eTSEC/TBI
Phy we use the following settings in the device tree:
mdio@25000 {
#address-cells = <0x1>;
#size-cells = <0x0>;
compatible = "fsl,etsec2-tbi";
reg = <0x25000 0x1000 0xb1030 0x4>;
Hi Joerg
Is 0xb1030 0x4 fixed by the silicon? Can it be expressed as an offset from
0x25000?
It seems like the idea behind the patch is to hard code some
things. If you can hard code the offset into get_etsec_tbipa(), i
think that would be an O.K. solution to your problem.
Andrew
Yes, the adress 0xb1030 is fixed but it's something totally different than
the address range of 0x25000. 0xb0000, 0xb1000 and 0xb2000 are base
addresses of the eTSEC MAC (TPIPA is a register within the MAC) and 0x24000,
0x25000 and 0x26000 are the base registers of the corresponding MDIO
controllers. So I wouldn't add a dependency between these two things.
>From my point of view, the implementation in the old kernel where
get_gfar_tbipa() got the device tree node pointer as argument was not soo
bad ;-)
I took a quick look at the current device tree files. They all seem to
have the 0xb1030 0x4. So reading it inside of get_etsec_tbipa() is
O.K.
Looks like you need to modify all the get_tbipa() functions to take a
device_node *, and this code looks like it needs to change:
/*
* Add consistency check to make sure TBI is contained
* within the mapped range (not because we would get a
* segfault, rather to catch bugs in computing TBI
* address). Print error message but continue anyway.
*/
if ((void *)tbipa > priv->map + resource_size(&res) -
4)
dev_err(&pdev->dev, "invalid register map (should
be at least 0x%04zx to contain TBI address)\n",
((void *)tbipa - priv->map) + 4);
iowrite32be(be32_to_cpup(prop), tbipa);
Andrew
Yes, exactly - I already stumbled over these lines, too. Are there any
suggestions how to implement this the best way?