Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'dwmac-support-for-rockchip-rk3506'

Heiko Stuebner says:

====================
DWMAC support for Rockchip RK3506

Some cleanups to the DT binding for Rockchip variants of the dwmac
and adding the RK3506 support on top.

As well as the driver-glue needed for setting up the correct RMII
speed seitings.
====================

Link: https://patch.msgid.link/20251023111213.298860-1-heiko@sntech.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+73 -1
+3
Documentation/devicetree/bindings/net/rockchip-dwmac.yaml
··· 24 24 - rockchip,rk3366-gmac 25 25 - rockchip,rk3368-gmac 26 26 - rockchip,rk3399-gmac 27 + - rockchip,rk3506-gmac 27 28 - rockchip,rk3528-gmac 28 29 - rockchip,rk3568-gmac 29 30 - rockchip,rk3576-gmac ··· 51 50 - rockchip,rv1108-gmac 52 51 - items: 53 52 - enum: 53 + - rockchip,rk3506-gmac 54 54 - rockchip,rk3528-gmac 55 55 - rockchip,rk3568-gmac 56 56 - rockchip,rk3576-gmac ··· 150 148 compatible: 151 149 contains: 152 150 enum: 151 + - rockchip,rk3506-gmac 153 152 - rockchip,rk3528-gmac 154 153 then: 155 154 properties:
+5 -1
Documentation/devicetree/bindings/net/snps,dwmac.yaml
··· 86 86 - rockchip,rk3328-gmac 87 87 - rockchip,rk3366-gmac 88 88 - rockchip,rk3368-gmac 89 + - rockchip,rk3399-gmac 90 + - rockchip,rk3506-gmac 91 + - rockchip,rk3528-gmac 92 + - rockchip,rk3568-gmac 89 93 - rockchip,rk3576-gmac 90 94 - rockchip,rk3588-gmac 91 - - rockchip,rk3399-gmac 92 95 - rockchip,rv1108-gmac 96 + - rockchip,rv1126-gmac 93 97 - snps,dwmac 94 98 - snps,dwmac-3.40a 95 99 - snps,dwmac-3.50a
+1
MAINTAINERS
··· 3296 3296 F: drivers/*/*rockchip* 3297 3297 F: drivers/clk/rockchip/ 3298 3298 F: drivers/i2c/busses/i2c-rk3x.c 3299 + F: drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c 3299 3300 F: sound/soc/rockchip/ 3300 3301 N: rockchip 3301 3302
+64
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
··· 827 827 .set_speed = rk3399_set_speed, 828 828 }; 829 829 830 + #define RK3506_GRF_SOC_CON8 0x0020 831 + #define RK3506_GRF_SOC_CON11 0x002c 832 + 833 + #define RK3506_GMAC_RMII_MODE GRF_BIT(1) 834 + 835 + #define RK3506_GMAC_CLK_RMII_DIV2 GRF_BIT(3) 836 + #define RK3506_GMAC_CLK_RMII_DIV20 GRF_CLR_BIT(3) 837 + 838 + #define RK3506_GMAC_CLK_SELECT_CRU GRF_CLR_BIT(5) 839 + #define RK3506_GMAC_CLK_SELECT_IO GRF_BIT(5) 840 + 841 + #define RK3506_GMAC_CLK_RMII_GATE GRF_BIT(2) 842 + #define RK3506_GMAC_CLK_RMII_NOGATE GRF_CLR_BIT(2) 843 + 844 + static void rk3506_set_to_rmii(struct rk_priv_data *bsp_priv) 845 + { 846 + unsigned int id = bsp_priv->id, offset; 847 + 848 + offset = (id == 1) ? RK3506_GRF_SOC_CON11 : RK3506_GRF_SOC_CON8; 849 + regmap_write(bsp_priv->grf, offset, RK3506_GMAC_RMII_MODE); 850 + } 851 + 852 + static const struct rk_reg_speed_data rk3506_reg_speed_data = { 853 + .rmii_10 = RK3506_GMAC_CLK_RMII_DIV20, 854 + .rmii_100 = RK3506_GMAC_CLK_RMII_DIV2, 855 + }; 856 + 857 + static int rk3506_set_speed(struct rk_priv_data *bsp_priv, 858 + phy_interface_t interface, int speed) 859 + { 860 + unsigned int id = bsp_priv->id, offset; 861 + 862 + offset = (id == 1) ? RK3506_GRF_SOC_CON11 : RK3506_GRF_SOC_CON8; 863 + return rk_set_reg_speed(bsp_priv, &rk3506_reg_speed_data, 864 + offset, interface, speed); 865 + } 866 + 867 + static void rk3506_set_clock_selection(struct rk_priv_data *bsp_priv, 868 + bool input, bool enable) 869 + { 870 + unsigned int value, offset, id = bsp_priv->id; 871 + 872 + offset = (id == 1) ? RK3506_GRF_SOC_CON11 : RK3506_GRF_SOC_CON8; 873 + 874 + value = input ? RK3506_GMAC_CLK_SELECT_IO : 875 + RK3506_GMAC_CLK_SELECT_CRU; 876 + value |= enable ? RK3506_GMAC_CLK_RMII_NOGATE : 877 + RK3506_GMAC_CLK_RMII_GATE; 878 + regmap_write(bsp_priv->grf, offset, value); 879 + } 880 + 881 + static const struct rk_gmac_ops rk3506_ops = { 882 + .set_to_rmii = rk3506_set_to_rmii, 883 + .set_speed = rk3506_set_speed, 884 + .set_clock_selection = rk3506_set_clock_selection, 885 + .regs_valid = true, 886 + .regs = { 887 + 0xff4c8000, /* gmac0 */ 888 + 0xff4d0000, /* gmac1 */ 889 + 0x0, /* sentinel */ 890 + }, 891 + }; 892 + 830 893 #define RK3528_VO_GRF_GMAC_CON 0x0018 831 894 #define RK3528_VO_GRF_MACPHY_CON0 0x001c 832 895 #define RK3528_VO_GRF_MACPHY_CON1 0x0020 ··· 1872 1809 { .compatible = "rockchip,rk3366-gmac", .data = &rk3366_ops }, 1873 1810 { .compatible = "rockchip,rk3368-gmac", .data = &rk3368_ops }, 1874 1811 { .compatible = "rockchip,rk3399-gmac", .data = &rk3399_ops }, 1812 + { .compatible = "rockchip,rk3506-gmac", .data = &rk3506_ops }, 1875 1813 { .compatible = "rockchip,rk3528-gmac", .data = &rk3528_ops }, 1876 1814 { .compatible = "rockchip,rk3568-gmac", .data = &rk3568_ops }, 1877 1815 { .compatible = "rockchip,rk3576-gmac", .data = &rk3576_ops },