public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Heiner Kallweit <hkallweit1@gmail.com>
To: javen <javen_xu@realsil.com.cn>,
	nic_swsd@realtek.com, andrew+netdev@lunn.ch, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	horms@kernel.org
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next v1 4/4] r8169: enable system enter c10 with RTL8116af
Date: Mon, 2 Mar 2026 22:53:02 +0100	[thread overview]
Message-ID: <9b6aeead-4e60-4df4-8aaf-b07ab2c99d46@gmail.com> (raw)
In-Reply-To: <20260302063215.1790-5-javen_xu@realsil.com.cn>

On 02.03.2026 07:32, javen wrote:
> From: Javen Xu <javen_xu@realsil.com.cn>
> 
> RTL8116af is a multi function chip. Function 1 is load with r8169
> driver. Function 0 is bmc virual driver which is used for power
> management. This patch set Function 2 to 7 into d3 state when config
> hw_config. This helps the whole system enter c10.
> 
> Signed-off-by: Javen Xu <javen_xu@realsil.com.cn>
> ---
>  drivers/net/ethernet/realtek/r8169_main.c | 95 +++++++++++++++++++++++
>  1 file changed, 95 insertions(+)
> 
> diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
> index 787859b0ab68..d8ffc76186b2 100644
> --- a/drivers/net/ethernet/realtek/r8169_main.c
> +++ b/drivers/net/ethernet/realtek/r8169_main.c
> @@ -1121,6 +1121,100 @@ DECLARE_RTL_COND(rtl_ocp_gphy_cond)
>  	return RTL_R32(tp, GPHY_OCP) & OCPAR_FLAG;
>  }
>  
> +static u32 rtl_other_csi_read(struct rtl8169_private *tp, u8 multi_fun_sel_bit, int addr)
> +{
> +	RTL_W32(tp, CSIAR, (addr & CSIAR_ADDR_MASK) | multi_fun_sel_bit << 16 |
> +		CSIAR_BYTE_ENABLE);
> +
> +	return rtl_loop_wait_high(tp, &rtl_csiar_cond, 10, 100) ?
> +		RTL_R32(tp, CSIDR) : ~0;
> +}
> +
> +static void rtl_other_csi_write(struct rtl8169_private *tp,
> +				u8 multi_fun_sel_bit,
> +				int addr,
> +				int value)
> +{
> +	RTL_W32(tp, CSIDR, value);
> +	RTL_W32(tp, CSIAR, CSIAR_WRITE_CMD | (addr & CSIAR_ADDR_MASK) |
> +		CSIAR_BYTE_ENABLE | multi_fun_sel_bit << 16);
> +
> +	rtl_loop_wait_low(tp, &rtl_csiar_cond, 10, 100);
> +}
> +
> +static void rtl8168_clear_and_set_other_fun_pci_bit(struct rtl8169_private *tp,
> +						    u8 multi_fun_sel_bit,
> +						    u32 addr,
> +						    u32 clearmask,
> +						    u32 setmask)
> +{
> +	u32 val;
> +
> +	val = rtl_other_csi_read(tp, multi_fun_sel_bit, addr);
> +	val &= ~clearmask;
> +	val |= setmask;
> +	rtl_other_csi_write(tp, multi_fun_sel_bit, addr, val);
> +}
> +
> +static void rtl8168_other_fun_dev_pci_setting(struct rtl8169_private *tp,
> +					      u32 addr,
> +					      u32 clearmask,
> +					      u32 setmask,
> +					      u8 multi_fun_sel_bit)
> +{
> +	u32 val;
> +	u8 i;
> +	u8 FunBit;
> +	/* 0: BMC, 1: NIC, 2: TCR, 3: VGA/PCIE_TO_USB, 4: EHCI, 5: WIFI, 6: WIFI, 7: KCS */
> +	for (i = 0; i < 8; i++) {
> +		FunBit = (1 << i);
> +		if (FunBit & multi_fun_sel_bit) {
> +			u8 set_other_fun = true;
> +
> +			if (i == 0) {
> +				set_other_fun = true;
> +			} else if (i == 5 || i == 6) {
> +				if (tp->dash_enabled) {
> +					val = rtl_eri_read(tp, 0x184);
> +					if (val & BIT(26))
> +						set_other_fun = false;
> +					else
> +						set_other_fun = true;
> +				}
> +			} else {
> +				val = rtl_other_csi_read(tp, i, 0x00);
> +				if (val == 0xffffffff)
> +					set_other_fun = true;
> +				else
> +					set_other_fun = false;
> +			}
> +			if (set_other_fun)
> +				rtl8168_clear_and_set_other_fun_pci_bit(tp, i, addr,
> +									clearmask, setmask);
> +		}
> +	}
> +}
> +
> +static void rtl8168_set_dash_other_fun_dev_state_change(struct rtl8169_private *tp,
> +							u8 dev_state,
> +							u8 multi_fun_sel_bit)
> +{
> +	u32 clearmask;
> +	u32 setmask;
> +
> +	if (dev_state == 0) {
> +		clearmask = (BIT(0) | BIT(1));
> +		setmask = 0;
> +		rtl8168_other_fun_dev_pci_setting(tp, 0x44, clearmask,
> +						  setmask, multi_fun_sel_bit);
> +	} else {
> +		clearmask = 0;
> +		setmask = (BIT(0) | BIT(1));
> +		rtl8168_other_fun_dev_pci_setting(tp, 0x44, clearmask,
> +						  setmask, multi_fun_sel_bit);
> +	}
> +}
> +
>  static void r8168_phy_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data)
>  {
>  	if (rtl_ocp_reg_failure(reg))
> @@ -3785,6 +3879,7 @@ static void rtl_hw_start_8117(struct rtl8169_private *tp)
>  	r8168_mac_ocp_write(tp, 0xc094, 0x0000);
>  	r8168_mac_ocp_write(tp, 0xc09e, 0x0000);
>  
> +	rtl8168_set_dash_other_fun_dev_state_change(tp, 3, 0xfc);
>  	/* firmware is for MAC only */
>  	r8169_apply_firmware(tp);
>  }

This is the type of code that would make r8169 become an unmaintainable mess like
the vendor drivers. Why not use standard means like pci_bus_read_config_word() et al?


  reply	other threads:[~2026-03-02 21:53 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-02  6:32 [PATCH net-next v1 0/4] r8169: add ltr and c10 support for RTL8116af javen
2026-03-02  6:32 ` [PATCH net-next v1 1/4] r8169: add ltr " javen
2026-03-02  6:32 ` [PATCH net-next v1 2/4] r8169: add sfp mode " javen
2026-03-02 22:07   ` Heiner Kallweit
2026-03-04  8:16     ` 许俊伟
2026-03-04 21:42       ` Heiner Kallweit
2026-03-13  7:25     ` Javen
2026-03-13 21:21       ` Heiner Kallweit
2026-03-17  3:14         ` Javen
2026-03-18 21:45           ` Heiner Kallweit
2026-03-19 17:09             ` Andrew Lunn
2026-03-02  6:32 ` [PATCH net-next v1 3/4] r8169: move DECLARE_RTL_COND() javen
2026-03-02  6:32 ` [PATCH net-next v1 4/4] r8169: enable system enter c10 with RTL8116af javen
2026-03-02 21:53   ` Heiner Kallweit [this message]
2026-03-04  9:43     ` 许俊伟
2026-03-04 21:51       ` Heiner Kallweit
2026-03-05 10:58         ` Javen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9b6aeead-4e60-4df4-8aaf-b07ab2c99d46@gmail.com \
    --to=hkallweit1@gmail.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=javen_xu@realsil.com.cn \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nic_swsd@realtek.com \
    --cc=pabeni@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox