Hi Thomas,
This makes sense. Basically, in Titan 1.0 and 1.1, there was no support
for IP header alignment. As a results, for every incoming packet, there
had to be an extra copy in the driver. This had to be somehow fixed in
the chip. So, the chip designers were basically looking for some unused
registers that can be used to indicate to the chip that IP header needs
aligning. And the chip designers wanted to implement this framework by
using minimal possible changes so that 1.2 can be released asap.
Hence, they used this register. I am not sure if this is even
documented. However, this code has been written based on the feedback
from the chip designers. If you dont use this code, the MAC subsystem of
titan will stop aligning IP headers and you will need to implement the
code in the driver to do the aligning.
Hope this clears things.
Thanks
Manish Lachwani
Thomas Koeller wrote:
Hi Manish & Ralf,
the code below is from tian_ge.c:
/*
* This is the 1.2 revision of the chip. It has fix for the
* IP header alignment. Now, the IP header begins at an
* aligned address and this wont need an extra copy in the
* driver. This performance drawback existed in the previous
* versions of the silicon
*/
reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12));
reg_data_1 |= 0x40000000;
TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
reg_data_1 |= 0x04000000;
TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
mdelay(5);
reg_data_1 &= ~(0x04000000);
TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
mdelay(5);
According to the RM9000 user manual, register 0x103c (and 0x203c
and 0x303c), named TTPRI0, contains eight four-bit fields, each
of which is a packet priority value. This would be used to find
the priority for incoming packets.
Given the register description in the cpu manual, I cannot make
any sense of the code above. Whoever did that, would you care to
explain?
thanks,
Thomas
|