@@ -684,6 +684,7 @@ struct rtl8169_private {
684
684
struct rtl8169_tc_offsets tc_offset ;
685
685
u32 saved_wolopts ;
686
686
687
+ const char * fw_name ;
687
688
struct rtl_fw {
688
689
const struct firmware * fw ;
689
690
@@ -696,7 +697,6 @@ struct rtl8169_private {
696
697
size_t size ;
697
698
} phy_action ;
698
699
} * rtl_fw ;
699
- #define RTL_FIRMWARE_UNKNOWN ERR_PTR(-EAGAIN)
700
700
701
701
u32 ocp_base ;
702
702
};
@@ -1510,11 +1510,6 @@ static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1510
1510
return 0 ;
1511
1511
}
1512
1512
1513
- static const char * rtl_lookup_firmware_name (struct rtl8169_private * tp )
1514
- {
1515
- return rtl_chip_infos [tp -> mac_version ].fw_name ;
1516
- }
1517
-
1518
1513
static void rtl8169_get_drvinfo (struct net_device * dev ,
1519
1514
struct ethtool_drvinfo * info )
1520
1515
{
@@ -1524,7 +1519,7 @@ static void rtl8169_get_drvinfo(struct net_device *dev,
1524
1519
strlcpy (info -> driver , MODULENAME , sizeof (info -> driver ));
1525
1520
strlcpy (info -> bus_info , pci_name (tp -> pci_dev ), sizeof (info -> bus_info ));
1526
1521
BUILD_BUG_ON (sizeof (info -> fw_version ) < sizeof (rtl_fw -> version ));
1527
- if (! IS_ERR_OR_NULL ( rtl_fw ) )
1522
+ if (rtl_fw )
1528
1523
strlcpy (info -> fw_version , rtl_fw -> version ,
1529
1524
sizeof (info -> fw_version ));
1530
1525
}
@@ -2201,7 +2196,7 @@ static bool rtl_fw_format_ok(struct rtl8169_private *tp, struct rtl_fw *rtl_fw)
2201
2196
if (fw -> size % FW_OPCODE_SIZE )
2202
2197
goto out ;
2203
2198
2204
- strlcpy (version , rtl_lookup_firmware_name ( tp ) , RTL_VER_SIZE );
2199
+ strlcpy (version , tp -> fw_name , RTL_VER_SIZE );
2205
2200
2206
2201
pa -> code = (__le32 * )fw -> data ;
2207
2202
pa -> size = fw -> size / FW_OPCODE_SIZE ;
@@ -2376,20 +2371,18 @@ static void rtl_phy_write_fw(struct rtl8169_private *tp, struct rtl_fw *rtl_fw)
2376
2371
2377
2372
static void rtl_release_firmware (struct rtl8169_private * tp )
2378
2373
{
2379
- if (! IS_ERR_OR_NULL ( tp -> rtl_fw ) ) {
2374
+ if (tp -> rtl_fw ) {
2380
2375
release_firmware (tp -> rtl_fw -> fw );
2381
2376
kfree (tp -> rtl_fw );
2377
+ tp -> rtl_fw = NULL ;
2382
2378
}
2383
- tp -> rtl_fw = RTL_FIRMWARE_UNKNOWN ;
2384
2379
}
2385
2380
2386
2381
static void rtl_apply_firmware (struct rtl8169_private * tp )
2387
2382
{
2388
- struct rtl_fw * rtl_fw = tp -> rtl_fw ;
2389
-
2390
2383
/* TODO: release firmware once rtl_phy_write_fw signals failures. */
2391
- if (! IS_ERR_OR_NULL ( rtl_fw ) )
2392
- rtl_phy_write_fw (tp , rtl_fw );
2384
+ if (tp -> rtl_fw )
2385
+ rtl_phy_write_fw (tp , tp -> rtl_fw );
2393
2386
}
2394
2387
2395
2388
static void rtl_apply_firmware_cond (struct rtl8169_private * tp , u8 reg , u16 val )
@@ -4377,21 +4370,20 @@ static void rtl_hw_reset(struct rtl8169_private *tp)
4377
4370
rtl_udelay_loop_wait_low (tp , & rtl_chipcmd_cond , 100 , 100 );
4378
4371
}
4379
4372
4380
- static void rtl_request_uncached_firmware (struct rtl8169_private * tp )
4373
+ static void rtl_request_firmware (struct rtl8169_private * tp )
4381
4374
{
4382
4375
struct rtl_fw * rtl_fw ;
4383
- const char * name ;
4384
4376
int rc = - ENOMEM ;
4385
4377
4386
- name = rtl_lookup_firmware_name ( tp );
4387
- if (! name )
4388
- goto out_no_firmware ;
4378
+ /* firmware loaded already or no firmware available */
4379
+ if (tp -> rtl_fw || ! tp -> fw_name )
4380
+ return ;
4389
4381
4390
4382
rtl_fw = kzalloc (sizeof (* rtl_fw ), GFP_KERNEL );
4391
4383
if (!rtl_fw )
4392
4384
goto err_warn ;
4393
4385
4394
- rc = request_firmware (& rtl_fw -> fw , name , tp_to_dev (tp ));
4386
+ rc = request_firmware (& rtl_fw -> fw , tp -> fw_name , tp_to_dev (tp ));
4395
4387
if (rc < 0 )
4396
4388
goto err_free ;
4397
4389
@@ -4400,7 +4392,7 @@ static void rtl_request_uncached_firmware(struct rtl8169_private *tp)
4400
4392
goto err_release_firmware ;
4401
4393
4402
4394
tp -> rtl_fw = rtl_fw ;
4403
- out :
4395
+
4404
4396
return ;
4405
4397
4406
4398
err_release_firmware :
@@ -4409,16 +4401,7 @@ static void rtl_request_uncached_firmware(struct rtl8169_private *tp)
4409
4401
kfree (rtl_fw );
4410
4402
err_warn :
4411
4403
netif_warn (tp , ifup , tp -> dev , "unable to load firmware patch %s (%d)\n" ,
4412
- name , rc );
4413
- out_no_firmware :
4414
- tp -> rtl_fw = NULL ;
4415
- goto out ;
4416
- }
4417
-
4418
- static void rtl_request_firmware (struct rtl8169_private * tp )
4419
- {
4420
- if (IS_ERR (tp -> rtl_fw ))
4421
- rtl_request_uncached_firmware (tp );
4404
+ tp -> fw_name , rc );
4422
4405
}
4423
4406
4424
4407
static void rtl_rx_close (struct rtl8169_private * tp )
@@ -7331,7 +7314,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7331
7314
tp -> irq_mask = RTL_EVENT_NAPI | cfg -> irq_mask ;
7332
7315
tp -> coalesce_info = cfg -> coalesce_info ;
7333
7316
7334
- tp -> rtl_fw = RTL_FIRMWARE_UNKNOWN ;
7317
+ tp -> fw_name = rtl_chip_infos [ chipset ]. fw_name ;
7335
7318
7336
7319
tp -> counters = dmam_alloc_coherent (& pdev -> dev , sizeof (* tp -> counters ),
7337
7320
& tp -> counters_phys_addr ,
0 commit comments