ieee1394: support for speeds greater than S800

The hard-wired configuration of the top speed (until now S800) was
unnecessary, remove it.

If the local link layer controller supports S1600 or S3200, we now
assume this speed for all present 1394b PHYs (except if they are
behind 1394a repeaters) until nodemgr figured out the actual speed
while fetching the config ROM.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>

+9 -11
+1 -3
drivers/ieee1394/ieee1394.h
··· 54 #define IEEE1394_SPEED_800 0x03 55 #define IEEE1394_SPEED_1600 0x04 56 #define IEEE1394_SPEED_3200 0x05 57 - 58 - /* The current highest tested speed supported by the subsystem */ 59 - #define IEEE1394_SPEED_MAX IEEE1394_SPEED_800 60 61 /* Maps speed values above to a string representation */ 62 extern const char *hpsb_speedto_str[];
··· 54 #define IEEE1394_SPEED_800 0x03 55 #define IEEE1394_SPEED_1600 0x04 56 #define IEEE1394_SPEED_3200 0x05 57 + #define IEEE1394_SPEED_MAX IEEE1394_SPEED_3200 58 59 /* Maps speed values above to a string representation */ 60 extern const char *hpsb_speedto_str[];
+8 -8
drivers/ieee1394/ieee1394_core.c
··· 338 u8 cldcnt[nodecount]; 339 u8 *map = host->speed_map; 340 u8 *speedcap = host->speed; 341 struct selfid *sid; 342 struct ext_selfid *esid; 343 int i, j, n; ··· 374 if (sid->port2 == SELFID_PORT_CHILD) cldcnt[n]++; 375 376 speedcap[n] = sid->speed; 377 - if (speedcap[n] > host->csr.lnk_spd) 378 - speedcap[n] = host->csr.lnk_spd; 379 n--; 380 } 381 } ··· 408 } 409 } 410 411 - #if SELFID_SPEED_UNKNOWN != IEEE1394_SPEED_MAX 412 - /* assume maximum speed for 1394b PHYs, nodemgr will correct it */ 413 - for (n = 0; n < nodecount; n++) 414 - if (speedcap[n] == SELFID_SPEED_UNKNOWN) 415 - speedcap[n] = IEEE1394_SPEED_MAX; 416 - #endif 417 } 418 419
··· 338 u8 cldcnt[nodecount]; 339 u8 *map = host->speed_map; 340 u8 *speedcap = host->speed; 341 + u8 local_link_speed = host->csr.lnk_spd; 342 struct selfid *sid; 343 struct ext_selfid *esid; 344 int i, j, n; ··· 373 if (sid->port2 == SELFID_PORT_CHILD) cldcnt[n]++; 374 375 speedcap[n] = sid->speed; 376 + if (speedcap[n] > local_link_speed) 377 + speedcap[n] = local_link_speed; 378 n--; 379 } 380 } ··· 407 } 408 } 409 410 + /* assume a maximum speed for 1394b PHYs, nodemgr will correct it */ 411 + if (local_link_speed > SELFID_SPEED_UNKNOWN) 412 + for (i = 0; i < nodecount; i++) 413 + if (speedcap[i] == SELFID_SPEED_UNKNOWN) 414 + speedcap[i] = local_link_speed; 415 } 416 417