Char / Misc driver fixes for 5.9-rc5

Here are a number of small driver fixes for 5.9-rc5
 
 Included in here are:
 	- habanalabs driver fixes
 	- interconnect driver fixes
 	- soundwire driver fixes
 	- dyndbg fixes for reported issues, and then reverts to fix it
 	  all up to a sane state.
 	- phy driver fixes
 Full details of these are in the shortlog.
 
 All of these have been in linux-next for a while with no reported
 issues.
 
 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -----BEGIN PGP SIGNATURE-----
 
 iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCX13aLA8cZ3JlZ0Brcm9h
 aC5jb20ACgkQMUfUDdst+ymjJgCfZq1pnSupUtvLTimvaPwSaep/lJQAoIoGR0t/
 co5MQO8ZGMBEavVtzE79
 =vnmm
 -----END PGP SIGNATURE-----

Merge tag 'char-misc-5.9-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull char / misc driver fixes from Greg KH:
 "Here are a number of small driver fixes for 5.9-rc5

  Included in here are:

   - habanalabs driver fixes

   - interconnect driver fixes

   - soundwire driver fixes

   - dyndbg fixes for reported issues, and then reverts to fix it all up
     to a sane state.

   - phy driver fixes

  All of these have been in linux-next for a while with no reported
  issues"

* tag 'char-misc-5.9-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
  Revert "dyndbg: accept query terms like file=bar and module=foo"
  Revert "dyndbg: fix problem parsing format="foo bar""
  scripts/tags.sh: exclude tools directory from tags generation
  video: fbdev: fix OOB read in vga_8planes_imageblit()
  dyndbg: fix problem parsing format="foo bar"
  dyndbg: refine export, rename to dynamic_debug_exec_queries()
  dyndbg: give %3u width in pr-format, cosmetic only
  interconnect: qcom: Fix small BW votes being truncated to zero
  soundwire: fix double free of dangling pointer
  interconnect: Show bandwidth for disabled paths as zero in debugfs
  habanalabs: fix report of RAZWI initiator coordinates
  habanalabs: prevent user buff overflow
  phy: omap-usb2-phy: disable PHY charger detect
  phy: qcom-qmp: Use correct values for ipq8074 PCIe Gen2 PHY init
  soundwire: bus: fix typo in comment on INTSTAT registers
  phy: qualcomm: fix return value check in qcom_ipq806x_usb_phy_probe()
  phy: qualcomm: fix platform_no_drv_owner.cocci warnings
This commit is contained in:
Linus Torvalds 2020-09-13 08:52:21 -07:00
commit 2a1a4bee5e
15 changed files with 172 additions and 92 deletions

View File

@ -156,7 +156,6 @@ against. Possible keywords are:::
``line-range`` cannot contain space, e.g. ``line-range`` cannot contain space, e.g.
"1-30" is valid range but "1 - 30" is not. "1-30" is valid range but "1 - 30" is not.
``module=foo`` combined keyword=value form is interchangably accepted
The meanings of each keyword are: The meanings of each keyword are:

View File

@ -55,12 +55,18 @@ static int icc_summary_show(struct seq_file *s, void *data)
icc_summary_show_one(s, n); icc_summary_show_one(s, n);
hlist_for_each_entry(r, &n->req_list, req_node) { hlist_for_each_entry(r, &n->req_list, req_node) {
u32 avg_bw = 0, peak_bw = 0;
if (!r->dev) if (!r->dev)
continue; continue;
if (r->enabled) {
avg_bw = r->avg_bw;
peak_bw = r->peak_bw;
}
seq_printf(s, " %-27s %12u %12u %12u\n", seq_printf(s, " %-27s %12u %12u %12u\n",
dev_name(r->dev), r->tag, r->avg_bw, dev_name(r->dev), r->tag, avg_bw, peak_bw);
r->peak_bw);
} }
} }
} }

View File

@ -52,8 +52,20 @@ static int cmp_vcd(void *priv, struct list_head *a, struct list_head *b)
return 1; return 1;
} }
static u64 bcm_div(u64 num, u32 base)
{
/* Ensure that small votes aren't lost. */
if (num && num < base)
return 1;
do_div(num, base);
return num;
}
static void bcm_aggregate(struct qcom_icc_bcm *bcm) static void bcm_aggregate(struct qcom_icc_bcm *bcm)
{ {
struct qcom_icc_node *node;
size_t i, bucket; size_t i, bucket;
u64 agg_avg[QCOM_ICC_NUM_BUCKETS] = {0}; u64 agg_avg[QCOM_ICC_NUM_BUCKETS] = {0};
u64 agg_peak[QCOM_ICC_NUM_BUCKETS] = {0}; u64 agg_peak[QCOM_ICC_NUM_BUCKETS] = {0};
@ -61,22 +73,21 @@ static void bcm_aggregate(struct qcom_icc_bcm *bcm)
for (bucket = 0; bucket < QCOM_ICC_NUM_BUCKETS; bucket++) { for (bucket = 0; bucket < QCOM_ICC_NUM_BUCKETS; bucket++) {
for (i = 0; i < bcm->num_nodes; i++) { for (i = 0; i < bcm->num_nodes; i++) {
temp = bcm->nodes[i]->sum_avg[bucket] * bcm->aux_data.width; node = bcm->nodes[i];
do_div(temp, bcm->nodes[i]->buswidth * bcm->nodes[i]->channels); temp = bcm_div(node->sum_avg[bucket] * bcm->aux_data.width,
node->buswidth * node->channels);
agg_avg[bucket] = max(agg_avg[bucket], temp); agg_avg[bucket] = max(agg_avg[bucket], temp);
temp = bcm->nodes[i]->max_peak[bucket] * bcm->aux_data.width; temp = bcm_div(node->max_peak[bucket] * bcm->aux_data.width,
do_div(temp, bcm->nodes[i]->buswidth); node->buswidth);
agg_peak[bucket] = max(agg_peak[bucket], temp); agg_peak[bucket] = max(agg_peak[bucket], temp);
} }
temp = agg_avg[bucket] * 1000ULL; temp = agg_avg[bucket] * 1000ULL;
do_div(temp, bcm->aux_data.unit); bcm->vote_x[bucket] = bcm_div(temp, bcm->aux_data.unit);
bcm->vote_x[bucket] = temp;
temp = agg_peak[bucket] * 1000ULL; temp = agg_peak[bucket] * 1000ULL;
do_div(temp, bcm->aux_data.unit); bcm->vote_y[bucket] = bcm_div(temp, bcm->aux_data.unit);
bcm->vote_y[bucket] = temp;
} }
if (bcm->keepalive && bcm->vote_x[QCOM_ICC_BUCKET_AMC] == 0 && if (bcm->keepalive && bcm->vote_x[QCOM_ICC_BUCKET_AMC] == 0 &&

View File

@ -982,7 +982,7 @@ static ssize_t hl_clk_gate_read(struct file *f, char __user *buf,
return 0; return 0;
sprintf(tmp_buf, "0x%llx\n", hdev->clock_gating_mask); sprintf(tmp_buf, "0x%llx\n", hdev->clock_gating_mask);
rc = simple_read_from_buffer(buf, strlen(tmp_buf) + 1, ppos, tmp_buf, rc = simple_read_from_buffer(buf, count, ppos, tmp_buf,
strlen(tmp_buf) + 1); strlen(tmp_buf) + 1);
return rc; return rc;

View File

@ -378,15 +378,15 @@ enum axi_id {
((((y) & RAZWI_INITIATOR_Y_MASK) << RAZWI_INITIATOR_Y_SHIFT) | \ ((((y) & RAZWI_INITIATOR_Y_MASK) << RAZWI_INITIATOR_Y_SHIFT) | \
(((x) & RAZWI_INITIATOR_X_MASK) << RAZWI_INITIATOR_X_SHIFT)) (((x) & RAZWI_INITIATOR_X_MASK) << RAZWI_INITIATOR_X_SHIFT))
#define RAZWI_INITIATOR_ID_X_Y_TPC0_NIC0 RAZWI_INITIATOR_ID_X_Y(1, 0) #define RAZWI_INITIATOR_ID_X_Y_TPC0_NIC0 RAZWI_INITIATOR_ID_X_Y(1, 1)
#define RAZWI_INITIATOR_ID_X_Y_TPC1 RAZWI_INITIATOR_ID_X_Y(2, 0) #define RAZWI_INITIATOR_ID_X_Y_TPC1 RAZWI_INITIATOR_ID_X_Y(2, 1)
#define RAZWI_INITIATOR_ID_X_Y_MME0_0 RAZWI_INITIATOR_ID_X_Y(3, 0) #define RAZWI_INITIATOR_ID_X_Y_MME0_0 RAZWI_INITIATOR_ID_X_Y(3, 1)
#define RAZWI_INITIATOR_ID_X_Y_MME0_1 RAZWI_INITIATOR_ID_X_Y(4, 0) #define RAZWI_INITIATOR_ID_X_Y_MME0_1 RAZWI_INITIATOR_ID_X_Y(4, 1)
#define RAZWI_INITIATOR_ID_X_Y_MME1_0 RAZWI_INITIATOR_ID_X_Y(5, 0) #define RAZWI_INITIATOR_ID_X_Y_MME1_0 RAZWI_INITIATOR_ID_X_Y(5, 1)
#define RAZWI_INITIATOR_ID_X_Y_MME1_1 RAZWI_INITIATOR_ID_X_Y(6, 0) #define RAZWI_INITIATOR_ID_X_Y_MME1_1 RAZWI_INITIATOR_ID_X_Y(6, 1)
#define RAZWI_INITIATOR_ID_X_Y_TPC2 RAZWI_INITIATOR_ID_X_Y(7, 0) #define RAZWI_INITIATOR_ID_X_Y_TPC2 RAZWI_INITIATOR_ID_X_Y(7, 1)
#define RAZWI_INITIATOR_ID_X_Y_TPC3_PCI_CPU_PSOC \ #define RAZWI_INITIATOR_ID_X_Y_TPC3_PCI_CPU_PSOC \
RAZWI_INITIATOR_ID_X_Y(8, 0) RAZWI_INITIATOR_ID_X_Y(8, 1)
#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_S_0 RAZWI_INITIATOR_ID_X_Y(0, 1) #define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_S_0 RAZWI_INITIATOR_ID_X_Y(0, 1)
#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_S_0 RAZWI_INITIATOR_ID_X_Y(9, 1) #define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_S_0 RAZWI_INITIATOR_ID_X_Y(9, 1)
#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_S_1 RAZWI_INITIATOR_ID_X_Y(0, 2) #define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_S_1 RAZWI_INITIATOR_ID_X_Y(0, 2)
@ -395,14 +395,14 @@ enum axi_id {
#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_N_0 RAZWI_INITIATOR_ID_X_Y(9, 3) #define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_N_0 RAZWI_INITIATOR_ID_X_Y(9, 3)
#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_N_1 RAZWI_INITIATOR_ID_X_Y(0, 4) #define RAZWI_INITIATOR_ID_X_Y_DMA_IF_W_N_1 RAZWI_INITIATOR_ID_X_Y(0, 4)
#define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_N_1 RAZWI_INITIATOR_ID_X_Y(9, 4) #define RAZWI_INITIATOR_ID_X_Y_DMA_IF_E_N_1 RAZWI_INITIATOR_ID_X_Y(9, 4)
#define RAZWI_INITIATOR_ID_X_Y_TPC4_NIC1_NIC2 RAZWI_INITIATOR_ID_X_Y(1, 5) #define RAZWI_INITIATOR_ID_X_Y_TPC4_NIC1_NIC2 RAZWI_INITIATOR_ID_X_Y(1, 6)
#define RAZWI_INITIATOR_ID_X_Y_TPC5 RAZWI_INITIATOR_ID_X_Y(2, 5) #define RAZWI_INITIATOR_ID_X_Y_TPC5 RAZWI_INITIATOR_ID_X_Y(2, 6)
#define RAZWI_INITIATOR_ID_X_Y_MME2_0 RAZWI_INITIATOR_ID_X_Y(3, 5) #define RAZWI_INITIATOR_ID_X_Y_MME2_0 RAZWI_INITIATOR_ID_X_Y(3, 6)
#define RAZWI_INITIATOR_ID_X_Y_MME2_1 RAZWI_INITIATOR_ID_X_Y(4, 5) #define RAZWI_INITIATOR_ID_X_Y_MME2_1 RAZWI_INITIATOR_ID_X_Y(4, 6)
#define RAZWI_INITIATOR_ID_X_Y_MME3_0 RAZWI_INITIATOR_ID_X_Y(5, 5) #define RAZWI_INITIATOR_ID_X_Y_MME3_0 RAZWI_INITIATOR_ID_X_Y(5, 6)
#define RAZWI_INITIATOR_ID_X_Y_MME3_1 RAZWI_INITIATOR_ID_X_Y(6, 5) #define RAZWI_INITIATOR_ID_X_Y_MME3_1 RAZWI_INITIATOR_ID_X_Y(6, 6)
#define RAZWI_INITIATOR_ID_X_Y_TPC6 RAZWI_INITIATOR_ID_X_Y(7, 5) #define RAZWI_INITIATOR_ID_X_Y_TPC6 RAZWI_INITIATOR_ID_X_Y(7, 6)
#define RAZWI_INITIATOR_ID_X_Y_TPC7_NIC4_NIC5 RAZWI_INITIATOR_ID_X_Y(8, 5) #define RAZWI_INITIATOR_ID_X_Y_TPC7_NIC4_NIC5 RAZWI_INITIATOR_ID_X_Y(8, 6)
#define PSOC_ETR_AXICTL_PROTCTRLBIT1_SHIFT 1 #define PSOC_ETR_AXICTL_PROTCTRLBIT1_SHIFT 1

View File

@ -505,9 +505,9 @@ static int qcom_ipq806x_usb_phy_probe(struct platform_device *pdev)
size = resource_size(res); size = resource_size(res);
phy_dwc3->base = devm_ioremap(phy_dwc3->dev, res->start, size); phy_dwc3->base = devm_ioremap(phy_dwc3->dev, res->start, size);
if (IS_ERR(phy_dwc3->base)) { if (!phy_dwc3->base) {
dev_err(phy_dwc3->dev, "failed to map reg\n"); dev_err(phy_dwc3->dev, "failed to map reg\n");
return PTR_ERR(phy_dwc3->base); return -ENOMEM;
} }
phy_dwc3->ref_clk = devm_clk_get(phy_dwc3->dev, "ref"); phy_dwc3->ref_clk = devm_clk_get(phy_dwc3->dev, "ref");
@ -557,7 +557,6 @@ static struct platform_driver qcom_ipq806x_usb_phy_driver = {
.probe = qcom_ipq806x_usb_phy_probe, .probe = qcom_ipq806x_usb_phy_probe,
.driver = { .driver = {
.name = "qcom-ipq806x-usb-phy", .name = "qcom-ipq806x-usb-phy",
.owner = THIS_MODULE,
.of_match_table = qcom_ipq806x_usb_phy_table, .of_match_table = qcom_ipq806x_usb_phy_table,
}, },
}; };

View File

@ -604,8 +604,8 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = {
QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0xf), QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0xf),
QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_EN, 0x1), QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_EN, 0x1),
QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x0), QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x0),
QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0x1f), QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0xff),
QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER2, 0x3f), QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER2, 0x1f),
QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x6), QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x6),
QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0xf), QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0xf),
QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x0), QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x0),
@ -631,7 +631,6 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = {
QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x0), QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x0),
QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80), QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80),
QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CTRL_BY_PSM, 0x1), QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CTRL_BY_PSM, 0x1),
QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_CTRL, 0xa),
QMP_PHY_INIT_CFG(QSERDES_COM_SSC_EN_CENTER, 0x1), QMP_PHY_INIT_CFG(QSERDES_COM_SSC_EN_CENTER, 0x1),
QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER1, 0x31), QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER1, 0x31),
QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x1), QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x1),
@ -640,7 +639,6 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = {
QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE1, 0x2f), QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE1, 0x2f),
QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE2, 0x19), QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE2, 0x19),
QMP_PHY_INIT_CFG(QSERDES_COM_CLK_EP_DIV, 0x19), QMP_PHY_INIT_CFG(QSERDES_COM_CLK_EP_DIV, 0x19),
QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_CNTRL, 0x7),
}; };
static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = { static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = {
@ -648,6 +646,8 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = {
QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x6), QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x6),
QMP_PHY_INIT_CFG(QSERDES_TX_RES_CODE_LANE_OFFSET, 0x2), QMP_PHY_INIT_CFG(QSERDES_TX_RES_CODE_LANE_OFFSET, 0x2),
QMP_PHY_INIT_CFG(QSERDES_TX_RCV_DETECT_LVL_2, 0x12), QMP_PHY_INIT_CFG(QSERDES_TX_RCV_DETECT_LVL_2, 0x12),
QMP_PHY_INIT_CFG(QSERDES_TX_EMP_POST1_LVL, 0x36),
QMP_PHY_INIT_CFG(QSERDES_TX_SLEW_CNTL, 0x0a),
}; };
static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = { static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = {
@ -658,7 +658,6 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = {
QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xdb), QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xdb),
QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b), QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x4), QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x4),
QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN_HALF, 0x4),
}; };
static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = { static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = {
@ -2046,6 +2045,9 @@ static const struct qmp_phy_cfg msm8996_usb3phy_cfg = {
.pwrdn_ctrl = SW_PWRDN, .pwrdn_ctrl = SW_PWRDN,
}; };
static const char * const ipq8074_pciephy_clk_l[] = {
"aux", "cfg_ahb",
};
/* list of resets */ /* list of resets */
static const char * const ipq8074_pciephy_reset_l[] = { static const char * const ipq8074_pciephy_reset_l[] = {
"phy", "common", "phy", "common",
@ -2063,8 +2065,8 @@ static const struct qmp_phy_cfg ipq8074_pciephy_cfg = {
.rx_tbl_num = ARRAY_SIZE(ipq8074_pcie_rx_tbl), .rx_tbl_num = ARRAY_SIZE(ipq8074_pcie_rx_tbl),
.pcs_tbl = ipq8074_pcie_pcs_tbl, .pcs_tbl = ipq8074_pcie_pcs_tbl,
.pcs_tbl_num = ARRAY_SIZE(ipq8074_pcie_pcs_tbl), .pcs_tbl_num = ARRAY_SIZE(ipq8074_pcie_pcs_tbl),
.clk_list = NULL, .clk_list = ipq8074_pciephy_clk_l,
.num_clks = 0, .num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l),
.reset_list = ipq8074_pciephy_reset_l, .reset_list = ipq8074_pciephy_reset_l,
.num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l), .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l),
.vreg_list = NULL, .vreg_list = NULL,

View File

@ -77,6 +77,8 @@
#define QSERDES_COM_CORECLK_DIV_MODE1 0x1bc #define QSERDES_COM_CORECLK_DIV_MODE1 0x1bc
/* Only for QMP V2 PHY - TX registers */ /* Only for QMP V2 PHY - TX registers */
#define QSERDES_TX_EMP_POST1_LVL 0x018
#define QSERDES_TX_SLEW_CNTL 0x040
#define QSERDES_TX_RES_CODE_LANE_OFFSET 0x054 #define QSERDES_TX_RES_CODE_LANE_OFFSET 0x054
#define QSERDES_TX_DEBUG_BUS_SEL 0x064 #define QSERDES_TX_DEBUG_BUS_SEL 0x064
#define QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN 0x068 #define QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN 0x068

View File

@ -22,10 +22,15 @@
#include <linux/mfd/syscon.h> #include <linux/mfd/syscon.h>
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/sys_soc.h>
#define USB2PHY_ANA_CONFIG1 0x4c #define USB2PHY_ANA_CONFIG1 0x4c
#define USB2PHY_DISCON_BYP_LATCH BIT(31) #define USB2PHY_DISCON_BYP_LATCH BIT(31)
#define USB2PHY_CHRG_DET 0x14
#define USB2PHY_CHRG_DET_USE_CHG_DET_REG BIT(29)
#define USB2PHY_CHRG_DET_DIS_CHG_DET BIT(28)
/* SoC Specific USB2_OTG register definitions */ /* SoC Specific USB2_OTG register definitions */
#define AM654_USB2_OTG_PD BIT(8) #define AM654_USB2_OTG_PD BIT(8)
#define AM654_USB2_VBUS_DET_EN BIT(5) #define AM654_USB2_VBUS_DET_EN BIT(5)
@ -43,6 +48,7 @@
#define OMAP_USB2_HAS_START_SRP BIT(0) #define OMAP_USB2_HAS_START_SRP BIT(0)
#define OMAP_USB2_HAS_SET_VBUS BIT(1) #define OMAP_USB2_HAS_SET_VBUS BIT(1)
#define OMAP_USB2_CALIBRATE_FALSE_DISCONNECT BIT(2) #define OMAP_USB2_CALIBRATE_FALSE_DISCONNECT BIT(2)
#define OMAP_USB2_DISABLE_CHRG_DET BIT(3)
struct omap_usb { struct omap_usb {
struct usb_phy phy; struct usb_phy phy;
@ -236,6 +242,13 @@ static int omap_usb_init(struct phy *x)
omap_usb_writel(phy->phy_base, USB2PHY_ANA_CONFIG1, val); omap_usb_writel(phy->phy_base, USB2PHY_ANA_CONFIG1, val);
} }
if (phy->flags & OMAP_USB2_DISABLE_CHRG_DET) {
val = omap_usb_readl(phy->phy_base, USB2PHY_CHRG_DET);
val |= USB2PHY_CHRG_DET_USE_CHG_DET_REG |
USB2PHY_CHRG_DET_DIS_CHG_DET;
omap_usb_writel(phy->phy_base, USB2PHY_CHRG_DET, val);
}
return 0; return 0;
} }
@ -329,6 +342,26 @@ static const struct of_device_id omap_usb2_id_table[] = {
}; };
MODULE_DEVICE_TABLE(of, omap_usb2_id_table); MODULE_DEVICE_TABLE(of, omap_usb2_id_table);
static void omap_usb2_init_errata(struct omap_usb *phy)
{
static const struct soc_device_attribute am65x_sr10_soc_devices[] = {
{ .family = "AM65X", .revision = "SR1.0" },
{ /* sentinel */ }
};
/*
* Errata i2075: USB2PHY: USB2PHY Charger Detect is Enabled by
* Default Without VBUS Presence.
*
* AM654x SR1.0 has a silicon bug due to which D+ is pulled high after
* POR, which could cause enumeration failure with some USB hubs.
* Disabling the USB2_PHY Charger Detect function will put D+
* into the normal state.
*/
if (soc_device_match(am65x_sr10_soc_devices))
phy->flags |= OMAP_USB2_DISABLE_CHRG_DET;
}
static int omap_usb2_probe(struct platform_device *pdev) static int omap_usb2_probe(struct platform_device *pdev)
{ {
struct omap_usb *phy; struct omap_usb *phy;
@ -366,14 +399,14 @@ static int omap_usb2_probe(struct platform_device *pdev)
phy->mask = phy_data->mask; phy->mask = phy_data->mask;
phy->power_on = phy_data->power_on; phy->power_on = phy_data->power_on;
phy->power_off = phy_data->power_off; phy->power_off = phy_data->power_off;
phy->flags = phy_data->flags;
if (phy_data->flags & OMAP_USB2_CALIBRATE_FALSE_DISCONNECT) { omap_usb2_init_errata(phy);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
phy->phy_base = devm_ioremap_resource(&pdev->dev, res); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (IS_ERR(phy->phy_base)) phy->phy_base = devm_ioremap_resource(&pdev->dev, res);
return PTR_ERR(phy->phy_base); if (IS_ERR(phy->phy_base))
phy->flags |= OMAP_USB2_CALIBRATE_FALSE_DISCONNECT; return PTR_ERR(phy->phy_base);
}
phy->syscon_phy_power = syscon_regmap_lookup_by_phandle(node, phy->syscon_phy_power = syscon_regmap_lookup_by_phandle(node,
"syscon-phy-power"); "syscon-phy-power");

View File

@ -1372,7 +1372,7 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
return ret; return ret;
} }
/* Read Instat 1, Instat 2 and Instat 3 registers */ /* Read Intstat 1, Intstat 2 and Intstat 3 registers */
ret = sdw_read(slave, SDW_SCP_INT1); ret = sdw_read(slave, SDW_SCP_INT1);
if (ret < 0) { if (ret < 0) {
dev_err(slave->bus->dev, dev_err(slave->bus->dev,

View File

@ -717,6 +717,7 @@ error:
kfree(wbuf); kfree(wbuf);
error_1: error_1:
kfree(wr_msg); kfree(wr_msg);
bus->defer_msg.msg = NULL;
return ret; return ret;
} }
@ -840,9 +841,10 @@ static int do_bank_switch(struct sdw_stream_runtime *stream)
error: error:
list_for_each_entry(m_rt, &stream->master_list, stream_node) { list_for_each_entry(m_rt, &stream->master_list, stream_node) {
bus = m_rt->bus; bus = m_rt->bus;
if (bus->defer_msg.msg) {
kfree(bus->defer_msg.msg->buf); kfree(bus->defer_msg.msg->buf);
kfree(bus->defer_msg.msg); kfree(bus->defer_msg.msg);
}
} }
msg_unlock: msg_unlock:

View File

@ -1121,7 +1121,7 @@ static void vga_8planes_imageblit(struct fb_info *info, const struct fb_image *i
char oldop = setop(0); char oldop = setop(0);
char oldsr = setsr(0); char oldsr = setsr(0);
char oldmask = selectmask(); char oldmask = selectmask();
const char *cdat = image->data; const unsigned char *cdat = image->data;
u32 dx = image->dx; u32 dx = image->dx;
char __iomem *where; char __iomem *where;
int y; int y;

View File

@ -49,6 +49,10 @@ struct _ddebug {
#if defined(CONFIG_DYNAMIC_DEBUG_CORE) #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
/* exported for module authors to exercise >control */
int dynamic_debug_exec_queries(const char *query, const char *modname);
int ddebug_add_module(struct _ddebug *tab, unsigned int n, int ddebug_add_module(struct _ddebug *tab, unsigned int n,
const char *modname); const char *modname);
extern int ddebug_remove_module(const char *mod_name); extern int ddebug_remove_module(const char *mod_name);
@ -105,7 +109,7 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
static_branch_unlikely(&descriptor.key.dd_key_false) static_branch_unlikely(&descriptor.key.dd_key_false)
#endif #endif
#else /* !HAVE_JUMP_LABEL */ #else /* !CONFIG_JUMP_LABEL */
#define _DPRINTK_KEY_INIT #define _DPRINTK_KEY_INIT
@ -117,7 +121,7 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)
#endif #endif
#endif #endif /* CONFIG_JUMP_LABEL */
#define __dynamic_func_call(id, fmt, func, ...) do { \ #define __dynamic_func_call(id, fmt, func, ...) do { \
DEFINE_DYNAMIC_DEBUG_METADATA(id, fmt); \ DEFINE_DYNAMIC_DEBUG_METADATA(id, fmt); \
@ -172,10 +176,11 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
KERN_DEBUG, prefix_str, prefix_type, \ KERN_DEBUG, prefix_str, prefix_type, \
rowsize, groupsize, buf, len, ascii) rowsize, groupsize, buf, len, ascii)
#else #else /* !CONFIG_DYNAMIC_DEBUG_CORE */
#include <linux/string.h> #include <linux/string.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/printk.h>
static inline int ddebug_add_module(struct _ddebug *tab, unsigned int n, static inline int ddebug_add_module(struct _ddebug *tab, unsigned int n,
const char *modname) const char *modname)
@ -210,6 +215,13 @@ static inline int ddebug_dyndbg_module_param_cb(char *param, char *val,
print_hex_dump(KERN_DEBUG, prefix_str, prefix_type, \ print_hex_dump(KERN_DEBUG, prefix_str, prefix_type, \
rowsize, groupsize, buf, len, ascii); \ rowsize, groupsize, buf, len, ascii); \
} while (0) } while (0)
#endif
static inline int dynamic_debug_exec_queries(const char *query, const char *modname)
{
pr_warn("kernel not built with CONFIG_DYNAMIC_DEBUG_CORE\n");
return 0;
}
#endif /* !CONFIG_DYNAMIC_DEBUG_CORE */
#endif #endif

View File

@ -353,8 +353,7 @@ static int check_set(const char **dest, char *src, char *name)
/* /*
* Parse words[] as a ddebug query specification, which is a series * Parse words[] as a ddebug query specification, which is a series
* of (keyword, value) pairs or combined keyword=value terms, * of (keyword, value) pairs chosen from these possibilities:
* chosen from these possibilities:
* *
* func <function-name> * func <function-name>
* file <full-pathname> * file <full-pathname>
@ -373,34 +372,22 @@ static int ddebug_parse_query(char *words[], int nwords,
unsigned int i; unsigned int i;
int rc = 0; int rc = 0;
char *fline; char *fline;
char *keyword, *arg;
/* check we have an even number of words */
if (nwords % 2 != 0) {
pr_err("expecting pairs of match-spec <value>\n");
return -EINVAL;
}
if (modname) if (modname)
/* support $modname.dyndbg=<multiple queries> */ /* support $modname.dyndbg=<multiple queries> */
query->module = modname; query->module = modname;
for (i = 0; i < nwords; i++) { for (i = 0; i < nwords; i += 2) {
/* accept keyword=arg */ if (!strcmp(words[i], "func")) {
vpr_info("%d w:%s\n", i, words[i]); rc = check_set(&query->function, words[i+1], "func");
} else if (!strcmp(words[i], "file")) {
keyword = words[i]; if (check_set(&query->filename, words[i+1], "file"))
arg = strchr(keyword, '=');
if (arg) {
*arg++ = '\0';
} else {
i++; /* next word is arg */
if (!(i < nwords)) {
pr_err("missing arg to keyword: %s\n", keyword);
return -EINVAL;
}
arg = words[i];
}
vpr_info("%d key:%s arg:%s\n", i, keyword, arg);
if (!strcmp(keyword, "func")) {
rc = check_set(&query->function, arg, "func");
} else if (!strcmp(keyword, "file")) {
if (check_set(&query->filename, arg, "file"))
return -EINVAL; return -EINVAL;
/* tail :$info is function or line-range */ /* tail :$info is function or line-range */
@ -416,18 +403,18 @@ static int ddebug_parse_query(char *words[], int nwords,
if (parse_linerange(query, fline)) if (parse_linerange(query, fline))
return -EINVAL; return -EINVAL;
} }
} else if (!strcmp(keyword, "module")) { } else if (!strcmp(words[i], "module")) {
rc = check_set(&query->module, arg, "module"); rc = check_set(&query->module, words[i+1], "module");
} else if (!strcmp(keyword, "format")) { } else if (!strcmp(words[i], "format")) {
string_unescape_inplace(arg, UNESCAPE_SPACE | string_unescape_inplace(words[i+1], UNESCAPE_SPACE |
UNESCAPE_OCTAL | UNESCAPE_OCTAL |
UNESCAPE_SPECIAL); UNESCAPE_SPECIAL);
rc = check_set(&query->format, arg, "format"); rc = check_set(&query->format, words[i+1], "format");
} else if (!strcmp(keyword, "line")) { } else if (!strcmp(words[i], "line")) {
if (parse_linerange(query, arg)) if (parse_linerange(query, words[i+1]))
return -EINVAL; return -EINVAL;
} else { } else {
pr_err("unknown keyword \"%s\"\n", keyword); pr_err("unknown keyword \"%s\"\n", words[i]);
return -EINVAL; return -EINVAL;
} }
if (rc) if (rc)
@ -525,7 +512,7 @@ static int ddebug_exec_query(char *query_string, const char *modname)
last error or number of matching callsites. Module name is either last error or number of matching callsites. Module name is either
in param (for boot arg) or perhaps in query string. in param (for boot arg) or perhaps in query string.
*/ */
int ddebug_exec_queries(char *query, const char *modname) static int ddebug_exec_queries(char *query, const char *modname)
{ {
char *split; char *split;
int i, errs = 0, exitcode = 0, rc, nfound = 0; int i, errs = 0, exitcode = 0, rc, nfound = 0;
@ -557,7 +544,30 @@ int ddebug_exec_queries(char *query, const char *modname)
return exitcode; return exitcode;
return nfound; return nfound;
} }
EXPORT_SYMBOL_GPL(ddebug_exec_queries);
/**
* dynamic_debug_exec_queries - select and change dynamic-debug prints
* @query: query-string described in admin-guide/dynamic-debug-howto
* @modname: string containing module name, usually &module.mod_name
*
* This uses the >/proc/dynamic_debug/control reader, allowing module
* authors to modify their dynamic-debug callsites. The modname is
* canonically struct module.mod_name, but can also be null or a
* module-wildcard, for example: "drm*".
*/
int dynamic_debug_exec_queries(const char *query, const char *modname)
{
int rc;
char *qry = kstrndup(query, PAGE_SIZE, GFP_KERNEL);
if (!query)
return -ENOMEM;
rc = ddebug_exec_queries(qry, modname);
kfree(qry);
return rc;
}
EXPORT_SYMBOL_GPL(dynamic_debug_exec_queries);
#define PREFIX_SIZE 64 #define PREFIX_SIZE 64
@ -947,7 +957,7 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
list_add(&dt->link, &ddebug_tables); list_add(&dt->link, &ddebug_tables);
mutex_unlock(&ddebug_lock); mutex_unlock(&ddebug_lock);
v2pr_info("%u debug prints in module %s\n", n, dt->mod_name); v2pr_info("%3u debug prints in module %s\n", n, dt->mod_name);
return 0; return 0;
} }

View File

@ -26,7 +26,11 @@ else
fi fi
# ignore userspace tools # ignore userspace tools
ignore="$ignore ( -path ${tree}tools ) -prune -o" if [ -n "$COMPILED_SOURCE" ]; then
ignore="$ignore ( -path ./tools ) -prune -o"
else
ignore="$ignore ( -path ${tree}tools ) -prune -o"
fi
# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH # Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
if [ "${ALLSOURCE_ARCHS}" = "" ]; then if [ "${ALLSOURCE_ARCHS}" = "" ]; then
@ -92,7 +96,7 @@ all_sources()
all_compiled_sources() all_compiled_sources()
{ {
realpath -es $([ -z "$KBUILD_ABS_SRCTREE" ] && echo --relative-to=.) \ realpath -es $([ -z "$KBUILD_ABS_SRCTREE" ] && echo --relative-to=.) \
include/generated/autoconf.h $(find -name "*.cmd" -exec \ include/generated/autoconf.h $(find $ignore -name "*.cmd" -exec \
grep -Poh '(?(?=^source_.* \K).*|(?=^ \K\S).*(?= \\))' {} \+ | grep -Poh '(?(?=^source_.* \K).*|(?=^ \K\S).*(?= \\))' {} \+ |
awk '!a[$0]++') | sort -u awk '!a[$0]++') | sort -u
} }