mirror of
https://github.com/torvalds/linux.git
synced 2024-12-05 02:23:16 +00:00
Merge branch 'stmmac-SA8155p-ADP'
@ 2022-03-02 10:39 Bhupesh Sharma 2022-03-02 10:39 ` [PATCH v2 1/2 net-next] net: stmmac: Add support for SM8150 Bhupesh Sharma 2022-03-02 10:39 ` [PATCH v2 2/2 net-next] net: stmmac: dwmac-qcom-ethqos: Adjust rgmii loopback_en per platform Bhupesh Sharma 0 siblings, 2 replies; 3+ messages in thread Bhupesh Sharma says: ==================== net: stmmac: Enable support for Qualcomm SA8155p-ADP board Changes since v1: ----------------- - v1 can be seen here: https://lore.kernel.org/netdev/20220126221725.710167-1-bhupesh.sharma@linaro.org/t/ - Fixed review comments from Bjorn - broke the v1 series into two separate series - one each for 'net' tree and 'arm clock/dts' tree - so as to ease review of the same from the respective maintainers. - This series is intended for the 'net' tree. The SA8155p-ADP board supports on-board ethernet (Gibabit Interface), with support for both RGMII and RMII buses. This patchset adds the support for the same. Note that this patchset is based on an earlier sent patchset for adding PDC controller support on SM8150 (see [1]). [1]. https://lore.kernel.org/linux-arm-msm/20220226184028.111566-1-bhupesh.sharma@linaro.org/T/ ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
d52b453608
@ -78,6 +78,7 @@ struct ethqos_emac_por {
|
||||
struct ethqos_emac_driver_data {
|
||||
const struct ethqos_emac_por *por;
|
||||
unsigned int num_por;
|
||||
bool rgmii_config_looback_en;
|
||||
};
|
||||
|
||||
struct qcom_ethqos {
|
||||
@ -90,6 +91,7 @@ struct qcom_ethqos {
|
||||
|
||||
const struct ethqos_emac_por *por;
|
||||
unsigned int num_por;
|
||||
bool rgmii_config_looback_en;
|
||||
};
|
||||
|
||||
static int rgmii_readl(struct qcom_ethqos *ethqos, unsigned int offset)
|
||||
@ -181,6 +183,22 @@ static const struct ethqos_emac_por emac_v2_3_0_por[] = {
|
||||
static const struct ethqos_emac_driver_data emac_v2_3_0_data = {
|
||||
.por = emac_v2_3_0_por,
|
||||
.num_por = ARRAY_SIZE(emac_v2_3_0_por),
|
||||
.rgmii_config_looback_en = true,
|
||||
};
|
||||
|
||||
static const struct ethqos_emac_por emac_v2_1_0_por[] = {
|
||||
{ .offset = RGMII_IO_MACRO_CONFIG, .value = 0x40C01343 },
|
||||
{ .offset = SDCC_HC_REG_DLL_CONFIG, .value = 0x2004642C },
|
||||
{ .offset = SDCC_HC_REG_DDR_CONFIG, .value = 0x00000000 },
|
||||
{ .offset = SDCC_HC_REG_DLL_CONFIG2, .value = 0x00200000 },
|
||||
{ .offset = SDCC_USR_CTL, .value = 0x00010800 },
|
||||
{ .offset = RGMII_IO_MACRO_CONFIG2, .value = 0x00002060 },
|
||||
};
|
||||
|
||||
static const struct ethqos_emac_driver_data emac_v2_1_0_data = {
|
||||
.por = emac_v2_1_0_por,
|
||||
.num_por = ARRAY_SIZE(emac_v2_1_0_por),
|
||||
.rgmii_config_looback_en = false,
|
||||
};
|
||||
|
||||
static int ethqos_dll_configure(struct qcom_ethqos *ethqos)
|
||||
@ -297,8 +315,12 @@ static int ethqos_rgmii_macro_init(struct qcom_ethqos *ethqos)
|
||||
rgmii_updatel(ethqos, SDCC_DDR_CONFIG_PRG_DLY_EN,
|
||||
SDCC_DDR_CONFIG_PRG_DLY_EN,
|
||||
SDCC_HC_REG_DDR_CONFIG);
|
||||
rgmii_updatel(ethqos, RGMII_CONFIG_LOOPBACK_EN,
|
||||
RGMII_CONFIG_LOOPBACK_EN, RGMII_IO_MACRO_CONFIG);
|
||||
if (ethqos->rgmii_config_looback_en)
|
||||
rgmii_updatel(ethqos, RGMII_CONFIG_LOOPBACK_EN,
|
||||
RGMII_CONFIG_LOOPBACK_EN, RGMII_IO_MACRO_CONFIG);
|
||||
else
|
||||
rgmii_updatel(ethqos, RGMII_CONFIG_LOOPBACK_EN,
|
||||
0, RGMII_IO_MACRO_CONFIG);
|
||||
break;
|
||||
|
||||
case SPEED_100:
|
||||
@ -331,8 +353,13 @@ static int ethqos_rgmii_macro_init(struct qcom_ethqos *ethqos)
|
||||
rgmii_updatel(ethqos, SDCC_DDR_CONFIG_EXT_PRG_RCLK_DLY_EN,
|
||||
SDCC_DDR_CONFIG_EXT_PRG_RCLK_DLY_EN,
|
||||
SDCC_HC_REG_DDR_CONFIG);
|
||||
rgmii_updatel(ethqos, RGMII_CONFIG_LOOPBACK_EN,
|
||||
RGMII_CONFIG_LOOPBACK_EN, RGMII_IO_MACRO_CONFIG);
|
||||
if (ethqos->rgmii_config_looback_en)
|
||||
rgmii_updatel(ethqos, RGMII_CONFIG_LOOPBACK_EN,
|
||||
RGMII_CONFIG_LOOPBACK_EN, RGMII_IO_MACRO_CONFIG);
|
||||
else
|
||||
rgmii_updatel(ethqos, RGMII_CONFIG_LOOPBACK_EN,
|
||||
0, RGMII_IO_MACRO_CONFIG);
|
||||
|
||||
break;
|
||||
|
||||
case SPEED_10:
|
||||
@ -504,6 +531,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
|
||||
data = of_device_get_match_data(&pdev->dev);
|
||||
ethqos->por = data->por;
|
||||
ethqos->num_por = data->num_por;
|
||||
ethqos->rgmii_config_looback_en = data->rgmii_config_looback_en;
|
||||
|
||||
ethqos->rgmii_clk = devm_clk_get(&pdev->dev, "rgmii");
|
||||
if (IS_ERR(ethqos->rgmii_clk)) {
|
||||
@ -558,6 +586,7 @@ static int qcom_ethqos_remove(struct platform_device *pdev)
|
||||
|
||||
static const struct of_device_id qcom_ethqos_match[] = {
|
||||
{ .compatible = "qcom,qcs404-ethqos", .data = &emac_v2_3_0_data},
|
||||
{ .compatible = "qcom,sm8150-ethqos", .data = &emac_v2_1_0_data},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, qcom_ethqos_match);
|
||||
|
Loading…
Reference in New Issue
Block a user