On Mon, 22 Sep 2025 09:41:11 +0800 Dong Yibo wrote:
+static const struct mucse_hw_operations rnpgbe_hw_ops = {
+ .reset_hw = rnpgbe_reset,
+ .get_perm_mac = rnpgbe_get_permanent_mac,
+ .mbx_send_notify = rnpgbe_mbx_send_notify,
Please don't add abstraction layers, you only have one set of ops right
now call them directly. The abstractions layers make the code harder to
follow.
+static netdev_tx_t rnpgbe_xmit_frame(struct sk_buff *skb,
+ struct net_device *netdev)
+{
+ dev_kfree_skb_any(skb);
+ netdev->stats.tx_dropped++;
Please add your own stats, the stats in struct net_device
are deprecated and should not be used by new drivers.
err = rnpgbe_init_hw(hw, board_type);
if (err) {
dev_err(&pdev->dev, "Init hw err %d\n", err);
goto err_free_net;
}
+ /* Step 1: Send power-up notification to firmware (no response expected)
+ * This informs firmware to initialize hardware power state, but
+ * firmware only acknowledges receipt without returning data. Must be
+ * done before synchronization as firmware may be in low-power idle
+ * state initially.
+ */
+ err = hw->ops->mbx_send_notify(hw, true, mucse_fw_powerup);
+ if (err) {
Don't you have to power it down on errors later in this function?
--
pw-bot: cr