@@ -245,7 +245,7 @@ struct grcan_device_config {
245
245
.rxsize = GRCAN_DEFAULT_BUFFER_SIZE, \
246
246
}
247
247
248
- #define GRCAN_TXBUG_SAFE_GRLIB_VERSION 0x4100
248
+ #define GRCAN_TXBUG_SAFE_GRLIB_VERSION 4100
249
249
#define GRLIB_VERSION_MASK 0xffff
250
250
251
251
/* GRCAN private data structure */
@@ -1141,15 +1141,15 @@ static int grcan_close(struct net_device *dev)
1141
1141
return 0 ;
1142
1142
}
1143
1143
1144
- static int grcan_transmit_catch_up (struct net_device * dev , int budget )
1144
+ static void grcan_transmit_catch_up (struct net_device * dev )
1145
1145
{
1146
1146
struct grcan_priv * priv = netdev_priv (dev );
1147
1147
unsigned long flags ;
1148
1148
int work_done ;
1149
1149
1150
1150
spin_lock_irqsave (& priv -> lock , flags );
1151
1151
1152
- work_done = catch_up_echo_skb (dev , budget , true);
1152
+ work_done = catch_up_echo_skb (dev , -1 , true);
1153
1153
if (work_done ) {
1154
1154
if (!priv -> resetting && !priv -> closing &&
1155
1155
!(priv -> can .ctrlmode & CAN_CTRLMODE_LISTENONLY ))
@@ -1163,8 +1163,6 @@ static int grcan_transmit_catch_up(struct net_device *dev, int budget)
1163
1163
}
1164
1164
1165
1165
spin_unlock_irqrestore (& priv -> lock , flags );
1166
-
1167
- return work_done ;
1168
1166
}
1169
1167
1170
1168
static int grcan_receive (struct net_device * dev , int budget )
@@ -1246,19 +1244,13 @@ static int grcan_poll(struct napi_struct *napi, int budget)
1246
1244
struct net_device * dev = priv -> dev ;
1247
1245
struct grcan_registers __iomem * regs = priv -> regs ;
1248
1246
unsigned long flags ;
1249
- int tx_work_done , rx_work_done ;
1250
- int rx_budget = budget / 2 ;
1251
- int tx_budget = budget - rx_budget ;
1247
+ int work_done ;
1252
1248
1253
- /* Half of the budget for receiveing messages */
1254
- rx_work_done = grcan_receive (dev , rx_budget );
1249
+ work_done = grcan_receive (dev , budget );
1255
1250
1256
- /* Half of the budget for transmitting messages as that can trigger echo
1257
- * frames being received
1258
- */
1259
- tx_work_done = grcan_transmit_catch_up (dev , tx_budget );
1251
+ grcan_transmit_catch_up (dev );
1260
1252
1261
- if (rx_work_done < rx_budget && tx_work_done < tx_budget ) {
1253
+ if (work_done < budget ) {
1262
1254
napi_complete (napi );
1263
1255
1264
1256
/* Guarantee no interference with a running reset that otherwise
@@ -1275,7 +1267,7 @@ static int grcan_poll(struct napi_struct *napi, int budget)
1275
1267
spin_unlock_irqrestore (& priv -> lock , flags );
1276
1268
}
1277
1269
1278
- return rx_work_done + tx_work_done ;
1270
+ return work_done ;
1279
1271
}
1280
1272
1281
1273
/* Work tx bug by waiting while for the risky situation to clear. If that fails,
@@ -1665,6 +1657,7 @@ static int grcan_setup_netdev(struct platform_device *ofdev,
1665
1657
static int grcan_probe (struct platform_device * ofdev )
1666
1658
{
1667
1659
struct device_node * np = ofdev -> dev .of_node ;
1660
+ struct device_node * sysid_parent ;
1668
1661
struct resource * res ;
1669
1662
u32 sysid , ambafreq ;
1670
1663
int irq , err ;
@@ -1674,10 +1667,15 @@ static int grcan_probe(struct platform_device *ofdev)
1674
1667
/* Compare GRLIB version number with the first that does not
1675
1668
* have the tx bug (see start_xmit)
1676
1669
*/
1677
- err = of_property_read_u32 (np , "systemid" , & sysid );
1678
- if (!err && ((sysid & GRLIB_VERSION_MASK )
1679
- >= GRCAN_TXBUG_SAFE_GRLIB_VERSION ))
1680
- txbug = false;
1670
+ sysid_parent = of_find_node_by_path ("/ambapp0" );
1671
+ if (sysid_parent ) {
1672
+ of_node_get (sysid_parent );
1673
+ err = of_property_read_u32 (sysid_parent , "systemid" , & sysid );
1674
+ if (!err && ((sysid & GRLIB_VERSION_MASK ) >=
1675
+ GRCAN_TXBUG_SAFE_GRLIB_VERSION ))
1676
+ txbug = false;
1677
+ of_node_put (sysid_parent );
1678
+ }
1681
1679
1682
1680
err = of_property_read_u32 (np , "freq" , & ambafreq );
1683
1681
if (err ) {
0 commit comments