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:
Коммит
2a1a4bee5e
|
@ -156,7 +156,6 @@ against. Possible keywords are:::
|
|||
``line-range`` cannot contain space, e.g.
|
||||
"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:
|
||||
|
||||
|
|
|
@ -55,12 +55,18 @@ static int icc_summary_show(struct seq_file *s, void *data)
|
|||
|
||||
icc_summary_show_one(s, n);
|
||||
hlist_for_each_entry(r, &n->req_list, req_node) {
|
||||
u32 avg_bw = 0, peak_bw = 0;
|
||||
|
||||
if (!r->dev)
|
||||
continue;
|
||||
|
||||
if (r->enabled) {
|
||||
avg_bw = r->avg_bw;
|
||||
peak_bw = r->peak_bw;
|
||||
}
|
||||
|
||||
seq_printf(s, " %-27s %12u %12u %12u\n",
|
||||
dev_name(r->dev), r->tag, r->avg_bw,
|
||||
r->peak_bw);
|
||||
dev_name(r->dev), r->tag, avg_bw, peak_bw);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,8 +52,20 @@ static int cmp_vcd(void *priv, struct list_head *a, struct list_head *b)
|
|||
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)
|
||||
{
|
||||
struct qcom_icc_node *node;
|
||||
size_t i, bucket;
|
||||
u64 agg_avg[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 (i = 0; i < bcm->num_nodes; i++) {
|
||||
temp = bcm->nodes[i]->sum_avg[bucket] * bcm->aux_data.width;
|
||||
do_div(temp, bcm->nodes[i]->buswidth * bcm->nodes[i]->channels);
|
||||
node = bcm->nodes[i];
|
||||
temp = bcm_div(node->sum_avg[bucket] * bcm->aux_data.width,
|
||||
node->buswidth * node->channels);
|
||||
agg_avg[bucket] = max(agg_avg[bucket], temp);
|
||||
|
||||
temp = bcm->nodes[i]->max_peak[bucket] * bcm->aux_data.width;
|
||||
do_div(temp, bcm->nodes[i]->buswidth);
|
||||
temp = bcm_div(node->max_peak[bucket] * bcm->aux_data.width,
|
||||
node->buswidth);
|
||||
agg_peak[bucket] = max(agg_peak[bucket], temp);
|
||||
}
|
||||
|
||||
temp = agg_avg[bucket] * 1000ULL;
|
||||
do_div(temp, bcm->aux_data.unit);
|
||||
bcm->vote_x[bucket] = temp;
|
||||
bcm->vote_x[bucket] = bcm_div(temp, bcm->aux_data.unit);
|
||||
|
||||
temp = agg_peak[bucket] * 1000ULL;
|
||||
do_div(temp, bcm->aux_data.unit);
|
||||
bcm->vote_y[bucket] = temp;
|
||||
bcm->vote_y[bucket] = bcm_div(temp, bcm->aux_data.unit);
|
||||
}
|
||||
|
||||
if (bcm->keepalive && bcm->vote_x[QCOM_ICC_BUCKET_AMC] == 0 &&
|
||||
|
|
|
@ -982,7 +982,7 @@ static ssize_t hl_clk_gate_read(struct file *f, char __user *buf,
|
|||
return 0;
|
||||
|
||||
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);
|
||||
|
||||
return rc;
|
||||
|
|
|
@ -378,15 +378,15 @@ enum axi_id {
|
|||
((((y) & RAZWI_INITIATOR_Y_MASK) << RAZWI_INITIATOR_Y_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_TPC1 RAZWI_INITIATOR_ID_X_Y(2, 0)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_MME0_0 RAZWI_INITIATOR_ID_X_Y(3, 0)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_MME0_1 RAZWI_INITIATOR_ID_X_Y(4, 0)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_MME1_0 RAZWI_INITIATOR_ID_X_Y(5, 0)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_MME1_1 RAZWI_INITIATOR_ID_X_Y(6, 0)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_TPC2 RAZWI_INITIATOR_ID_X_Y(7, 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, 1)
|
||||
#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, 1)
|
||||
#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, 1)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_TPC2 RAZWI_INITIATOR_ID_X_Y(7, 1)
|
||||
#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_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)
|
||||
|
@ -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_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_TPC4_NIC1_NIC2 RAZWI_INITIATOR_ID_X_Y(1, 5)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_TPC5 RAZWI_INITIATOR_ID_X_Y(2, 5)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_MME2_0 RAZWI_INITIATOR_ID_X_Y(3, 5)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_MME2_1 RAZWI_INITIATOR_ID_X_Y(4, 5)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_MME3_0 RAZWI_INITIATOR_ID_X_Y(5, 5)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_MME3_1 RAZWI_INITIATOR_ID_X_Y(6, 5)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_TPC6 RAZWI_INITIATOR_ID_X_Y(7, 5)
|
||||
#define RAZWI_INITIATOR_ID_X_Y_TPC7_NIC4_NIC5 RAZWI_INITIATOR_ID_X_Y(8, 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, 6)
|
||||
#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, 6)
|
||||
#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, 6)
|
||||
#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, 6)
|
||||
|
||||
#define PSOC_ETR_AXICTL_PROTCTRLBIT1_SHIFT 1
|
||||
|
||||
|
|
|
@ -505,9 +505,9 @@ static int qcom_ipq806x_usb_phy_probe(struct platform_device *pdev)
|
|||
size = resource_size(res);
|
||||
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");
|
||||
return PTR_ERR(phy_dwc3->base);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
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,
|
||||
.driver = {
|
||||
.name = "qcom-ipq806x-usb-phy",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = qcom_ipq806x_usb_phy_table,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -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_LOCK_CMP_EN, 0x1),
|
||||
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_TIMER2, 0x3f),
|
||||
QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0xff),
|
||||
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_PLL_IVCO, 0xf),
|
||||
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_GAIN0_MODE0, 0x80),
|
||||
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_PER1, 0x31),
|
||||
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_SIZE2, 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[] = {
|
||||
|
@ -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_RES_CODE_LANE_OFFSET, 0x2),
|
||||
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[] = {
|
||||
|
@ -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_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_HALF, 0x4),
|
||||
};
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
static const char * const ipq8074_pciephy_clk_l[] = {
|
||||
"aux", "cfg_ahb",
|
||||
};
|
||||
/* list of resets */
|
||||
static const char * const ipq8074_pciephy_reset_l[] = {
|
||||
"phy", "common",
|
||||
|
@ -2063,8 +2065,8 @@ static const struct qmp_phy_cfg ipq8074_pciephy_cfg = {
|
|||
.rx_tbl_num = ARRAY_SIZE(ipq8074_pcie_rx_tbl),
|
||||
.pcs_tbl = ipq8074_pcie_pcs_tbl,
|
||||
.pcs_tbl_num = ARRAY_SIZE(ipq8074_pcie_pcs_tbl),
|
||||
.clk_list = NULL,
|
||||
.num_clks = 0,
|
||||
.clk_list = ipq8074_pciephy_clk_l,
|
||||
.num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l),
|
||||
.reset_list = ipq8074_pciephy_reset_l,
|
||||
.num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l),
|
||||
.vreg_list = NULL,
|
||||
|
|
|
@ -77,6 +77,8 @@
|
|||
#define QSERDES_COM_CORECLK_DIV_MODE1 0x1bc
|
||||
|
||||
/* 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_DEBUG_BUS_SEL 0x064
|
||||
#define QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN 0x068
|
||||
|
|
|
@ -22,10 +22,15 @@
|
|||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/sys_soc.h>
|
||||
|
||||
#define USB2PHY_ANA_CONFIG1 0x4c
|
||||
#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 */
|
||||
#define AM654_USB2_OTG_PD BIT(8)
|
||||
#define AM654_USB2_VBUS_DET_EN BIT(5)
|
||||
|
@ -43,6 +48,7 @@
|
|||
#define OMAP_USB2_HAS_START_SRP BIT(0)
|
||||
#define OMAP_USB2_HAS_SET_VBUS BIT(1)
|
||||
#define OMAP_USB2_CALIBRATE_FALSE_DISCONNECT BIT(2)
|
||||
#define OMAP_USB2_DISABLE_CHRG_DET BIT(3)
|
||||
|
||||
struct omap_usb {
|
||||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -329,6 +342,26 @@ static const struct of_device_id 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)
|
||||
{
|
||||
struct omap_usb *phy;
|
||||
|
@ -366,14 +399,14 @@ static int omap_usb2_probe(struct platform_device *pdev)
|
|||
phy->mask = phy_data->mask;
|
||||
phy->power_on = phy_data->power_on;
|
||||
phy->power_off = phy_data->power_off;
|
||||
phy->flags = phy_data->flags;
|
||||
|
||||
if (phy_data->flags & OMAP_USB2_CALIBRATE_FALSE_DISCONNECT) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
phy->phy_base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(phy->phy_base))
|
||||
return PTR_ERR(phy->phy_base);
|
||||
phy->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);
|
||||
if (IS_ERR(phy->phy_base))
|
||||
return PTR_ERR(phy->phy_base);
|
||||
|
||||
phy->syscon_phy_power = syscon_regmap_lookup_by_phandle(node,
|
||||
"syscon-phy-power");
|
||||
|
|
|
@ -1372,7 +1372,7 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
|
|||
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);
|
||||
if (ret < 0) {
|
||||
dev_err(slave->bus->dev,
|
||||
|
|
|
@ -717,6 +717,7 @@ error:
|
|||
kfree(wbuf);
|
||||
error_1:
|
||||
kfree(wr_msg);
|
||||
bus->defer_msg.msg = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -840,9 +841,10 @@ static int do_bank_switch(struct sdw_stream_runtime *stream)
|
|||
error:
|
||||
list_for_each_entry(m_rt, &stream->master_list, stream_node) {
|
||||
bus = m_rt->bus;
|
||||
|
||||
kfree(bus->defer_msg.msg->buf);
|
||||
kfree(bus->defer_msg.msg);
|
||||
if (bus->defer_msg.msg) {
|
||||
kfree(bus->defer_msg.msg->buf);
|
||||
kfree(bus->defer_msg.msg);
|
||||
}
|
||||
}
|
||||
|
||||
msg_unlock:
|
||||
|
|
|
@ -1121,7 +1121,7 @@ static void vga_8planes_imageblit(struct fb_info *info, const struct fb_image *i
|
|||
char oldop = setop(0);
|
||||
char oldsr = setsr(0);
|
||||
char oldmask = selectmask();
|
||||
const char *cdat = image->data;
|
||||
const unsigned char *cdat = image->data;
|
||||
u32 dx = image->dx;
|
||||
char __iomem *where;
|
||||
int y;
|
||||
|
|
|
@ -49,6 +49,10 @@ struct _ddebug {
|
|||
|
||||
|
||||
#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,
|
||||
const char *modname);
|
||||
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)
|
||||
#endif
|
||||
|
||||
#else /* !HAVE_JUMP_LABEL */
|
||||
#else /* !CONFIG_JUMP_LABEL */
|
||||
|
||||
#define _DPRINTK_KEY_INIT
|
||||
|
||||
|
@ -117,7 +121,7 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
|
|||
unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif /* CONFIG_JUMP_LABEL */
|
||||
|
||||
#define __dynamic_func_call(id, fmt, func, ...) do { \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(id, fmt); \
|
||||
|
@ -172,10 +176,11 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
|
|||
KERN_DEBUG, prefix_str, prefix_type, \
|
||||
rowsize, groupsize, buf, len, ascii)
|
||||
|
||||
#else
|
||||
#else /* !CONFIG_DYNAMIC_DEBUG_CORE */
|
||||
|
||||
#include <linux/string.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/printk.h>
|
||||
|
||||
static inline int ddebug_add_module(struct _ddebug *tab, unsigned int n,
|
||||
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, \
|
||||
rowsize, groupsize, buf, len, ascii); \
|
||||
} 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
|
||||
|
|
|
@ -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
|
||||
* of (keyword, value) pairs or combined keyword=value terms,
|
||||
* chosen from these possibilities:
|
||||
* of (keyword, value) pairs chosen from these possibilities:
|
||||
*
|
||||
* func <function-name>
|
||||
* file <full-pathname>
|
||||
|
@ -373,34 +372,22 @@ static int ddebug_parse_query(char *words[], int nwords,
|
|||
unsigned int i;
|
||||
int rc = 0;
|
||||
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)
|
||||
/* support $modname.dyndbg=<multiple queries> */
|
||||
query->module = modname;
|
||||
|
||||
for (i = 0; i < nwords; i++) {
|
||||
/* accept keyword=arg */
|
||||
vpr_info("%d w:%s\n", i, words[i]);
|
||||
|
||||
keyword = words[i];
|
||||
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"))
|
||||
for (i = 0; i < nwords; i += 2) {
|
||||
if (!strcmp(words[i], "func")) {
|
||||
rc = check_set(&query->function, words[i+1], "func");
|
||||
} else if (!strcmp(words[i], "file")) {
|
||||
if (check_set(&query->filename, words[i+1], "file"))
|
||||
return -EINVAL;
|
||||
|
||||
/* 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))
|
||||
return -EINVAL;
|
||||
}
|
||||
} else if (!strcmp(keyword, "module")) {
|
||||
rc = check_set(&query->module, arg, "module");
|
||||
} else if (!strcmp(keyword, "format")) {
|
||||
string_unescape_inplace(arg, UNESCAPE_SPACE |
|
||||
} else if (!strcmp(words[i], "module")) {
|
||||
rc = check_set(&query->module, words[i+1], "module");
|
||||
} else if (!strcmp(words[i], "format")) {
|
||||
string_unescape_inplace(words[i+1], UNESCAPE_SPACE |
|
||||
UNESCAPE_OCTAL |
|
||||
UNESCAPE_SPECIAL);
|
||||
rc = check_set(&query->format, arg, "format");
|
||||
} else if (!strcmp(keyword, "line")) {
|
||||
if (parse_linerange(query, arg))
|
||||
rc = check_set(&query->format, words[i+1], "format");
|
||||
} else if (!strcmp(words[i], "line")) {
|
||||
if (parse_linerange(query, words[i+1]))
|
||||
return -EINVAL;
|
||||
} else {
|
||||
pr_err("unknown keyword \"%s\"\n", keyword);
|
||||
pr_err("unknown keyword \"%s\"\n", words[i]);
|
||||
return -EINVAL;
|
||||
}
|
||||
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
|
||||
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;
|
||||
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 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
|
||||
|
||||
|
@ -947,7 +957,7 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
|
|||
list_add(&dt->link, &ddebug_tables);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,11 @@ else
|
|||
fi
|
||||
|
||||
# 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
|
||||
if [ "${ALLSOURCE_ARCHS}" = "" ]; then
|
||||
|
@ -92,7 +96,7 @@ all_sources()
|
|||
all_compiled_sources()
|
||||
{
|
||||
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).*(?= \\))' {} \+ |
|
||||
awk '!a[$0]++') | sort -u
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче