/linux/drivers/pinctrl/ |
H A D | pinctrl-single.c | 205 #define PCS_QUIRK_HAS_SHARED_IRQ (pcs->flags & PCS_QUIRK_SHARED_IRQ) 206 #define PCS_HAS_IRQ (pcs->flags & PCS_FEAT_IRQ) 207 #define PCS_HAS_PINCONF (pcs->flags & PCS_FEAT_PINCONF) 268 static unsigned int pcs_pin_reg_offset_get(struct pcs_device *pcs, in pcs_pin_reg_offset_get() argument 271 unsigned int mux_bytes = pcs->width / BITS_PER_BYTE; in pcs_pin_reg_offset_get() 273 if (pcs->bits_per_mux) { in pcs_pin_reg_offset_get() 276 pin_offset_bytes = (pcs->bits_per_pin * pin) / BITS_PER_BYTE; in pcs_pin_reg_offset_get() 283 static unsigned int pcs_pin_shift_reg_get(struct pcs_device *pcs, in pcs_pin_shift_reg_get() argument 286 return (pin % (pcs->width / pcs->bits_per_pin)) * pcs->bits_per_pin; in pcs_pin_shift_reg_get() 293 struct pcs_device *pcs; in pcs_pin_dbg_show() local [all …]
|
/linux/drivers/net/pcs/ |
H A D | pcs-lynx.c | 3 * Lynx PCS MDIO helpers 8 #include <linux/pcs-lynx.h> 11 #define SGMII_CLOCK_PERIOD_NS 8 /* PCS is clocked at 125 MHz */ 24 struct phylink_pcs pcs; member 35 #define phylink_pcs_to_lynx(pl_pcs) container_of((pl_pcs), struct lynx_pcs, pcs) 36 #define lynx_to_phylink_pcs(lynx) (&(lynx)->pcs) 38 static void lynx_pcs_get_state_usxgmii(struct mdio_device *pcs, in lynx_pcs_get_state_usxgmii() argument 41 struct mii_bus *bus = pcs->bus; in lynx_pcs_get_state_usxgmii() 42 int addr = pcs->addr; in lynx_pcs_get_state_usxgmii() 61 static void lynx_pcs_get_state_2500basex(struct mdio_device *pcs, in lynx_pcs_get_state_2500basex() argument [all …]
|
H A D | pcs-mtk-lynxi.c | 13 #include <linux/pcs/pcs-mtk-lynxi.h> 72 * @dev: Pointer to device owning the PCS 75 * @pcs: Phylink PCS structure 82 struct phylink_pcs pcs; member 86 static struct mtk_pcs_lynxi *pcs_to_mtk_pcs_lynxi(struct phylink_pcs *pcs) in pcs_to_mtk_pcs_lynxi() argument 88 return container_of(pcs, struct mtk_pcs_lynxi, pcs); in pcs_to_mtk_pcs_lynxi() 91 static void mtk_pcs_lynxi_get_state(struct phylink_pcs *pcs, in mtk_pcs_lynxi_get_state() argument 94 struct mtk_pcs_lynxi *mpcs = pcs_to_mtk_pcs_lynxi(pcs); in mtk_pcs_lynxi_get_state() 105 static int mtk_pcs_lynxi_config(struct phylink_pcs *pcs, unsigned int neg_mode, in mtk_pcs_lynxi_config() argument 110 struct mtk_pcs_lynxi *mpcs = pcs_to_mtk_pcs_lynxi(pcs); in mtk_pcs_lynxi_config() [all …]
|
H A D | Makefile | 2 # Makefile for Linux PCS drivers 4 pcs_xpcs-$(CONFIG_PCS_XPCS) := pcs-xpcs.o pcs-xpcs-plat.o \ 5 pcs-xpcs-nxp.o pcs-xpcs-wx.o 8 obj-$(CONFIG_PCS_LYNX) += pcs-lynx.o 9 obj-$(CONFIG_PCS_MTK_LYNXI) += pcs-mtk-lynxi.o 10 obj-$(CONFIG_PCS_RZN1_MIIC) += pcs-rzn1-miic.o
|
H A D | Kconfig | 3 # PCS Layer Configuration 6 menu "PCS device drivers" 18 This module provides helpers to phylink for managing the Lynx PCS 25 This module provides helpers to phylink for managing the LynxI PCS 33 on RZ/N1 SoCs. This PCS converts MII to RMII/RGMII or can be set in
|
/linux/include/linux/ |
H A D | phylink.h | 25 /* PCS "negotiation" mode. 149 * are supported by the MAC/PCS. 170 * @mac_select_pcs: Select a PCS for the interface mode. 212 * mac_select_pcs: Select a PCS for the interface mode. 214 * @interface: PHY interface mode for PCS 219 * This must not modify any state. It is used to query which PCS should 222 * set the PCS that will be used. 271 * the results of in-band negotiation/status from the MAC PCS should be used 335 * complete any necessary steps after the MAC and PCS have been configured 374 * where these settings are not automatically conveyed from the PCS block, [all …]
|
/linux/drivers/net/dsa/b53/ |
H A D | b53_serdes.c | 20 static inline struct b53_pcs *pcs_to_b53_pcs(struct phylink_pcs *pcs) in pcs_to_b53_pcs() argument 22 return container_of(pcs, struct b53_pcs, pcs); in pcs_to_b53_pcs() 68 static int b53_serdes_config(struct phylink_pcs *pcs, unsigned int neg_mode, in b53_serdes_config() argument 73 struct b53_device *dev = pcs_to_b53_pcs(pcs)->dev; in b53_serdes_config() 74 u8 lane = pcs_to_b53_pcs(pcs)->lane; in b53_serdes_config() 89 static void b53_serdes_an_restart(struct phylink_pcs *pcs) in b53_serdes_an_restart() argument 91 struct b53_device *dev = pcs_to_b53_pcs(pcs)->dev; in b53_serdes_an_restart() 92 u8 lane = pcs_to_b53_pcs(pcs)->lane; in b53_serdes_an_restart() 102 static void b53_serdes_get_state(struct phylink_pcs *pcs, in b53_serdes_get_state() argument 105 struct b53_device *dev = pcs_to_b53_pcs(pcs)->dev; in b53_serdes_get_state() [all …]
|
/linux/arch/arm64/boot/dts/freescale/ |
H A D | fsl-ls1046-post.dtsi | 27 pcs-handle = <&qsgmiib_pcs3>; 28 pcs-handle-names = "qsgmii"; 42 pcs-handle = <&pcsphy4>, <&qsgmiib_pcs1>; 43 pcs-handle-names = "sgmii", "qsgmii"; 48 pcs-handle = <&pcsphy5>, <&pcsphy5>; 49 pcs-handle-names = "sgmii", "qsgmii"; 57 pcs-handle = <&pcsphy7>, <&qsgmiib_pcs2>, <&pcsphy7>; 58 pcs-handle-names = "sgmii", "qsgmii", "xfi"; 62 qsgmiib_pcs1: ethernet-pcs@1 { 63 compatible = "fsl,lynx-pcs"; [all …]
|
H A D | fsl-ls1043-post.dtsi | 27 pcs-handle-names = "qsgmii"; 32 pcs-handle = <&pcsphy1>, <&qsgmiib_pcs1>; 33 pcs-handle-names = "sgmii", "qsgmii"; 44 pcs-handle = <&pcsphy4>, <&qsgmiib_pcs2>; 45 pcs-handle-names = "sgmii", "qsgmii"; 50 pcs-handle = <&pcsphy5>, <&qsgmiib_pcs3>; 51 pcs-handle-names = "sgmii", "qsgmii"; 58 qsgmiib_pcs1: ethernet-pcs@1 { 59 compatible = "fsl,lynx-pcs"; 63 qsgmiib_pcs2: ethernet-pcs@2 { [all …]
|
H A D | tqmls1088a-mbls10xxa-mc.dtsi | 33 pcs-handle = <&pcs1>; 37 pcs-handle = <&pcs2>; 41 pcs-handle = <&pcs3_0>; 45 pcs-handle = <&pcs3_1>; 49 pcs-handle = <&pcs3_2>; 53 pcs-handle = <&pcs3_3>; 57 pcs-handle = <&pcs7_0>; 61 pcs-handle = <&pcs7_1>; 65 pcs-handle = <&pcs7_2>; 69 pcs-handle = <&pcs7_3>;
|
/linux/drivers/net/dsa/mv88e6xxx/ |
H A D | pcs-639x.c | 3 * Marvell 88E6352 family SERDES PCS support 129 static struct mv88e639x_pcs *sgmii_pcs_to_mv88e639x_pcs(struct phylink_pcs *pcs) in sgmii_pcs_to_mv88e639x_pcs() argument 131 return container_of(pcs, struct mv88e639x_pcs, sgmii_pcs); in sgmii_pcs_to_mv88e639x_pcs() 183 static int mv88e639x_sgmii_pcs_enable(struct phylink_pcs *pcs) in mv88e639x_sgmii_pcs_enable() argument 185 struct mv88e639x_pcs *mpcs = sgmii_pcs_to_mv88e639x_pcs(pcs); in mv88e639x_sgmii_pcs_enable() 193 static void mv88e639x_sgmii_pcs_disable(struct phylink_pcs *pcs) in mv88e639x_sgmii_pcs_disable() argument 195 struct mv88e639x_pcs *mpcs = sgmii_pcs_to_mv88e639x_pcs(pcs); in mv88e639x_sgmii_pcs_disable() 201 static void mv88e639x_sgmii_pcs_pre_config(struct phylink_pcs *pcs, in mv88e639x_sgmii_pcs_pre_config() argument 204 struct mv88e639x_pcs *mpcs = sgmii_pcs_to_mv88e639x_pcs(pcs); in mv88e639x_sgmii_pcs_pre_config() 240 static int mv88e639x_sgmii_pcs_post_config(struct phylink_pcs *pcs, in mv88e639x_sgmii_pcs_post_config() argument [all …]
|
H A D | pcs-6352.c | 3 * Marvell 88E6352 family SERDES PCS support 33 static struct marvell_c22_pcs *pcs_to_marvell_c22_pcs(struct phylink_pcs *pcs) in pcs_to_marvell_c22_pcs() argument 35 return container_of(pcs, struct marvell_c22_pcs, phylink_pcs); in pcs_to_marvell_c22_pcs() 140 static int marvell_c22_pcs_enable(struct phylink_pcs *pcs) in marvell_c22_pcs_enable() argument 142 struct marvell_c22_pcs *mpcs = pcs_to_marvell_c22_pcs(pcs); in marvell_c22_pcs_enable() 152 static void marvell_c22_pcs_disable(struct phylink_pcs *pcs) in marvell_c22_pcs_disable() argument 154 struct marvell_c22_pcs *mpcs = pcs_to_marvell_c22_pcs(pcs); in marvell_c22_pcs_disable() 160 static void marvell_c22_pcs_get_state(struct phylink_pcs *pcs, in marvell_c22_pcs_get_state() argument 163 struct marvell_c22_pcs *mpcs = pcs_to_marvell_c22_pcs(pcs); in marvell_c22_pcs_get_state() 184 static int marvell_c22_pcs_config(struct phylink_pcs *pcs, in marvell_c22_pcs_config() argument [all …]
|
H A D | pcs-6185.c | 3 * Marvell 88E6185 family SERDES PCS support 24 static struct mv88e6185_pcs *pcs_to_mv88e6185_pcs(struct phylink_pcs *pcs) in pcs_to_mv88e6185_pcs() argument 26 return container_of(pcs, struct mv88e6185_pcs, phylink_pcs); in pcs_to_mv88e6185_pcs() 57 static void mv88e6185_pcs_get_state(struct phylink_pcs *pcs, in mv88e6185_pcs_get_state() argument 60 struct mv88e6185_pcs *mpcs = pcs_to_mv88e6185_pcs(pcs); in mv88e6185_pcs_get_state() 98 static int mv88e6185_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode, in mv88e6185_pcs_config() argument 106 static void mv88e6185_pcs_an_restart(struct phylink_pcs *pcs) in mv88e6185_pcs_an_restart() argument 125 * have a PCS or not. in mv88e6185_pcs_init()
|
/linux/Documentation/networking/ |
H A D | sfp-phylink.rst | 219 should be used to configure the MAC when the MAC and PCS are not 249 10. Some Ethernet controllers work in pair with a PCS (Physical Coding Sublayer) 252 PCS whose operation is transparent, some other require dedicated PCS 254 provides a PCS abstraction through :c:type:`struct phylink_pcs <phylink_pcs>`. 256 Identify if your driver has one or more internal PCS blocks, and/or if 257 your controller can use an external PCS block that might be internally 260 If your controller doesn't have any internal PCS, you can go to step 11. 262 If your Ethernet controller contains one or several PCS blocks, create 263 one :c:type:`struct phylink_pcs <phylink_pcs>` instance per PCS block within 268 struct phylink_pcs pcs; [all …]
|
/linux/Documentation/devicetree/bindings/net/ |
H A D | nvidia,tegra234-mgbe.yaml | 49 - const: eee-pcs 50 - const: rx-pcs-input 51 - const: rx-pcs-m 52 - const: rx-pcs 53 - const: tx-pcs 61 - const: pcs 137 "rx-input", "tx", "eee-pcs", "rx-pcs-input", "rx-pcs-m", 138 "rx-pcs", "tx-pcs"; 141 reset-names = "mac", "pcs";
|
/linux/drivers/phy/qualcomm/ |
H A D | phy-qcom-qmp.h | 35 #include "phy-qcom-qmp-pcs-v2.h" 37 #include "phy-qcom-qmp-pcs-v3.h" 39 #include "phy-qcom-qmp-pcs-v4.h" 41 #include "phy-qcom-qmp-pcs-v4_20.h" 43 #include "phy-qcom-qmp-pcs-v5.h" 45 #include "phy-qcom-qmp-pcs-v5_20.h" 47 #include "phy-qcom-qmp-pcs-v6.h" 49 #include "phy-qcom-qmp-pcs-v6-n4.h" 51 #include "phy-qcom-qmp-pcs-v6_20.h" 53 #include "phy-qcom-qmp-pcs-v7.h"
|
H A D | phy-qcom-qmp-ufs.c | 27 #include "phy-qcom-qmp-pcs-ufs-v2.h" 28 #include "phy-qcom-qmp-pcs-ufs-v3.h" 29 #include "phy-qcom-qmp-pcs-ufs-v4.h" 30 #include "phy-qcom-qmp-pcs-ufs-v5.h" 31 #include "phy-qcom-qmp-pcs-ufs-v6.h" 44 /* PCS registers */ 954 u16 pcs; member 962 /* Init sequence for PHY blocks - serdes, tx, rx, pcs */ 969 const struct qmp_phy_init_tbl *pcs; member 983 /* Main init sequence for PHY blocks - serdes, tx, rx, pcs */ [all …]
|
H A D | phy-qcom-qmp-usbc.c | 29 #include "phy-qcom-qmp-pcs-misc-v3.h" 35 /* PCS registers */ 289 u16 pcs; member 302 /* Init sequence for PHY blocks - serdes, tx, rx, pcs */ 326 void __iomem *pcs; member 401 .pcs = 0xc00, 461 void __iomem *pcs = qmp->pcs; in qmp_usbc_init() local 487 qphy_setbits(pcs, cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL], SW_PWRDN); in qmp_usbc_init() 538 /* Tx, Rx, and PCS configurations */ in qmp_usbc_power_on() 545 qmp_configure(qmp->dev, qmp->pcs, cfg->pcs_tbl, cfg->pcs_tbl_num); in qmp_usbc_power_on() [all …]
|
/linux/drivers/net/phy/ |
H A D | phylink.c | 51 struct phylink_pcs *pcs; member 651 struct phylink_pcs *pcs = NULL; in phylink_validate_mac_and_pcs() local 655 /* Get the PCS for this interface mode */ in phylink_validate_mac_and_pcs() 657 pcs = pl->mac_ops->mac_select_pcs(pl->config, state->interface); in phylink_validate_mac_and_pcs() 658 if (IS_ERR(pcs)) in phylink_validate_mac_and_pcs() 659 return PTR_ERR(pcs); in phylink_validate_mac_and_pcs() 662 if (pcs) { in phylink_validate_mac_and_pcs() 663 /* The PCS, if present, must be setup before phylink_create() in phylink_validate_mac_and_pcs() 667 if (!pcs->ops) { in phylink_validate_mac_and_pcs() 668 phylink_err(pl, "interface %s: uninitialised PCS\n", in phylink_validate_mac_and_pcs() [all …]
|
/linux/Documentation/devicetree/bindings/net/pcs/ |
H A D | fsl,lynx-pcs.yaml | 4 $id: http://devicetree.org/schemas/net/pcs/fsl,lynx-pcs.yaml# 7 title: NXP Lynx PCS 13 NXP Lynx 10G and 28G SerDes have Ethernet PCS devices which can be used as 19 const: fsl,lynx-pcs 36 qsgmii_pcs1: ethernet-pcs@1 { 37 compatible = "fsl,lynx-pcs";
|
H A D | mediatek,sgmiisys.yaml | 4 $id: http://devicetree.org/schemas/net/pcs/mediatek,sgmiisys.yaml# 13 The MediaTek SGMIISYS controller provides a SGMII PCS and some clocks 45 pcs: 47 description: MediaTek LynxI HSGMII PCS 84 - pcs 88 pcs: false
|
/linux/drivers/net/ethernet/microchip/lan966x/ |
H A D | lan966x_phylink.c | 77 /* Take PCS out of reset */ in lan966x_phylink_mac_link_down() 85 static struct lan966x_port *lan966x_pcs_to_port(struct phylink_pcs *pcs) in lan966x_pcs_to_port() argument 87 return container_of(pcs, struct lan966x_port, phylink_pcs); in lan966x_pcs_to_port() 90 static void lan966x_pcs_get_state(struct phylink_pcs *pcs, in lan966x_pcs_get_state() argument 93 struct lan966x_port *port = lan966x_pcs_to_port(pcs); in lan966x_pcs_get_state() 98 static int lan966x_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode, in lan966x_pcs_config() argument 103 struct lan966x_port *port = lan966x_pcs_to_port(pcs); in lan966x_pcs_config() 115 netdev_err(port->dev, "port PCS config failed: %d\n", ret); in lan966x_pcs_config() 120 static void lan966x_pcs_aneg_restart(struct phylink_pcs *pcs) in lan966x_pcs_aneg_restart() argument
|
/linux/drivers/net/ethernet/microchip/sparx5/ |
H A D | sparx5_phylink.c | 75 static struct sparx5_port *sparx5_pcs_to_port(struct phylink_pcs *pcs) in sparx5_pcs_to_port() argument 77 return container_of(pcs, struct sparx5_port, phylink_pcs); in sparx5_pcs_to_port() 80 static void sparx5_pcs_get_state(struct phylink_pcs *pcs, in sparx5_pcs_get_state() argument 83 struct sparx5_port *port = sparx5_pcs_to_port(pcs); in sparx5_pcs_get_state() 94 static int sparx5_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode, in sparx5_pcs_config() argument 99 struct sparx5_port *port = sparx5_pcs_to_port(pcs); in sparx5_pcs_config() 122 /* Enable the PCS matching this interface type */ in sparx5_pcs_config() 125 netdev_err(port->ndev, "port PCS config failed: %d\n", ret); in sparx5_pcs_config() 129 static void sparx5_pcs_aneg_restart(struct phylink_pcs *pcs) in sparx5_pcs_aneg_restart() argument
|
/linux/drivers/net/ethernet/meta/fbnic/ |
H A D | fbnic_phylink.c | 12 fbnic_pcs_to_net(struct phylink_pcs *pcs) in fbnic_pcs_to_net() argument 14 return container_of(pcs, struct fbnic_net, phylink_pcs); in fbnic_pcs_to_net() 18 fbnic_phylink_pcs_get_state(struct phylink_pcs *pcs, in fbnic_phylink_pcs_get_state() argument 21 struct fbnic_net *fbn = fbnic_pcs_to_net(pcs); in fbnic_phylink_pcs_get_state() 49 fbnic_phylink_pcs_enable(struct phylink_pcs *pcs) in fbnic_phylink_pcs_enable() argument 51 struct fbnic_net *fbn = fbnic_pcs_to_net(pcs); in fbnic_phylink_pcs_enable() 58 fbnic_phylink_pcs_disable(struct phylink_pcs *pcs) in fbnic_phylink_pcs_disable() argument 60 struct fbnic_net *fbn = fbnic_pcs_to_net(pcs); in fbnic_phylink_pcs_disable() 67 fbnic_phylink_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode, in fbnic_phylink_pcs_config() argument
|
/linux/drivers/clocksource/ |
H A D | timer-pistachio.c | 70 struct pistachio_clocksource *pcs = to_pistachio_clocksource(cs); in pistachio_clocksource_read_cycles() local 80 raw_spin_lock_irqsave(&pcs->lock, flags); in pistachio_clocksource_read_cycles() 81 overflow = gpt_readl(pcs->base, TIMER_CURRENT_OVERFLOW_VALUE, 0); in pistachio_clocksource_read_cycles() 82 counter = gpt_readl(pcs->base, TIMER_CURRENT_VALUE, 0); in pistachio_clocksource_read_cycles() 83 raw_spin_unlock_irqrestore(&pcs->lock, flags); in pistachio_clocksource_read_cycles() 96 struct pistachio_clocksource *pcs = to_pistachio_clocksource(cs); in pistachio_clksrc_set_mode() local 99 val = gpt_readl(pcs->base, TIMER_CFG, timeridx); in pistachio_clksrc_set_mode() 105 gpt_writel(pcs->base, val, TIMER_CFG, timeridx); in pistachio_clksrc_set_mode() 110 struct pistachio_clocksource *pcs = to_pistachio_clocksource(cs); in pistachio_clksrc_enable() local 114 gpt_writel(pcs->base, RELOAD_VALUE, TIMER_RELOAD_VALUE, timeridx); in pistachio_clksrc_enable()
|