18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2015 Broadcom Corporation 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _LINUX_BCM_PHY_LIB_H 78c2ecf20Sopenharmony_ci#define _LINUX_BCM_PHY_LIB_H 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/brcmphy.h> 108c2ecf20Sopenharmony_ci#include <linux/phy.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci/* 28nm only register definitions */ 138c2ecf20Sopenharmony_ci#define MISC_ADDR(base, channel) base, channel 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#define DSP_TAP10 MISC_ADDR(0x0a, 0) 168c2ecf20Sopenharmony_ci#define PLL_PLLCTRL_1 MISC_ADDR(0x32, 1) 178c2ecf20Sopenharmony_ci#define PLL_PLLCTRL_2 MISC_ADDR(0x32, 2) 188c2ecf20Sopenharmony_ci#define PLL_PLLCTRL_4 MISC_ADDR(0x33, 0) 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#define AFE_RXCONFIG_0 MISC_ADDR(0x38, 0) 218c2ecf20Sopenharmony_ci#define AFE_RXCONFIG_1 MISC_ADDR(0x38, 1) 228c2ecf20Sopenharmony_ci#define AFE_RXCONFIG_2 MISC_ADDR(0x38, 2) 238c2ecf20Sopenharmony_ci#define AFE_RX_LP_COUNTER MISC_ADDR(0x38, 3) 248c2ecf20Sopenharmony_ci#define AFE_TX_CONFIG MISC_ADDR(0x39, 0) 258c2ecf20Sopenharmony_ci#define AFE_VDCA_ICTRL_0 MISC_ADDR(0x39, 1) 268c2ecf20Sopenharmony_ci#define AFE_VDAC_OTHERS_0 MISC_ADDR(0x39, 3) 278c2ecf20Sopenharmony_ci#define AFE_HPF_TRIM_OTHERS MISC_ADDR(0x3a, 0) 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ciint __bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val); 318c2ecf20Sopenharmony_ciint __bcm_phy_read_exp(struct phy_device *phydev, u16 reg); 328c2ecf20Sopenharmony_ciint __bcm_phy_modify_exp(struct phy_device *phydev, u16 reg, u16 mask, u16 set); 338c2ecf20Sopenharmony_ciint bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val); 348c2ecf20Sopenharmony_ciint bcm_phy_read_exp(struct phy_device *phydev, u16 reg); 358c2ecf20Sopenharmony_ciint bcm_phy_modify_exp(struct phy_device *phydev, u16 reg, u16 mask, u16 set); 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_cistatic inline int bcm_phy_write_exp_sel(struct phy_device *phydev, 388c2ecf20Sopenharmony_ci u16 reg, u16 val) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci return bcm_phy_write_exp(phydev, reg | MII_BCM54XX_EXP_SEL_ER, val); 418c2ecf20Sopenharmony_ci} 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ciint bcm54xx_auxctl_write(struct phy_device *phydev, u16 regnum, u16 val); 448c2ecf20Sopenharmony_ciint bcm54xx_auxctl_read(struct phy_device *phydev, u16 regnum); 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ciint bcm_phy_write_misc(struct phy_device *phydev, 478c2ecf20Sopenharmony_ci u16 reg, u16 chl, u16 value); 488c2ecf20Sopenharmony_ciint bcm_phy_read_misc(struct phy_device *phydev, 498c2ecf20Sopenharmony_ci u16 reg, u16 chl); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ciint bcm_phy_write_shadow(struct phy_device *phydev, u16 shadow, 528c2ecf20Sopenharmony_ci u16 val); 538c2ecf20Sopenharmony_ciint bcm_phy_read_shadow(struct phy_device *phydev, u16 shadow); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ciint __bcm_phy_write_rdb(struct phy_device *phydev, u16 rdb, u16 val); 568c2ecf20Sopenharmony_ciint bcm_phy_write_rdb(struct phy_device *phydev, u16 rdb, u16 val); 578c2ecf20Sopenharmony_ciint __bcm_phy_read_rdb(struct phy_device *phydev, u16 rdb); 588c2ecf20Sopenharmony_ciint bcm_phy_read_rdb(struct phy_device *phydev, u16 rdb); 598c2ecf20Sopenharmony_ciint __bcm_phy_modify_rdb(struct phy_device *phydev, u16 rdb, u16 mask, 608c2ecf20Sopenharmony_ci u16 set); 618c2ecf20Sopenharmony_ciint bcm_phy_modify_rdb(struct phy_device *phydev, u16 rdb, u16 mask, 628c2ecf20Sopenharmony_ci u16 set); 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ciint bcm_phy_ack_intr(struct phy_device *phydev); 658c2ecf20Sopenharmony_ciint bcm_phy_config_intr(struct phy_device *phydev); 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ciint bcm_phy_enable_apd(struct phy_device *phydev, bool dll_pwr_down); 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ciint bcm_phy_set_eee(struct phy_device *phydev, bool enable); 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ciint bcm_phy_downshift_get(struct phy_device *phydev, u8 *count); 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ciint bcm_phy_downshift_set(struct phy_device *phydev, u8 count); 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ciint bcm_phy_get_sset_count(struct phy_device *phydev); 768c2ecf20Sopenharmony_civoid bcm_phy_get_strings(struct phy_device *phydev, u8 *data); 778c2ecf20Sopenharmony_civoid bcm_phy_get_stats(struct phy_device *phydev, u64 *shadow, 788c2ecf20Sopenharmony_ci struct ethtool_stats *stats, u64 *data); 798c2ecf20Sopenharmony_civoid bcm_phy_r_rc_cal_reset(struct phy_device *phydev); 808c2ecf20Sopenharmony_ciint bcm_phy_28nm_a0b0_afe_config_init(struct phy_device *phydev); 818c2ecf20Sopenharmony_ciint bcm_phy_enable_jumbo(struct phy_device *phydev); 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ciint bcm_phy_cable_test_get_status_rdb(struct phy_device *phydev, 848c2ecf20Sopenharmony_ci bool *finished); 858c2ecf20Sopenharmony_ciint bcm_phy_cable_test_start_rdb(struct phy_device *phydev); 868c2ecf20Sopenharmony_ciint bcm_phy_cable_test_start(struct phy_device *phydev); 878c2ecf20Sopenharmony_ciint bcm_phy_cable_test_get_status(struct phy_device *phydev, bool *finished); 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ci#endif /* _LINUX_BCM_PHY_LIB_H */ 90