Loading drivers/platform/msm/ep_pcie/ep_pcie_com.h +2 −1 Original line number Diff line number Diff line Loading @@ -333,7 +333,8 @@ struct ep_pcie_dev_t { u16 vendor_id; u16 device_id; u32 subsystem_id; u32 link_speed; u32 max_link_speed; u32 curr_link_speed; bool active_config; bool aggregated_irq; bool mhi_a7_irq; Loading drivers/platform/msm/ep_pcie/ep_pcie_core.c +9 −4 Original line number Diff line number Diff line Loading @@ -604,7 +604,7 @@ static void ep_pcie_core_init(struct ep_pcie_dev_t *dev, bool configured) /* Configure link speed */ ep_pcie_write_mask(dev->dm_core + PCIE20_LINK_CONTROL2_LINK_STATUS2, 0xf, dev->link_speed); 0xf, dev->curr_link_speed); } if (dev->active_config) { Loading Loading @@ -1597,6 +1597,10 @@ int ep_pcie_core_enable_endpoint(enum ep_pcie_options opt) } } EP_PCIE_DBG(dev, "PCIe V%d: PCIE20_CAP_LINKCTRLSTATUS: 0x%x\n", dev->rev, readl_relaxed(dev->dm_core + PCIE20_CAP_LINKCTRLSTATUS)); dev->suspending = false; goto out; Loading Loading @@ -2564,17 +2568,18 @@ static int ep_pcie_probe(struct platform_device *pdev) pr_debug("%s\n", __func__); ep_pcie_dev.link_speed = 1; ep_pcie_dev.max_link_speed = 1; ret = of_property_read_u32((&pdev->dev)->of_node, "qcom,pcie-link-speed", &ep_pcie_dev.link_speed); &ep_pcie_dev.max_link_speed); if (ret) EP_PCIE_DBG(&ep_pcie_dev, "PCIe V%d: pcie-link-speed does not exist.\n", ep_pcie_dev.rev); else EP_PCIE_DBG(&ep_pcie_dev, "PCIe V%d: pcie-link-speed:%d.\n", ep_pcie_dev.rev, ep_pcie_dev.link_speed); ep_pcie_dev.rev, ep_pcie_dev.max_link_speed); ep_pcie_dev.curr_link_speed = ep_pcie_dev.max_link_speed; ep_pcie_dev.vendor_id = 0xFFFF; ret = of_property_read_u16((&pdev->dev)->of_node, Loading drivers/platform/msm/ep_pcie/ep_pcie_dbg.c +32 −11 Original line number Diff line number Diff line /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, 2019 The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading @@ -23,7 +23,7 @@ #include "ep_pcie_phy.h" static struct dentry *dent_ep_pcie; static struct dentry *dfile_case; static u8 link_speed; static struct ep_pcie_dev_t *dev; static void ep_ep_pcie_phy_dump_pcs_debug_bus(struct ep_pcie_dev_t *dev, Loading Loading @@ -406,6 +406,17 @@ static ssize_t ep_pcie_cmd_debug(struct file *file, case 32: /* do not output core registers when D3 hot is set by host*/ dev->dump_conf = false; break; case 33: /* Set link speed, takes effect upon next hlos link training */ if (link_speed > 0 && link_speed <= dev->max_link_speed) { EP_PCIE_DBG_FS("Setting link speed to gen %d\n", link_speed); dev->curr_link_speed = link_speed; } else { EP_PCIE_DBG_FS( "Invalid link speed %d, max supported speed %d\n", link_speed, dev->max_link_speed); } break; default: EP_PCIE_DBG_FS("PCIe: Invalid testcase: %d.\n", testcase); break; Loading @@ -423,6 +434,8 @@ const struct file_operations ep_pcie_cmd_debug_ops = { void ep_pcie_debugfs_init(struct ep_pcie_dev_t *ep_dev) { struct dentry *dfile; dev = ep_dev; dent_ep_pcie = debugfs_create_dir("pcie-ep", 0); if (IS_ERR(dent_ep_pcie)) { Loading @@ -432,14 +445,23 @@ void ep_pcie_debugfs_init(struct ep_pcie_dev_t *ep_dev) return; } dfile_case = debugfs_create_file("case", 0664, dent_ep_pcie, 0, dfile = debugfs_create_file("case", 0664, dent_ep_pcie, NULL, &ep_pcie_cmd_debug_ops); if (!dfile_case || IS_ERR(dfile_case)) { if (!dfile || IS_ERR(dfile)) { EP_PCIE_ERR(dev, "PCIe V%d: fail to create the file for case.\n", dev->rev); goto case_error; goto file_error; } dfile = debugfs_create_u8("link_speed", 0664, dent_ep_pcie, &link_speed); if (!dfile || IS_ERR(dfile)) { EP_PCIE_ERR(dev, "PCIe V%d: fail to create the file for link speed.\n", dev->rev); goto file_error; } EP_PCIE_DBG2(dev, Loading @@ -448,12 +470,11 @@ void ep_pcie_debugfs_init(struct ep_pcie_dev_t *ep_dev) return; case_error: debugfs_remove(dent_ep_pcie); file_error: debugfs_remove_recursive(dent_ep_pcie); } void ep_pcie_debugfs_exit(void) { debugfs_remove(dfile_case); debugfs_remove(dent_ep_pcie); debugfs_remove_recursive(dent_ep_pcie); } Loading
drivers/platform/msm/ep_pcie/ep_pcie_com.h +2 −1 Original line number Diff line number Diff line Loading @@ -333,7 +333,8 @@ struct ep_pcie_dev_t { u16 vendor_id; u16 device_id; u32 subsystem_id; u32 link_speed; u32 max_link_speed; u32 curr_link_speed; bool active_config; bool aggregated_irq; bool mhi_a7_irq; Loading
drivers/platform/msm/ep_pcie/ep_pcie_core.c +9 −4 Original line number Diff line number Diff line Loading @@ -604,7 +604,7 @@ static void ep_pcie_core_init(struct ep_pcie_dev_t *dev, bool configured) /* Configure link speed */ ep_pcie_write_mask(dev->dm_core + PCIE20_LINK_CONTROL2_LINK_STATUS2, 0xf, dev->link_speed); 0xf, dev->curr_link_speed); } if (dev->active_config) { Loading Loading @@ -1597,6 +1597,10 @@ int ep_pcie_core_enable_endpoint(enum ep_pcie_options opt) } } EP_PCIE_DBG(dev, "PCIe V%d: PCIE20_CAP_LINKCTRLSTATUS: 0x%x\n", dev->rev, readl_relaxed(dev->dm_core + PCIE20_CAP_LINKCTRLSTATUS)); dev->suspending = false; goto out; Loading Loading @@ -2564,17 +2568,18 @@ static int ep_pcie_probe(struct platform_device *pdev) pr_debug("%s\n", __func__); ep_pcie_dev.link_speed = 1; ep_pcie_dev.max_link_speed = 1; ret = of_property_read_u32((&pdev->dev)->of_node, "qcom,pcie-link-speed", &ep_pcie_dev.link_speed); &ep_pcie_dev.max_link_speed); if (ret) EP_PCIE_DBG(&ep_pcie_dev, "PCIe V%d: pcie-link-speed does not exist.\n", ep_pcie_dev.rev); else EP_PCIE_DBG(&ep_pcie_dev, "PCIe V%d: pcie-link-speed:%d.\n", ep_pcie_dev.rev, ep_pcie_dev.link_speed); ep_pcie_dev.rev, ep_pcie_dev.max_link_speed); ep_pcie_dev.curr_link_speed = ep_pcie_dev.max_link_speed; ep_pcie_dev.vendor_id = 0xFFFF; ret = of_property_read_u16((&pdev->dev)->of_node, Loading
drivers/platform/msm/ep_pcie/ep_pcie_dbg.c +32 −11 Original line number Diff line number Diff line /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, 2019 The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading @@ -23,7 +23,7 @@ #include "ep_pcie_phy.h" static struct dentry *dent_ep_pcie; static struct dentry *dfile_case; static u8 link_speed; static struct ep_pcie_dev_t *dev; static void ep_ep_pcie_phy_dump_pcs_debug_bus(struct ep_pcie_dev_t *dev, Loading Loading @@ -406,6 +406,17 @@ static ssize_t ep_pcie_cmd_debug(struct file *file, case 32: /* do not output core registers when D3 hot is set by host*/ dev->dump_conf = false; break; case 33: /* Set link speed, takes effect upon next hlos link training */ if (link_speed > 0 && link_speed <= dev->max_link_speed) { EP_PCIE_DBG_FS("Setting link speed to gen %d\n", link_speed); dev->curr_link_speed = link_speed; } else { EP_PCIE_DBG_FS( "Invalid link speed %d, max supported speed %d\n", link_speed, dev->max_link_speed); } break; default: EP_PCIE_DBG_FS("PCIe: Invalid testcase: %d.\n", testcase); break; Loading @@ -423,6 +434,8 @@ const struct file_operations ep_pcie_cmd_debug_ops = { void ep_pcie_debugfs_init(struct ep_pcie_dev_t *ep_dev) { struct dentry *dfile; dev = ep_dev; dent_ep_pcie = debugfs_create_dir("pcie-ep", 0); if (IS_ERR(dent_ep_pcie)) { Loading @@ -432,14 +445,23 @@ void ep_pcie_debugfs_init(struct ep_pcie_dev_t *ep_dev) return; } dfile_case = debugfs_create_file("case", 0664, dent_ep_pcie, 0, dfile = debugfs_create_file("case", 0664, dent_ep_pcie, NULL, &ep_pcie_cmd_debug_ops); if (!dfile_case || IS_ERR(dfile_case)) { if (!dfile || IS_ERR(dfile)) { EP_PCIE_ERR(dev, "PCIe V%d: fail to create the file for case.\n", dev->rev); goto case_error; goto file_error; } dfile = debugfs_create_u8("link_speed", 0664, dent_ep_pcie, &link_speed); if (!dfile || IS_ERR(dfile)) { EP_PCIE_ERR(dev, "PCIe V%d: fail to create the file for link speed.\n", dev->rev); goto file_error; } EP_PCIE_DBG2(dev, Loading @@ -448,12 +470,11 @@ void ep_pcie_debugfs_init(struct ep_pcie_dev_t *ep_dev) return; case_error: debugfs_remove(dent_ep_pcie); file_error: debugfs_remove_recursive(dent_ep_pcie); } void ep_pcie_debugfs_exit(void) { debugfs_remove(dfile_case); debugfs_remove(dent_ep_pcie); debugfs_remove_recursive(dent_ep_pcie); }