All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <670e4bd2c9d8dc91d1c9fca2b050915942b2a9b2.camel@intel.com>

diff --git a/a/1.txt b/N1/1.txt
index e66cdfe..fd8617e 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -5,82 +5,82 @@ On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:
 > reply inline.
 > 
 > On 2021/11/23, 10:11 PM, "openbmc on behalf of Iwona Winiarska"
-> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org?on behalf of
-> iwona.winiarska at intel.com> wrote:
+> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org on behalf of
+> iwona.winiarska@intel.com> wrote:
 > 
-> ??? >?? From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
+>     >   From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
 > Add the define for the bus frequency
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MIN???????????2000
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT???????2000
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MAX???????????1000000
+>         #define ASPEED_PECI_BUS_FREQUENCY_MIN           2000
+>         #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT       2000
+>         #define ASPEED_PECI_BUS_FREQUENCY_MAX           1000000
 > 
-> ?? >?? +struct aspeed_peci {
-> ??? >?? +???????struct peci_controller *controller;
-> ??? >?? +???????struct device *dev;
-> ??? >?? +???????void __iomem *base;
-> ??? >?? +???????struct clk *clk;
-> ??? >?? +???????struct reset_control *rst;
-> ??? >?? +???????int irq;
-> ??? >?? +???????spinlock_t lock; /* to sync completion status handling */
-> ??? >?? +???????struct completion xfer_complete;
-> ??? >?? +???????u32 status;
-> ??? >?? +???????u32 cmd_timeout_ms;
-> ??? >?? +???????u32 msg_timing;
-> ??? >?? +???????u32 addr_timing;
-> ??? >?? +???????u32 rd_sampling_point;
-> ??? >?? +???????u32 clk_div;
+>    >   +struct aspeed_peci {
+>     >   +       struct peci_controller *controller;
+>     >   +       struct device *dev;
+>     >   +       void __iomem *base;
+>     >   +       struct clk *clk;
+>     >   +       struct reset_control *rst;
+>     >   +       int irq;
+>     >   +       spinlock_t lock; /* to sync completion status handling */
+>     >   +       struct completion xfer_complete;
+>     >   +       u32 status;
+>     >   +       u32 cmd_timeout_ms;
+>     >   +       u32 msg_timing;
+>     >   +       u32 addr_timing;
+>     >   +       u32 rd_sampling_point;
+>     >   +       u32 clk_div;
 > 
 > Add the paremeter to store the bus_freq from the dts property
-> ??????? u32 bus_freq;
+>         u32 bus_freq;
 > 
-> ??? >?? +};
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_init_regs(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????u32 val;
-> ??? >?? +
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,
+>     >   +};
+>     >   +
+>     >   +static void aspeed_peci_init_regs(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       u32 val;
+>     >   +
+>     >   +       val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,
 > ASPEED_PECI_CLK_DIV_DEFAULT);
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);
-> ??? >?? +???????/*
-> ??? >?? +??????? * Timing negotiation period setting.
-> ??? >?? +??????? * The unit of the programmed value is 4 times of PECI clock
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
+>     >   +       writel(val, priv->base + ASPEED_PECI_CTRL);
+>     >   +       /*
+>     >   +        * Timing negotiation period setting.
+>     >   +        * The unit of the programmed value is 4 times of PECI clock
 > period.
-> ??? >?? +??????? */
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-
+>     >   +        */
+>     >   +       val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-
 > >msg_timing);
-> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-
+>     >   +       val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-
 > >addr_timing);
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);
-> ??? >?? +
-> ??? >?? +???????/* Clear interrupts */
-> ??? >?? +???????val = readl(priv->base + ASPEED_PECI_INT_STS) |
+>     >   +       writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);
+>     >   +
+>     >   +       /* Clear interrupts */
+>     >   +       val = readl(priv->base + ASPEED_PECI_INT_STS) |
 > ASPEED_PECI_INT_MASK;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_STS);
-> ??? >?? +
-> ??? >?? +???????/* Set timing negotiation mode and enable interrupts */
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,
+>     >   +       writel(val, priv->base + ASPEED_PECI_INT_STS);
+>     >   +
+>     >   +       /* Set timing negotiation mode and enable interrupts */
+>     >   +       val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,
 > ASPEED_PECI_1ST_BIT_OF_ADDR_NEGO);
-> ??? >?? +???????val |= ASPEED_PECI_INT_MASK;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_CTRL);
-> ??? >?? +
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-
+>     >   +       val |= ASPEED_PECI_INT_MASK;
+>     >   +       writel(val, priv->base + ASPEED_PECI_INT_CTRL);
+>     >   +
+>     >   +       val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-
 > >rd_sampling_point);
-> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-
+>     >   +       val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-
 > >clk_div);
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_EN;
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);
-> ??? >?? +
-> ??? >?? +???????if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_EN;
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
+>     >   +       writel(val, priv->base + ASPEED_PECI_CTRL);
+>     >   +}
+>     >   +
+>     >   +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);
+>     >   +
+>     >   +       if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==
 > ASPEED_PECI_CMD_STS_ADDR_T_NEGO)
-> ??? >?? +???????????????aspeed_peci_init_regs(priv);
+>     >   +               aspeed_peci_init_regs(priv);
 > 
 > As long as the state is not idle, the controller need to reinitialize the PECI
 > register for solving the PECI controller hang.
@@ -88,11 +88,11 @@ On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:
 > the hang issue.
 > For backward compatible, I suggest to add the reset assert/de-assert in this
 > place.
-> ??????? if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {
-> ??????????????????????? reset_control_assert(priv->rst);
-> ??????????????????????? reset_control_deassert(priv->rst);
-> ??????????????????????? aspeed_peci_init_regs(priv);
-> ??????? }
+>         if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {
+>                         reset_control_assert(priv->rst);
+>                         reset_control_deassert(priv->rst);
+>                         aspeed_peci_init_regs(priv);
+>         }
 
 Ack.
 
@@ -100,42 +100,42 @@ Ack.
 
 (...)
 
-> ??? >?? +static void aspeed_peci_property_setup(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,clock-
+>     >   +static void aspeed_peci_property_setup(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,clock-
 > divider",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_CLK_DIV_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_CLK_DIV_DEFAULT,
+>     >   +                                     0, ASPEED_PECI_CLK_DIV_MAX,
+>     >   +                                     ASPEED_PECI_CLK_DIV_DEFAULT,
 > &priv->clk_div);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,msg-timing",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_MSG_TIMING_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_MSG_TIMING_DEFAULT,
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,msg-timing",
+>     >   +                                     0, ASPEED_PECI_MSG_TIMING_MAX,
+>     >   +                                     ASPEED_PECI_MSG_TIMING_DEFAULT,
 > &priv->msg_timing);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,addr-timing",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_ADDR_TIMING_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_ADDR_TIMING_DEFAULT,
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,addr-timing",
+>     >   +                                     0, ASPEED_PECI_ADDR_TIMING_MAX,
+>     >   +                                     ASPEED_PECI_ADDR_TIMING_DEFAULT,
 > &priv->addr_timing);
 > 
 > Use the bus-frequency to replace the property above:
-> ??????? aspeed_peci_property_sanitize(priv->dev, "bus-frequency",
-> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_MIN,
+>         aspeed_peci_property_sanitize(priv->dev, "bus-frequency",
+>                                 ASPEED_PECI_BUS_FREQUENCY_MIN,
 > ASPEED_PECI_BUS_FREQUENCY_MAX,
-> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-
+>                                 ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-
 > >bus_freq);
 > 
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,rd-sampling-
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,rd-sampling-
 > point",
-> ??? >?? +???????????????????????????????????? 0,
+>     >   +                                     0,
 > ASPEED_PECI_RD_SAMPLING_POINT_MAX,
-> ??? >?? +????????????????????????????????????
+>     >   +                                    
 > ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT,
-> ??? >?? +???????????????????????????????????? &priv->rd_sampling_point);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "cmd-timeout-ms",
-> ??? >?? +???????????????????????????????????? 1,
+>     >   +                                     &priv->rd_sampling_point);
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "cmd-timeout-ms",
+>     >   +                                     1,
 > ASPEED_PECI_CMD_TIMEOUT_MS_MAX,
-> ??? >?? +????????????????????????????????????
+>     >   +                                    
 > ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT, &priv->cmd_timeout_ms);
-> ??? >?? +}
+>     >   +}
 > Add the function of automatically calculating the settings to adapt to the bus
 > frequency.
 
@@ -149,173 +149,173 @@ presenting this as what it actually is (a "custom" clock divider).
 Thanks
 -Iwona
 
-> ??????? static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)
-> ??????? {
-> ??????????????? unsigned long src_clk_rate;
-> ??????????????? int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;
-> ??????????????? u32 msg_timing, clk_div;
+>         static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)
+>         {
+>                 unsigned long src_clk_rate;
+>                 int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;
+>                 u32 msg_timing, clk_div;
 > 
-> ??????????????? src_clk_rate = clk_get_rate(priv->clk);
+>                 src_clk_rate = clk_get_rate(priv->clk);
 > 
-> ??????????????? /*
-> ???????????????? * PECI bus freq? = (source clk rate) / (4 *
+>                 /*
+>                  * PECI bus freq  = (source clk rate) / (4 *
 > (PECI04[15:8]*4+1) * (1 << PECI00[10:8]))
-> ???????????????? * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk
+>                  * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk
 > rate) / (4 * PECI bus freq )
-> ???????????????? */
-> ??????????????? clk_divisor = src_clk_rate / (4 * priv->bus_freq);
-> ??????????????? delta_value = clk_divisor;
-> ??????????????? /* Find the closest divisor for bus-frequency */
-> ??????????????? for (msg_timing = 1; msg_timing <= 255; msg_timing++)
-> ??????????????????????? for (clk_div = 0; clk_div < 7;
-> ??????????????????????????????? clk_div++) {
-> ??????????????????????????????? clk_divisor_tmp = (1 << clk_div) *
-> ??????????????????????????????????????????????? (msg_timing * 4 + 1);
-> ??????????????????????????????? delta_tmp = abs(clk_divisor -
+>                  */
+>                 clk_divisor = src_clk_rate / (4 * priv->bus_freq);
+>                 delta_value = clk_divisor;
+>                 /* Find the closest divisor for bus-frequency */
+>                 for (msg_timing = 1; msg_timing <= 255; msg_timing++)
+>                         for (clk_div = 0; clk_div < 7;
+>                                 clk_div++) {
+>                                 clk_divisor_tmp = (1 << clk_div) *
+>                                                 (msg_timing * 4 + 1);
+>                                 delta_tmp = abs(clk_divisor -
 > clk_divisor_tmp);
-> ??????????????????????????????? if (delta_tmp < delta_value) {
-> ??????????????????????????????????????? delta_value = delta_tmp;
-> ??????????????????????????????????????? priv->msg_timing = msg_timing;
-> ??????????????????????????????????????? priv->addr_timing = priv->msg_timing;
-> ??????????????????????????????????????? priv->clk_div = clk_div;
-> ??????????????????????????????? }
-> ??????????????????????? }
-> ??????? }
+>                                 if (delta_tmp < delta_value) {
+>                                         delta_value = delta_tmp;
+>                                         priv->msg_timing = msg_timing;
+>                                         priv->addr_timing = priv->msg_timing;
+>                                         priv->clk_div = clk_div;
+>                                 }
+>                         }
+>         }
 > 
-> ??? >?? +
-> ??? >?? +static struct peci_controller_ops aspeed_ops = {
-> ??? >?? +???????.xfer = aspeed_peci_xfer,
-> ??? >?? +};
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_reset_control_release(void *data)
-> ??? >?? +{
-> ??? >?? +???????reset_control_assert(data);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int devm_aspeed_peci_reset_control_deassert(struct device
+>     >   +
+>     >   +static struct peci_controller_ops aspeed_ops = {
+>     >   +       .xfer = aspeed_peci_xfer,
+>     >   +};
+>     >   +
+>     >   +static void aspeed_peci_reset_control_release(void *data)
+>     >   +{
+>     >   +       reset_control_assert(data);
+>     >   +}
+>     >   +
+>     >   +static int devm_aspeed_peci_reset_control_deassert(struct device
 > *dev, struct reset_control *rst)
-> ??? >?? +{
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????ret = reset_control_deassert(rst);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????return devm_add_action_or_reset(dev,
+>     >   +{
+>     >   +       int ret;
+>     >   +
+>     >   +       ret = reset_control_deassert(rst);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       return devm_add_action_or_reset(dev,
 > aspeed_peci_reset_control_release, rst);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_clk_release(void *data)
-> ??? >?? +{
-> ??? >?? +???????clk_disable_unprepare(data);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk
+>     >   +}
+>     >   +
+>     >   +static void aspeed_peci_clk_release(void *data)
+>     >   +{
+>     >   +       clk_disable_unprepare(data);
+>     >   +}
+>     >   +
+>     >   +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk
 > *clk)
-> ??? >?? +{
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????ret = clk_prepare_enable(clk);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????return devm_add_action_or_reset(dev, aspeed_peci_clk_release,
+>     >   +{
+>     >   +       int ret;
+>     >   +
+>     >   +       ret = clk_prepare_enable(clk);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       return devm_add_action_or_reset(dev, aspeed_peci_clk_release,
 > clk);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int aspeed_peci_probe(struct platform_device *pdev)
-> ??? >?? +{
-> ??? >?? +???????struct peci_controller *controller;
-> ??? >?? +???????struct aspeed_peci *priv;
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
-> ??? >?? +???????if (!priv)
-> ??? >?? +???????????????return -ENOMEM;
-> ??? >?? +
-> ??? >?? +???????priv->dev = &pdev->dev;
-> ??? >?? +???????dev_set_drvdata(priv->dev, priv);
-> ??? >?? +
-> ??? >?? +???????priv->base = devm_platform_ioremap_resource(pdev, 0);
-> ??? >?? +???????if (IS_ERR(priv->base))
-> ??? >?? +???????????????return PTR_ERR(priv->base);
-> ??? >?? +
-> ??? >?? +???????priv->irq = platform_get_irq(pdev, 0);
-> ??? >?? +???????if (!priv->irq)
-> ??? >?? +???????????????return priv->irq;
-> ??? >?? +
-> ??? >?? +???????ret = devm_request_irq(&pdev->dev, priv->irq,
+>     >   +}
+>     >   +
+>     >   +static int aspeed_peci_probe(struct platform_device *pdev)
+>     >   +{
+>     >   +       struct peci_controller *controller;
+>     >   +       struct aspeed_peci *priv;
+>     >   +       int ret;
+>     >   +
+>     >   +       priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+>     >   +       if (!priv)
+>     >   +               return -ENOMEM;
+>     >   +
+>     >   +       priv->dev = &pdev->dev;
+>     >   +       dev_set_drvdata(priv->dev, priv);
+>     >   +
+>     >   +       priv->base = devm_platform_ioremap_resource(pdev, 0);
+>     >   +       if (IS_ERR(priv->base))
+>     >   +               return PTR_ERR(priv->base);
+>     >   +
+>     >   +       priv->irq = platform_get_irq(pdev, 0);
+>     >   +       if (!priv->irq)
+>     >   +               return priv->irq;
+>     >   +
+>     >   +       ret = devm_request_irq(&pdev->dev, priv->irq,
 > aspeed_peci_irq_handler,
-> ??? >?? +????????????????????????????? 0, "peci-aspeed", priv);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????init_completion(&priv->xfer_complete);
-> ??? >?? +???????spin_lock_init(&priv->lock);
-> ??? >?? +
-> ??? >?? +???????priv->rst = devm_reset_control_get(&pdev->dev, NULL);
-> ??? >?? +???????if (IS_ERR(priv->rst))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->rst),
-> ??? >?? +??????????????????????????????????? "failed to get reset control\n");
-> ??? >?? +
-> ??? >?? +???????ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-
+>     >   +                              0, "peci-aspeed", priv);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       init_completion(&priv->xfer_complete);
+>     >   +       spin_lock_init(&priv->lock);
+>     >   +
+>     >   +       priv->rst = devm_reset_control_get(&pdev->dev, NULL);
+>     >   +       if (IS_ERR(priv->rst))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(priv->rst),
+>     >   +                                    "failed to get reset control\n");
+>     >   +
+>     >   +       ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-
 > >rst);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, "cannot deassert
+>     >   +       if (ret)
+>     >   +               return dev_err_probe(priv->dev, ret, "cannot deassert
 > reset control\n");
-> ??? >?? +
-> ??? >?? +???????priv->clk = devm_clk_get(priv->dev, NULL);
-> ??? >?? +???????if (IS_ERR(priv->clk))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->clk),
+>     >   +
+>     >   +       priv->clk = devm_clk_get(priv->dev, NULL);
+>     >   +       if (IS_ERR(priv->clk))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(priv->clk),
 > "failed to get clk\n");
-> ??? >?? +
-> ??? >?? +???????ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, "failed to enable
+>     >   +
+>     >   +       ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);
+>     >   +       if (ret)
+>     >   +               return dev_err_probe(priv->dev, ret, "failed to enable
 > clock\n");
-> ??? >?? +
-> ??? >?? +???????aspeed_peci_property_setup(priv);
+>     >   +
+>     >   +       aspeed_peci_property_setup(priv);
 > 
-> ??????? aspeed_peci_bus_freq_setup(priv);
+>         aspeed_peci_bus_freq_setup(priv);
 > 
-> ??? >?? +
-> ??? >?? +???????aspeed_peci_init_regs(priv);
-> ??? >?? +
-> ??? >?? +???????controller = devm_peci_controller_add(priv->dev, &aspeed_ops);
-> ??? >?? +???????if (IS_ERR(controller))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(controller),
-> ??? >?? +??????????????????????????????????? "failed to add aspeed peci
+>     >   +
+>     >   +       aspeed_peci_init_regs(priv);
+>     >   +
+>     >   +       controller = devm_peci_controller_add(priv->dev, &aspeed_ops);
+>     >   +       if (IS_ERR(controller))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(controller),
+>     >   +                                    "failed to add aspeed peci
 > controller\n");
-> ??? >?? +
-> ??? >?? +???????priv->controller = controller;
-> ??? >?? +
-> ??? >?? +???????return 0;
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static const struct of_device_id aspeed_peci_of_table[] = {
-> ??? >?? +???????{ .compatible = "aspeed,ast2400-peci", },
-> ??? >?? +???????{ .compatible = "aspeed,ast2500-peci", },
-> ??? >?? +???????{ .compatible = "aspeed,ast2600-peci", },
-> ??? >?? +???????{ }
-> ??? >?? +};
-> ??? >?? +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);
-> ??? >?? +
-> ??? >?? +static struct platform_driver aspeed_peci_driver = {
-> ??? >?? +???????.probe? = aspeed_peci_probe,
-> ??? >?? +???????.driver = {
-> ??? >?? +???????????????.name?????????? = "peci-aspeed",
-> ??? >?? +???????????????.of_match_table = aspeed_peci_of_table,
-> ??? >?? +???????},
-> ??? >?? +};
-> ??? >?? +module_platform_driver(aspeed_peci_driver);
-> ??? >?? +
-> ??? >?? +MODULE_AUTHOR("Ryan Chen <ryan_chen@aspeedtech.com>");
-> ??? >?? +MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
-> ??? >?? +MODULE_DESCRIPTION("ASPEED PECI driver");
-> ??? >?? +MODULE_LICENSE("GPL");
-> ??? >?? +MODULE_IMPORT_NS(PECI);
-> ??? >?? -- 
-> ??? >?? 2.31.1
+>     >   +
+>     >   +       priv->controller = controller;
+>     >   +
+>     >   +       return 0;
+>     >   +}
+>     >   +
+>     >   +static const struct of_device_id aspeed_peci_of_table[] = {
+>     >   +       { .compatible = "aspeed,ast2400-peci", },
+>     >   +       { .compatible = "aspeed,ast2500-peci", },
+>     >   +       { .compatible = "aspeed,ast2600-peci", },
+>     >   +       { }
+>     >   +};
+>     >   +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);
+>     >   +
+>     >   +static struct platform_driver aspeed_peci_driver = {
+>     >   +       .probe  = aspeed_peci_probe,
+>     >   +       .driver = {
+>     >   +               .name           = "peci-aspeed",
+>     >   +               .of_match_table = aspeed_peci_of_table,
+>     >   +       },
+>     >   +};
+>     >   +module_platform_driver(aspeed_peci_driver);
+>     >   +
+>     >   +MODULE_AUTHOR("Ryan Chen <ryan_chen@aspeedtech.com>");
+>     >   +MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
+>     >   +MODULE_DESCRIPTION("ASPEED PECI driver");
+>     >   +MODULE_LICENSE("GPL");
+>     >   +MODULE_IMPORT_NS(PECI);
+>     >   -- 
+>     >   2.31.1
 > 
 > 
 >
diff --git a/a/content_digest b/N1/content_digest
index c3e1dab..bf86cf6 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -2,9 +2,36 @@
  "ref\020211123140706.2945700-6-iwona.winiarska@intel.com\0"
  "ref\071D27F36-8BB7-4C30-99C5-CCA4F9A30945@aspeedtech.com\0"
  "From\0Winiarska, Iwona <iwona.winiarska@intel.com>\0"
- "Subject\0[PATCH v4 05/13] peci: Add peci-aspeed controller driver\0"
+ "Subject\0Re: [PATCH v4 05/13] peci: Add peci-aspeed controller driver\0"
  "Date\0Tue, 7 Dec 2021 18:09:36 +0000\0"
- "To\0linux-aspeed@lists.ozlabs.org\0"
+ "To\0billy_tsai@aspeedtech.com <billy_tsai@aspeedtech.com>"
+  gregkh@linuxfoundation.org <gregkh@linuxfoundation.org>
+  linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>
+ " openbmc@lists.ozlabs.org <openbmc@lists.ozlabs.org>\0"
+ "Cc\0corbet@lwn.net <corbet@lwn.net>"
+  jae.hyun.yoo@linux.intel.com <jae.hyun.yoo@linux.intel.com>
+  linux-hwmon@vger.kernel.org <linux-hwmon@vger.kernel.org>
+  andrew@aj.id.au <andrew@aj.id.au>
+  Hansen
+  Dave <dave.hansen@intel.com>
+  Luck
+  Tony <tony.luck@intel.com>
+  jdelvare@suse.com <jdelvare@suse.com>
+  olof@lixom.net <olof@lixom.net>
+  rdunlap@infradead.org <rdunlap@infradead.org>
+  devicetree@vger.kernel.org <devicetree@vger.kernel.org>
+  linux-aspeed@lists.ozlabs.org <linux-aspeed@lists.ozlabs.org>
+  linux@roeck-us.net <linux@roeck-us.net>
+  arnd@arndb.de <arnd@arndb.de>
+  linux-doc@vger.kernel.org <linux-doc@vger.kernel.org>
+  robh+dt@kernel.org <robh+dt@kernel.org>
+  zweiss@equinix.com <zweiss@equinix.com>
+  bp@alien8.de <bp@alien8.de>
+  linux-arm-kernel@lists.infradead.org <linux-arm-kernel@lists.infradead.org>
+  pierre-louis.bossart@linux.intel.com <pierre-louis.bossart@linux.intel.com>
+  andriy.shevchenko@linux.intel.com <andriy.shevchenko@linux.intel.com>
+  Williams
+ " Dan J <dan.j.williams@intel.com>\0"
  "\00:1\0"
  "b\0"
  "On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:\n"
@@ -14,82 +41,82 @@
  "> reply inline.\n"
  "> \n"
  "> On 2021/11/23, 10:11 PM, \"openbmc on behalf of Iwona Winiarska\"\n"
- "> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org?on behalf of\n"
- "> iwona.winiarska at intel.com> wrote:\n"
+ "> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org\302\240on behalf of\n"
+ "> iwona.winiarska@intel.com> wrote:\n"
  "> \n"
- "> ??? >?? From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\n"
  "> Add the define for the bus frequency\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MIN???????????2000\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT???????2000\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MAX???????????1000000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_MIN\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\2402000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT\302\240\302\240\302\240\302\240\302\240\302\240\302\2402000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_MAX\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\2401000000\n"
  "> \n"
- "> ?? >?? +struct aspeed_peci {\n"
- "> ??? >?? +???????struct peci_controller *controller;\n"
- "> ??? >?? +???????struct device *dev;\n"
- "> ??? >?? +???????void __iomem *base;\n"
- "> ??? >?? +???????struct clk *clk;\n"
- "> ??? >?? +???????struct reset_control *rst;\n"
- "> ??? >?? +???????int irq;\n"
- "> ??? >?? +???????spinlock_t lock; /* to sync completion status handling */\n"
- "> ??? >?? +???????struct completion xfer_complete;\n"
- "> ??? >?? +???????u32 status;\n"
- "> ??? >?? +???????u32 cmd_timeout_ms;\n"
- "> ??? >?? +???????u32 msg_timing;\n"
- "> ??? >?? +???????u32 addr_timing;\n"
- "> ??? >?? +???????u32 rd_sampling_point;\n"
- "> ??? >?? +???????u32 clk_div;\n"
+ "> \302\240\302\240 >\302\240\302\240 +struct aspeed_peci {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct peci_controller *controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct device *dev;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240void __iomem *base;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct clk *clk;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct reset_control *rst;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int irq;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240spinlock_t lock; /* to sync completion status handling */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct completion xfer_complete;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 status;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 cmd_timeout_ms;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 msg_timing;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 addr_timing;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 rd_sampling_point;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 clk_div;\n"
  "> \n"
  "> Add the paremeter to store the bus_freq from the dts property\n"
- "> ??????? u32 bus_freq;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 u32 bus_freq;\n"
  "> \n"
- "> ??? >?? +};\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_init_regs(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????u32 val;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_init_regs(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 val;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,\n"
  "> ASPEED_PECI_CLK_DIV_DEFAULT);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);\n"
- "> ??? >?? +???????/*\n"
- "> ??? >?? +??????? * Timing negotiation period setting.\n"
- "> ??? >?? +??????? * The unit of the programmed value is 4 times of PECI clock\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/*\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * Timing negotiation period setting.\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * The unit of the programmed value is 4 times of PECI clock\n"
  "> period.\n"
- "> ??? >?? +??????? */\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-\n"
  "> >msg_timing);\n"
- "> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-\n"
  "> >addr_timing);\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????/* Clear interrupts */\n"
- "> ??? >?? +???????val = readl(priv->base + ASPEED_PECI_INT_STS) |\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* Clear interrupts */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = readl(priv->base + ASPEED_PECI_INT_STS) |\n"
  "> ASPEED_PECI_INT_MASK;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_STS);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????/* Set timing negotiation mode and enable interrupts */\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_INT_STS);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* Set timing negotiation mode and enable interrupts */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,\n"
  "> ASPEED_PECI_1ST_BIT_OF_ADDR_NEGO);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_INT_MASK;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_CTRL);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_INT_MASK;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_INT_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-\n"
  "> >rd_sampling_point);\n"
- "> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-\n"
  "> >clk_div);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_EN;\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==\n"
  "> ASPEED_PECI_CMD_STS_ADDR_T_NEGO)\n"
- "> ??? >?? +???????????????aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_init_regs(priv);\n"
  "> \n"
  "> As long as the state is not idle, the controller need to reinitialize the PECI\n"
  "> register for solving the PECI controller hang.\n"
@@ -97,11 +124,11 @@
  "> the hang issue.\n"
  "> For backward compatible, I suggest to add the reset assert/de-assert in this\n"
  "> place.\n"
- "> ??????? if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {\n"
- "> ??????????????????????? reset_control_assert(priv->rst);\n"
- "> ??????????????????????? reset_control_deassert(priv->rst);\n"
- "> ??????????????????????? aspeed_peci_init_regs(priv);\n"
- "> ??????? }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 reset_control_assert(priv->rst);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 reset_control_deassert(priv->rst);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
  "\n"
  "Ack.\n"
  "\n"
@@ -109,42 +136,42 @@
  "\n"
  "(...)\n"
  "\n"
- "> ??? >?? +static void aspeed_peci_property_setup(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,clock-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_property_setup(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,clock-\n"
  "> divider\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_CLK_DIV_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_CLK_DIV_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_CLK_DIV_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_CLK_DIV_DEFAULT,\n"
  "> &priv->clk_div);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,msg-timing\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_MSG_TIMING_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_MSG_TIMING_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,msg-timing\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_MSG_TIMING_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_MSG_TIMING_DEFAULT,\n"
  "> &priv->msg_timing);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,addr-timing\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_ADDR_TIMING_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_ADDR_TIMING_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,addr-timing\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_ADDR_TIMING_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_ADDR_TIMING_DEFAULT,\n"
  "> &priv->addr_timing);\n"
  "> \n"
  "> Use the bus-frequency to replace the property above:\n"
- "> ??????? aspeed_peci_property_sanitize(priv->dev, \"bus-frequency\",\n"
- "> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_MIN,\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_property_sanitize(priv->dev, \"bus-frequency\",\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240ASPEED_PECI_BUS_FREQUENCY_MIN,\n"
  "> ASPEED_PECI_BUS_FREQUENCY_MAX,\n"
- "> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-\n"
  "> >bus_freq);\n"
  "> \n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,rd-sampling-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,rd-sampling-\n"
  "> point\",\n"
- "> ??? >?? +???????????????????????????????????? 0,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0,\n"
  "> ASPEED_PECI_RD_SAMPLING_POINT_MAX,\n"
- "> ??? >?? +????????????????????????????????????\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\n"
  "> ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT,\n"
- "> ??? >?? +???????????????????????????????????? &priv->rd_sampling_point);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"cmd-timeout-ms\",\n"
- "> ??? >?? +???????????????????????????????????? 1,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 &priv->rd_sampling_point);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"cmd-timeout-ms\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 1,\n"
  "> ASPEED_PECI_CMD_TIMEOUT_MS_MAX,\n"
- "> ??? >?? +????????????????????????????????????\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\n"
  "> ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT, &priv->cmd_timeout_ms);\n"
- "> ??? >?? +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
  "> Add the function of automatically calculating the settings to adapt to the bus\n"
  "> frequency.\n"
  "\n"
@@ -158,175 +185,175 @@
  "Thanks\n"
  "-Iwona\n"
  "\n"
- "> ??????? static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)\n"
- "> ??????? {\n"
- "> ??????????????? unsigned long src_clk_rate;\n"
- "> ??????????????? int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;\n"
- "> ??????????????? u32 msg_timing, clk_div;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 unsigned long src_clk_rate;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 u32 msg_timing, clk_div;\n"
  "> \n"
- "> ??????????????? src_clk_rate = clk_get_rate(priv->clk);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 src_clk_rate = clk_get_rate(priv->clk);\n"
  "> \n"
- "> ??????????????? /*\n"
- "> ???????????????? * PECI bus freq? = (source clk rate) / (4 *\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * PECI bus freq\302\240 = (source clk rate) / (4 *\n"
  "> (PECI04[15:8]*4+1) * (1 << PECI00[10:8]))\n"
- "> ???????????????? * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk\n"
  "> rate) / (4 * PECI bus freq )\n"
- "> ???????????????? */\n"
- "> ??????????????? clk_divisor = src_clk_rate / (4 * priv->bus_freq);\n"
- "> ??????????????? delta_value = clk_divisor;\n"
- "> ??????????????? /* Find the closest divisor for bus-frequency */\n"
- "> ??????????????? for (msg_timing = 1; msg_timing <= 255; msg_timing++)\n"
- "> ??????????????????????? for (clk_div = 0; clk_div < 7;\n"
- "> ??????????????????????????????? clk_div++) {\n"
- "> ??????????????????????????????? clk_divisor_tmp = (1 << clk_div) *\n"
- "> ??????????????????????????????????????????????? (msg_timing * 4 + 1);\n"
- "> ??????????????????????????????? delta_tmp = abs(clk_divisor -\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_divisor = src_clk_rate / (4 * priv->bus_freq);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_value = clk_divisor;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /* Find the closest divisor for bus-frequency */\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 for (msg_timing = 1; msg_timing <= 255; msg_timing++)\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 for (clk_div = 0; clk_div < 7;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_div++) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_divisor_tmp = (1 << clk_div) *\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (msg_timing * 4 + 1);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_tmp = abs(clk_divisor -\n"
  "> clk_divisor_tmp);\n"
- "> ??????????????????????????????? if (delta_tmp < delta_value) {\n"
- "> ??????????????????????????????????????? delta_value = delta_tmp;\n"
- "> ??????????????????????????????????????? priv->msg_timing = msg_timing;\n"
- "> ??????????????????????????????????????? priv->addr_timing = priv->msg_timing;\n"
- "> ??????????????????????????????????????? priv->clk_div = clk_div;\n"
- "> ??????????????????????????????? }\n"
- "> ??????????????????????? }\n"
- "> ??????? }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (delta_tmp < delta_value) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_value = delta_tmp;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->msg_timing = msg_timing;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->addr_timing = priv->msg_timing;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->clk_div = clk_div;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
  "> \n"
- "> ??? >?? +\n"
- "> ??? >?? +static struct peci_controller_ops aspeed_ops = {\n"
- "> ??? >?? +???????.xfer = aspeed_peci_xfer,\n"
- "> ??? >?? +};\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_reset_control_release(void *data)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????reset_control_assert(data);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int devm_aspeed_peci_reset_control_deassert(struct device\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static struct peci_controller_ops aspeed_ops = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.xfer = aspeed_peci_xfer,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_reset_control_release(void *data)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240reset_control_assert(data);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int devm_aspeed_peci_reset_control_deassert(struct device\n"
  "> *dev, struct reset_control *rst)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = reset_control_deassert(rst);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return devm_add_action_or_reset(dev,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = reset_control_deassert(rst);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return devm_add_action_or_reset(dev,\n"
  "> aspeed_peci_reset_control_release, rst);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_clk_release(void *data)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????clk_disable_unprepare(data);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_clk_release(void *data)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240clk_disable_unprepare(data);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk\n"
  "> *clk)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = clk_prepare_enable(clk);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return devm_add_action_or_reset(dev, aspeed_peci_clk_release,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = clk_prepare_enable(clk);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return devm_add_action_or_reset(dev, aspeed_peci_clk_release,\n"
  "> clk);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int aspeed_peci_probe(struct platform_device *pdev)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????struct peci_controller *controller;\n"
- "> ??? >?? +???????struct aspeed_peci *priv;\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);\n"
- "> ??? >?? +???????if (!priv)\n"
- "> ??? >?? +???????????????return -ENOMEM;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->dev = &pdev->dev;\n"
- "> ??? >?? +???????dev_set_drvdata(priv->dev, priv);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->base = devm_platform_ioremap_resource(pdev, 0);\n"
- "> ??? >?? +???????if (IS_ERR(priv->base))\n"
- "> ??? >?? +???????????????return PTR_ERR(priv->base);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->irq = platform_get_irq(pdev, 0);\n"
- "> ??? >?? +???????if (!priv->irq)\n"
- "> ??? >?? +???????????????return priv->irq;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_request_irq(&pdev->dev, priv->irq,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int aspeed_peci_probe(struct platform_device *pdev)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct peci_controller *controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct aspeed_peci *priv;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return -ENOMEM;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->dev = &pdev->dev;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240dev_set_drvdata(priv->dev, priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->base = devm_platform_ioremap_resource(pdev, 0);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->base))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return PTR_ERR(priv->base);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->irq = platform_get_irq(pdev, 0);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!priv->irq)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return priv->irq;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_request_irq(&pdev->dev, priv->irq,\n"
  "> aspeed_peci_irq_handler,\n"
- "> ??? >?? +????????????????????????????? 0, \"peci-aspeed\", priv);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????init_completion(&priv->xfer_complete);\n"
- "> ??? >?? +???????spin_lock_init(&priv->lock);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->rst = devm_reset_control_get(&pdev->dev, NULL);\n"
- "> ??? >?? +???????if (IS_ERR(priv->rst))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->rst),\n"
- "> ??? >?? +??????????????????????????????????? \"failed to get reset control\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, \"peci-aspeed\", priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240init_completion(&priv->xfer_complete);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240spin_lock_init(&priv->lock);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->rst = devm_reset_control_get(&pdev->dev, NULL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->rst))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(priv->rst),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 \"failed to get reset control\\n\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-\n"
  "> >rst);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, \"cannot deassert\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, ret, \"cannot deassert\n"
  "> reset control\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->clk = devm_clk_get(priv->dev, NULL);\n"
- "> ??? >?? +???????if (IS_ERR(priv->clk))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->clk),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->clk = devm_clk_get(priv->dev, NULL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->clk))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(priv->clk),\n"
  "> \"failed to get clk\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, \"failed to enable\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, ret, \"failed to enable\n"
  "> clock\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????aspeed_peci_property_setup(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_setup(priv);\n"
  "> \n"
- "> ??????? aspeed_peci_bus_freq_setup(priv);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_bus_freq_setup(priv);\n"
  "> \n"
- "> ??? >?? +\n"
- "> ??? >?? +???????aspeed_peci_init_regs(priv);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????controller = devm_peci_controller_add(priv->dev, &aspeed_ops);\n"
- "> ??? >?? +???????if (IS_ERR(controller))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(controller),\n"
- "> ??? >?? +??????????????????????????????????? \"failed to add aspeed peci\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240controller = devm_peci_controller_add(priv->dev, &aspeed_ops);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(controller))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(controller),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 \"failed to add aspeed peci\n"
  "> controller\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->controller = controller;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return 0;\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static const struct of_device_id aspeed_peci_of_table[] = {\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2400-peci\", },\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2500-peci\", },\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2600-peci\", },\n"
- "> ??? >?? +???????{ }\n"
- "> ??? >?? +};\n"
- "> ??? >?? +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);\n"
- "> ??? >?? +\n"
- "> ??? >?? +static struct platform_driver aspeed_peci_driver = {\n"
- "> ??? >?? +???????.probe? = aspeed_peci_probe,\n"
- "> ??? >?? +???????.driver = {\n"
- "> ??? >?? +???????????????.name?????????? = \"peci-aspeed\",\n"
- "> ??? >?? +???????????????.of_match_table = aspeed_peci_of_table,\n"
- "> ??? >?? +???????},\n"
- "> ??? >?? +};\n"
- "> ??? >?? +module_platform_driver(aspeed_peci_driver);\n"
- "> ??? >?? +\n"
- "> ??? >?? +MODULE_AUTHOR(\"Ryan Chen <ryan_chen@aspeedtech.com>\");\n"
- "> ??? >?? +MODULE_AUTHOR(\"Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\");\n"
- "> ??? >?? +MODULE_DESCRIPTION(\"ASPEED PECI driver\");\n"
- "> ??? >?? +MODULE_LICENSE(\"GPL\");\n"
- "> ??? >?? +MODULE_IMPORT_NS(PECI);\n"
- "> ??? >?? -- \n"
- "> ??? >?? 2.31.1\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->controller = controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return 0;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static const struct of_device_id aspeed_peci_of_table[] = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2400-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2500-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2600-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ }\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static struct platform_driver aspeed_peci_driver = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.probe\302\240 = aspeed_peci_probe,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.driver = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240.name\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 = \"peci-aspeed\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240.of_match_table = aspeed_peci_of_table,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240},\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +module_platform_driver(aspeed_peci_driver);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_AUTHOR(\"Ryan Chen <ryan_chen@aspeedtech.com>\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_AUTHOR(\"Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_DESCRIPTION(\"ASPEED PECI driver\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_LICENSE(\"GPL\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_IMPORT_NS(PECI);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 -- \n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 2.31.1\n"
  "> \n"
  "> \n"
  >
 
-d65c4b1428335a9cbd34f7be1f98049e617e1d21269286d21aa723f17ca92215
+0a7d50538520dc92fd3d3ea3a3cc035bf0a0df360020e4020f34e459a36696ed

diff --git a/a/1.txt b/N2/1.txt
index e66cdfe..fd8617e 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -5,82 +5,82 @@ On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:
 > reply inline.
 > 
 > On 2021/11/23, 10:11 PM, "openbmc on behalf of Iwona Winiarska"
-> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org?on behalf of
-> iwona.winiarska at intel.com> wrote:
+> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org on behalf of
+> iwona.winiarska@intel.com> wrote:
 > 
-> ??? >?? From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
+>     >   From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
 > Add the define for the bus frequency
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MIN???????????2000
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT???????2000
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MAX???????????1000000
+>         #define ASPEED_PECI_BUS_FREQUENCY_MIN           2000
+>         #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT       2000
+>         #define ASPEED_PECI_BUS_FREQUENCY_MAX           1000000
 > 
-> ?? >?? +struct aspeed_peci {
-> ??? >?? +???????struct peci_controller *controller;
-> ??? >?? +???????struct device *dev;
-> ??? >?? +???????void __iomem *base;
-> ??? >?? +???????struct clk *clk;
-> ??? >?? +???????struct reset_control *rst;
-> ??? >?? +???????int irq;
-> ??? >?? +???????spinlock_t lock; /* to sync completion status handling */
-> ??? >?? +???????struct completion xfer_complete;
-> ??? >?? +???????u32 status;
-> ??? >?? +???????u32 cmd_timeout_ms;
-> ??? >?? +???????u32 msg_timing;
-> ??? >?? +???????u32 addr_timing;
-> ??? >?? +???????u32 rd_sampling_point;
-> ??? >?? +???????u32 clk_div;
+>    >   +struct aspeed_peci {
+>     >   +       struct peci_controller *controller;
+>     >   +       struct device *dev;
+>     >   +       void __iomem *base;
+>     >   +       struct clk *clk;
+>     >   +       struct reset_control *rst;
+>     >   +       int irq;
+>     >   +       spinlock_t lock; /* to sync completion status handling */
+>     >   +       struct completion xfer_complete;
+>     >   +       u32 status;
+>     >   +       u32 cmd_timeout_ms;
+>     >   +       u32 msg_timing;
+>     >   +       u32 addr_timing;
+>     >   +       u32 rd_sampling_point;
+>     >   +       u32 clk_div;
 > 
 > Add the paremeter to store the bus_freq from the dts property
-> ??????? u32 bus_freq;
+>         u32 bus_freq;
 > 
-> ??? >?? +};
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_init_regs(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????u32 val;
-> ??? >?? +
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,
+>     >   +};
+>     >   +
+>     >   +static void aspeed_peci_init_regs(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       u32 val;
+>     >   +
+>     >   +       val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,
 > ASPEED_PECI_CLK_DIV_DEFAULT);
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);
-> ??? >?? +???????/*
-> ??? >?? +??????? * Timing negotiation period setting.
-> ??? >?? +??????? * The unit of the programmed value is 4 times of PECI clock
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
+>     >   +       writel(val, priv->base + ASPEED_PECI_CTRL);
+>     >   +       /*
+>     >   +        * Timing negotiation period setting.
+>     >   +        * The unit of the programmed value is 4 times of PECI clock
 > period.
-> ??? >?? +??????? */
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-
+>     >   +        */
+>     >   +       val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-
 > >msg_timing);
-> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-
+>     >   +       val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-
 > >addr_timing);
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);
-> ??? >?? +
-> ??? >?? +???????/* Clear interrupts */
-> ??? >?? +???????val = readl(priv->base + ASPEED_PECI_INT_STS) |
+>     >   +       writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);
+>     >   +
+>     >   +       /* Clear interrupts */
+>     >   +       val = readl(priv->base + ASPEED_PECI_INT_STS) |
 > ASPEED_PECI_INT_MASK;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_STS);
-> ??? >?? +
-> ??? >?? +???????/* Set timing negotiation mode and enable interrupts */
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,
+>     >   +       writel(val, priv->base + ASPEED_PECI_INT_STS);
+>     >   +
+>     >   +       /* Set timing negotiation mode and enable interrupts */
+>     >   +       val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,
 > ASPEED_PECI_1ST_BIT_OF_ADDR_NEGO);
-> ??? >?? +???????val |= ASPEED_PECI_INT_MASK;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_CTRL);
-> ??? >?? +
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-
+>     >   +       val |= ASPEED_PECI_INT_MASK;
+>     >   +       writel(val, priv->base + ASPEED_PECI_INT_CTRL);
+>     >   +
+>     >   +       val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-
 > >rd_sampling_point);
-> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-
+>     >   +       val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-
 > >clk_div);
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_EN;
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);
-> ??? >?? +
-> ??? >?? +???????if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_EN;
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
+>     >   +       writel(val, priv->base + ASPEED_PECI_CTRL);
+>     >   +}
+>     >   +
+>     >   +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);
+>     >   +
+>     >   +       if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==
 > ASPEED_PECI_CMD_STS_ADDR_T_NEGO)
-> ??? >?? +???????????????aspeed_peci_init_regs(priv);
+>     >   +               aspeed_peci_init_regs(priv);
 > 
 > As long as the state is not idle, the controller need to reinitialize the PECI
 > register for solving the PECI controller hang.
@@ -88,11 +88,11 @@ On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:
 > the hang issue.
 > For backward compatible, I suggest to add the reset assert/de-assert in this
 > place.
-> ??????? if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {
-> ??????????????????????? reset_control_assert(priv->rst);
-> ??????????????????????? reset_control_deassert(priv->rst);
-> ??????????????????????? aspeed_peci_init_regs(priv);
-> ??????? }
+>         if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {
+>                         reset_control_assert(priv->rst);
+>                         reset_control_deassert(priv->rst);
+>                         aspeed_peci_init_regs(priv);
+>         }
 
 Ack.
 
@@ -100,42 +100,42 @@ Ack.
 
 (...)
 
-> ??? >?? +static void aspeed_peci_property_setup(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,clock-
+>     >   +static void aspeed_peci_property_setup(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,clock-
 > divider",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_CLK_DIV_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_CLK_DIV_DEFAULT,
+>     >   +                                     0, ASPEED_PECI_CLK_DIV_MAX,
+>     >   +                                     ASPEED_PECI_CLK_DIV_DEFAULT,
 > &priv->clk_div);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,msg-timing",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_MSG_TIMING_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_MSG_TIMING_DEFAULT,
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,msg-timing",
+>     >   +                                     0, ASPEED_PECI_MSG_TIMING_MAX,
+>     >   +                                     ASPEED_PECI_MSG_TIMING_DEFAULT,
 > &priv->msg_timing);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,addr-timing",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_ADDR_TIMING_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_ADDR_TIMING_DEFAULT,
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,addr-timing",
+>     >   +                                     0, ASPEED_PECI_ADDR_TIMING_MAX,
+>     >   +                                     ASPEED_PECI_ADDR_TIMING_DEFAULT,
 > &priv->addr_timing);
 > 
 > Use the bus-frequency to replace the property above:
-> ??????? aspeed_peci_property_sanitize(priv->dev, "bus-frequency",
-> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_MIN,
+>         aspeed_peci_property_sanitize(priv->dev, "bus-frequency",
+>                                 ASPEED_PECI_BUS_FREQUENCY_MIN,
 > ASPEED_PECI_BUS_FREQUENCY_MAX,
-> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-
+>                                 ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-
 > >bus_freq);
 > 
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,rd-sampling-
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,rd-sampling-
 > point",
-> ??? >?? +???????????????????????????????????? 0,
+>     >   +                                     0,
 > ASPEED_PECI_RD_SAMPLING_POINT_MAX,
-> ??? >?? +????????????????????????????????????
+>     >   +                                    
 > ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT,
-> ??? >?? +???????????????????????????????????? &priv->rd_sampling_point);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "cmd-timeout-ms",
-> ??? >?? +???????????????????????????????????? 1,
+>     >   +                                     &priv->rd_sampling_point);
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "cmd-timeout-ms",
+>     >   +                                     1,
 > ASPEED_PECI_CMD_TIMEOUT_MS_MAX,
-> ??? >?? +????????????????????????????????????
+>     >   +                                    
 > ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT, &priv->cmd_timeout_ms);
-> ??? >?? +}
+>     >   +}
 > Add the function of automatically calculating the settings to adapt to the bus
 > frequency.
 
@@ -149,173 +149,173 @@ presenting this as what it actually is (a "custom" clock divider).
 Thanks
 -Iwona
 
-> ??????? static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)
-> ??????? {
-> ??????????????? unsigned long src_clk_rate;
-> ??????????????? int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;
-> ??????????????? u32 msg_timing, clk_div;
+>         static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)
+>         {
+>                 unsigned long src_clk_rate;
+>                 int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;
+>                 u32 msg_timing, clk_div;
 > 
-> ??????????????? src_clk_rate = clk_get_rate(priv->clk);
+>                 src_clk_rate = clk_get_rate(priv->clk);
 > 
-> ??????????????? /*
-> ???????????????? * PECI bus freq? = (source clk rate) / (4 *
+>                 /*
+>                  * PECI bus freq  = (source clk rate) / (4 *
 > (PECI04[15:8]*4+1) * (1 << PECI00[10:8]))
-> ???????????????? * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk
+>                  * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk
 > rate) / (4 * PECI bus freq )
-> ???????????????? */
-> ??????????????? clk_divisor = src_clk_rate / (4 * priv->bus_freq);
-> ??????????????? delta_value = clk_divisor;
-> ??????????????? /* Find the closest divisor for bus-frequency */
-> ??????????????? for (msg_timing = 1; msg_timing <= 255; msg_timing++)
-> ??????????????????????? for (clk_div = 0; clk_div < 7;
-> ??????????????????????????????? clk_div++) {
-> ??????????????????????????????? clk_divisor_tmp = (1 << clk_div) *
-> ??????????????????????????????????????????????? (msg_timing * 4 + 1);
-> ??????????????????????????????? delta_tmp = abs(clk_divisor -
+>                  */
+>                 clk_divisor = src_clk_rate / (4 * priv->bus_freq);
+>                 delta_value = clk_divisor;
+>                 /* Find the closest divisor for bus-frequency */
+>                 for (msg_timing = 1; msg_timing <= 255; msg_timing++)
+>                         for (clk_div = 0; clk_div < 7;
+>                                 clk_div++) {
+>                                 clk_divisor_tmp = (1 << clk_div) *
+>                                                 (msg_timing * 4 + 1);
+>                                 delta_tmp = abs(clk_divisor -
 > clk_divisor_tmp);
-> ??????????????????????????????? if (delta_tmp < delta_value) {
-> ??????????????????????????????????????? delta_value = delta_tmp;
-> ??????????????????????????????????????? priv->msg_timing = msg_timing;
-> ??????????????????????????????????????? priv->addr_timing = priv->msg_timing;
-> ??????????????????????????????????????? priv->clk_div = clk_div;
-> ??????????????????????????????? }
-> ??????????????????????? }
-> ??????? }
+>                                 if (delta_tmp < delta_value) {
+>                                         delta_value = delta_tmp;
+>                                         priv->msg_timing = msg_timing;
+>                                         priv->addr_timing = priv->msg_timing;
+>                                         priv->clk_div = clk_div;
+>                                 }
+>                         }
+>         }
 > 
-> ??? >?? +
-> ??? >?? +static struct peci_controller_ops aspeed_ops = {
-> ??? >?? +???????.xfer = aspeed_peci_xfer,
-> ??? >?? +};
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_reset_control_release(void *data)
-> ??? >?? +{
-> ??? >?? +???????reset_control_assert(data);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int devm_aspeed_peci_reset_control_deassert(struct device
+>     >   +
+>     >   +static struct peci_controller_ops aspeed_ops = {
+>     >   +       .xfer = aspeed_peci_xfer,
+>     >   +};
+>     >   +
+>     >   +static void aspeed_peci_reset_control_release(void *data)
+>     >   +{
+>     >   +       reset_control_assert(data);
+>     >   +}
+>     >   +
+>     >   +static int devm_aspeed_peci_reset_control_deassert(struct device
 > *dev, struct reset_control *rst)
-> ??? >?? +{
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????ret = reset_control_deassert(rst);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????return devm_add_action_or_reset(dev,
+>     >   +{
+>     >   +       int ret;
+>     >   +
+>     >   +       ret = reset_control_deassert(rst);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       return devm_add_action_or_reset(dev,
 > aspeed_peci_reset_control_release, rst);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_clk_release(void *data)
-> ??? >?? +{
-> ??? >?? +???????clk_disable_unprepare(data);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk
+>     >   +}
+>     >   +
+>     >   +static void aspeed_peci_clk_release(void *data)
+>     >   +{
+>     >   +       clk_disable_unprepare(data);
+>     >   +}
+>     >   +
+>     >   +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk
 > *clk)
-> ??? >?? +{
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????ret = clk_prepare_enable(clk);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????return devm_add_action_or_reset(dev, aspeed_peci_clk_release,
+>     >   +{
+>     >   +       int ret;
+>     >   +
+>     >   +       ret = clk_prepare_enable(clk);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       return devm_add_action_or_reset(dev, aspeed_peci_clk_release,
 > clk);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int aspeed_peci_probe(struct platform_device *pdev)
-> ??? >?? +{
-> ??? >?? +???????struct peci_controller *controller;
-> ??? >?? +???????struct aspeed_peci *priv;
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
-> ??? >?? +???????if (!priv)
-> ??? >?? +???????????????return -ENOMEM;
-> ??? >?? +
-> ??? >?? +???????priv->dev = &pdev->dev;
-> ??? >?? +???????dev_set_drvdata(priv->dev, priv);
-> ??? >?? +
-> ??? >?? +???????priv->base = devm_platform_ioremap_resource(pdev, 0);
-> ??? >?? +???????if (IS_ERR(priv->base))
-> ??? >?? +???????????????return PTR_ERR(priv->base);
-> ??? >?? +
-> ??? >?? +???????priv->irq = platform_get_irq(pdev, 0);
-> ??? >?? +???????if (!priv->irq)
-> ??? >?? +???????????????return priv->irq;
-> ??? >?? +
-> ??? >?? +???????ret = devm_request_irq(&pdev->dev, priv->irq,
+>     >   +}
+>     >   +
+>     >   +static int aspeed_peci_probe(struct platform_device *pdev)
+>     >   +{
+>     >   +       struct peci_controller *controller;
+>     >   +       struct aspeed_peci *priv;
+>     >   +       int ret;
+>     >   +
+>     >   +       priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+>     >   +       if (!priv)
+>     >   +               return -ENOMEM;
+>     >   +
+>     >   +       priv->dev = &pdev->dev;
+>     >   +       dev_set_drvdata(priv->dev, priv);
+>     >   +
+>     >   +       priv->base = devm_platform_ioremap_resource(pdev, 0);
+>     >   +       if (IS_ERR(priv->base))
+>     >   +               return PTR_ERR(priv->base);
+>     >   +
+>     >   +       priv->irq = platform_get_irq(pdev, 0);
+>     >   +       if (!priv->irq)
+>     >   +               return priv->irq;
+>     >   +
+>     >   +       ret = devm_request_irq(&pdev->dev, priv->irq,
 > aspeed_peci_irq_handler,
-> ??? >?? +????????????????????????????? 0, "peci-aspeed", priv);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????init_completion(&priv->xfer_complete);
-> ??? >?? +???????spin_lock_init(&priv->lock);
-> ??? >?? +
-> ??? >?? +???????priv->rst = devm_reset_control_get(&pdev->dev, NULL);
-> ??? >?? +???????if (IS_ERR(priv->rst))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->rst),
-> ??? >?? +??????????????????????????????????? "failed to get reset control\n");
-> ??? >?? +
-> ??? >?? +???????ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-
+>     >   +                              0, "peci-aspeed", priv);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       init_completion(&priv->xfer_complete);
+>     >   +       spin_lock_init(&priv->lock);
+>     >   +
+>     >   +       priv->rst = devm_reset_control_get(&pdev->dev, NULL);
+>     >   +       if (IS_ERR(priv->rst))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(priv->rst),
+>     >   +                                    "failed to get reset control\n");
+>     >   +
+>     >   +       ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-
 > >rst);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, "cannot deassert
+>     >   +       if (ret)
+>     >   +               return dev_err_probe(priv->dev, ret, "cannot deassert
 > reset control\n");
-> ??? >?? +
-> ??? >?? +???????priv->clk = devm_clk_get(priv->dev, NULL);
-> ??? >?? +???????if (IS_ERR(priv->clk))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->clk),
+>     >   +
+>     >   +       priv->clk = devm_clk_get(priv->dev, NULL);
+>     >   +       if (IS_ERR(priv->clk))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(priv->clk),
 > "failed to get clk\n");
-> ??? >?? +
-> ??? >?? +???????ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, "failed to enable
+>     >   +
+>     >   +       ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);
+>     >   +       if (ret)
+>     >   +               return dev_err_probe(priv->dev, ret, "failed to enable
 > clock\n");
-> ??? >?? +
-> ??? >?? +???????aspeed_peci_property_setup(priv);
+>     >   +
+>     >   +       aspeed_peci_property_setup(priv);
 > 
-> ??????? aspeed_peci_bus_freq_setup(priv);
+>         aspeed_peci_bus_freq_setup(priv);
 > 
-> ??? >?? +
-> ??? >?? +???????aspeed_peci_init_regs(priv);
-> ??? >?? +
-> ??? >?? +???????controller = devm_peci_controller_add(priv->dev, &aspeed_ops);
-> ??? >?? +???????if (IS_ERR(controller))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(controller),
-> ??? >?? +??????????????????????????????????? "failed to add aspeed peci
+>     >   +
+>     >   +       aspeed_peci_init_regs(priv);
+>     >   +
+>     >   +       controller = devm_peci_controller_add(priv->dev, &aspeed_ops);
+>     >   +       if (IS_ERR(controller))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(controller),
+>     >   +                                    "failed to add aspeed peci
 > controller\n");
-> ??? >?? +
-> ??? >?? +???????priv->controller = controller;
-> ??? >?? +
-> ??? >?? +???????return 0;
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static const struct of_device_id aspeed_peci_of_table[] = {
-> ??? >?? +???????{ .compatible = "aspeed,ast2400-peci", },
-> ??? >?? +???????{ .compatible = "aspeed,ast2500-peci", },
-> ??? >?? +???????{ .compatible = "aspeed,ast2600-peci", },
-> ??? >?? +???????{ }
-> ??? >?? +};
-> ??? >?? +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);
-> ??? >?? +
-> ??? >?? +static struct platform_driver aspeed_peci_driver = {
-> ??? >?? +???????.probe? = aspeed_peci_probe,
-> ??? >?? +???????.driver = {
-> ??? >?? +???????????????.name?????????? = "peci-aspeed",
-> ??? >?? +???????????????.of_match_table = aspeed_peci_of_table,
-> ??? >?? +???????},
-> ??? >?? +};
-> ??? >?? +module_platform_driver(aspeed_peci_driver);
-> ??? >?? +
-> ??? >?? +MODULE_AUTHOR("Ryan Chen <ryan_chen@aspeedtech.com>");
-> ??? >?? +MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
-> ??? >?? +MODULE_DESCRIPTION("ASPEED PECI driver");
-> ??? >?? +MODULE_LICENSE("GPL");
-> ??? >?? +MODULE_IMPORT_NS(PECI);
-> ??? >?? -- 
-> ??? >?? 2.31.1
+>     >   +
+>     >   +       priv->controller = controller;
+>     >   +
+>     >   +       return 0;
+>     >   +}
+>     >   +
+>     >   +static const struct of_device_id aspeed_peci_of_table[] = {
+>     >   +       { .compatible = "aspeed,ast2400-peci", },
+>     >   +       { .compatible = "aspeed,ast2500-peci", },
+>     >   +       { .compatible = "aspeed,ast2600-peci", },
+>     >   +       { }
+>     >   +};
+>     >   +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);
+>     >   +
+>     >   +static struct platform_driver aspeed_peci_driver = {
+>     >   +       .probe  = aspeed_peci_probe,
+>     >   +       .driver = {
+>     >   +               .name           = "peci-aspeed",
+>     >   +               .of_match_table = aspeed_peci_of_table,
+>     >   +       },
+>     >   +};
+>     >   +module_platform_driver(aspeed_peci_driver);
+>     >   +
+>     >   +MODULE_AUTHOR("Ryan Chen <ryan_chen@aspeedtech.com>");
+>     >   +MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
+>     >   +MODULE_DESCRIPTION("ASPEED PECI driver");
+>     >   +MODULE_LICENSE("GPL");
+>     >   +MODULE_IMPORT_NS(PECI);
+>     >   -- 
+>     >   2.31.1
 > 
 > 
 >
diff --git a/a/content_digest b/N2/content_digest
index c3e1dab..5345b82 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -2,9 +2,36 @@
  "ref\020211123140706.2945700-6-iwona.winiarska@intel.com\0"
  "ref\071D27F36-8BB7-4C30-99C5-CCA4F9A30945@aspeedtech.com\0"
  "From\0Winiarska, Iwona <iwona.winiarska@intel.com>\0"
- "Subject\0[PATCH v4 05/13] peci: Add peci-aspeed controller driver\0"
+ "Subject\0Re: [PATCH v4 05/13] peci: Add peci-aspeed controller driver\0"
  "Date\0Tue, 7 Dec 2021 18:09:36 +0000\0"
- "To\0linux-aspeed@lists.ozlabs.org\0"
+ "To\0billy_tsai@aspeedtech.com <billy_tsai@aspeedtech.com>"
+  gregkh@linuxfoundation.org <gregkh@linuxfoundation.org>
+  linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>
+ " openbmc@lists.ozlabs.org <openbmc@lists.ozlabs.org>\0"
+ "Cc\0linux-hwmon@vger.kernel.org <linux-hwmon@vger.kernel.org>"
+  devicetree@vger.kernel.org <devicetree@vger.kernel.org>
+  jae.hyun.yoo@linux.intel.com <jae.hyun.yoo@linux.intel.com>
+  Luck
+  Tony <tony.luck@intel.com>
+  arnd@arndb.de <arnd@arndb.de>
+  linux-aspeed@lists.ozlabs.org <linux-aspeed@lists.ozlabs.org>
+  corbet@lwn.net <corbet@lwn.net>
+  andrew@aj.id.au <andrew@aj.id.au>
+  rdunlap@infradead.org <rdunlap@infradead.org>
+  linux-doc@vger.kernel.org <linux-doc@vger.kernel.org>
+  pierre-louis.bossart@linux.intel.com <pierre-louis.bossart@linux.intel.com>
+  robh+dt@kernel.org <robh+dt@kernel.org>
+  Hansen
+  Dave <dave.hansen@intel.com>
+  jdelvare@suse.com <jdelvare@suse.com>
+  bp@alien8.de <bp@alien8.de>
+  linux-arm-kernel@lists.infradead.org <linux-arm-kernel@lists.infradead.org>
+  olof@lixom.net <olof@lixom.net>
+  Williams
+  Dan J <dan.j.williams@intel.com>
+  andriy.shevchenko@linux.intel.com <andriy.shevchenko@linux.intel.com>
+  linux@roeck-us.net <linux@roeck-us.net>
+ " zweiss@equinix.com <zweiss@equinix.com>\0"
  "\00:1\0"
  "b\0"
  "On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:\n"
@@ -14,82 +41,82 @@
  "> reply inline.\n"
  "> \n"
  "> On 2021/11/23, 10:11 PM, \"openbmc on behalf of Iwona Winiarska\"\n"
- "> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org?on behalf of\n"
- "> iwona.winiarska at intel.com> wrote:\n"
+ "> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org\302\240on behalf of\n"
+ "> iwona.winiarska@intel.com> wrote:\n"
  "> \n"
- "> ??? >?? From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\n"
  "> Add the define for the bus frequency\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MIN???????????2000\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT???????2000\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MAX???????????1000000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_MIN\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\2402000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT\302\240\302\240\302\240\302\240\302\240\302\240\302\2402000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_MAX\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\2401000000\n"
  "> \n"
- "> ?? >?? +struct aspeed_peci {\n"
- "> ??? >?? +???????struct peci_controller *controller;\n"
- "> ??? >?? +???????struct device *dev;\n"
- "> ??? >?? +???????void __iomem *base;\n"
- "> ??? >?? +???????struct clk *clk;\n"
- "> ??? >?? +???????struct reset_control *rst;\n"
- "> ??? >?? +???????int irq;\n"
- "> ??? >?? +???????spinlock_t lock; /* to sync completion status handling */\n"
- "> ??? >?? +???????struct completion xfer_complete;\n"
- "> ??? >?? +???????u32 status;\n"
- "> ??? >?? +???????u32 cmd_timeout_ms;\n"
- "> ??? >?? +???????u32 msg_timing;\n"
- "> ??? >?? +???????u32 addr_timing;\n"
- "> ??? >?? +???????u32 rd_sampling_point;\n"
- "> ??? >?? +???????u32 clk_div;\n"
+ "> \302\240\302\240 >\302\240\302\240 +struct aspeed_peci {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct peci_controller *controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct device *dev;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240void __iomem *base;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct clk *clk;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct reset_control *rst;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int irq;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240spinlock_t lock; /* to sync completion status handling */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct completion xfer_complete;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 status;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 cmd_timeout_ms;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 msg_timing;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 addr_timing;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 rd_sampling_point;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 clk_div;\n"
  "> \n"
  "> Add the paremeter to store the bus_freq from the dts property\n"
- "> ??????? u32 bus_freq;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 u32 bus_freq;\n"
  "> \n"
- "> ??? >?? +};\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_init_regs(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????u32 val;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_init_regs(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 val;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,\n"
  "> ASPEED_PECI_CLK_DIV_DEFAULT);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);\n"
- "> ??? >?? +???????/*\n"
- "> ??? >?? +??????? * Timing negotiation period setting.\n"
- "> ??? >?? +??????? * The unit of the programmed value is 4 times of PECI clock\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/*\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * Timing negotiation period setting.\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * The unit of the programmed value is 4 times of PECI clock\n"
  "> period.\n"
- "> ??? >?? +??????? */\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-\n"
  "> >msg_timing);\n"
- "> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-\n"
  "> >addr_timing);\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????/* Clear interrupts */\n"
- "> ??? >?? +???????val = readl(priv->base + ASPEED_PECI_INT_STS) |\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* Clear interrupts */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = readl(priv->base + ASPEED_PECI_INT_STS) |\n"
  "> ASPEED_PECI_INT_MASK;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_STS);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????/* Set timing negotiation mode and enable interrupts */\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_INT_STS);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* Set timing negotiation mode and enable interrupts */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,\n"
  "> ASPEED_PECI_1ST_BIT_OF_ADDR_NEGO);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_INT_MASK;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_CTRL);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_INT_MASK;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_INT_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-\n"
  "> >rd_sampling_point);\n"
- "> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-\n"
  "> >clk_div);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_EN;\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==\n"
  "> ASPEED_PECI_CMD_STS_ADDR_T_NEGO)\n"
- "> ??? >?? +???????????????aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_init_regs(priv);\n"
  "> \n"
  "> As long as the state is not idle, the controller need to reinitialize the PECI\n"
  "> register for solving the PECI controller hang.\n"
@@ -97,11 +124,11 @@
  "> the hang issue.\n"
  "> For backward compatible, I suggest to add the reset assert/de-assert in this\n"
  "> place.\n"
- "> ??????? if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {\n"
- "> ??????????????????????? reset_control_assert(priv->rst);\n"
- "> ??????????????????????? reset_control_deassert(priv->rst);\n"
- "> ??????????????????????? aspeed_peci_init_regs(priv);\n"
- "> ??????? }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 reset_control_assert(priv->rst);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 reset_control_deassert(priv->rst);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
  "\n"
  "Ack.\n"
  "\n"
@@ -109,42 +136,42 @@
  "\n"
  "(...)\n"
  "\n"
- "> ??? >?? +static void aspeed_peci_property_setup(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,clock-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_property_setup(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,clock-\n"
  "> divider\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_CLK_DIV_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_CLK_DIV_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_CLK_DIV_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_CLK_DIV_DEFAULT,\n"
  "> &priv->clk_div);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,msg-timing\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_MSG_TIMING_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_MSG_TIMING_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,msg-timing\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_MSG_TIMING_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_MSG_TIMING_DEFAULT,\n"
  "> &priv->msg_timing);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,addr-timing\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_ADDR_TIMING_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_ADDR_TIMING_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,addr-timing\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_ADDR_TIMING_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_ADDR_TIMING_DEFAULT,\n"
  "> &priv->addr_timing);\n"
  "> \n"
  "> Use the bus-frequency to replace the property above:\n"
- "> ??????? aspeed_peci_property_sanitize(priv->dev, \"bus-frequency\",\n"
- "> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_MIN,\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_property_sanitize(priv->dev, \"bus-frequency\",\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240ASPEED_PECI_BUS_FREQUENCY_MIN,\n"
  "> ASPEED_PECI_BUS_FREQUENCY_MAX,\n"
- "> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-\n"
  "> >bus_freq);\n"
  "> \n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,rd-sampling-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,rd-sampling-\n"
  "> point\",\n"
- "> ??? >?? +???????????????????????????????????? 0,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0,\n"
  "> ASPEED_PECI_RD_SAMPLING_POINT_MAX,\n"
- "> ??? >?? +????????????????????????????????????\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\n"
  "> ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT,\n"
- "> ??? >?? +???????????????????????????????????? &priv->rd_sampling_point);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"cmd-timeout-ms\",\n"
- "> ??? >?? +???????????????????????????????????? 1,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 &priv->rd_sampling_point);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"cmd-timeout-ms\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 1,\n"
  "> ASPEED_PECI_CMD_TIMEOUT_MS_MAX,\n"
- "> ??? >?? +????????????????????????????????????\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\n"
  "> ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT, &priv->cmd_timeout_ms);\n"
- "> ??? >?? +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
  "> Add the function of automatically calculating the settings to adapt to the bus\n"
  "> frequency.\n"
  "\n"
@@ -158,175 +185,175 @@
  "Thanks\n"
  "-Iwona\n"
  "\n"
- "> ??????? static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)\n"
- "> ??????? {\n"
- "> ??????????????? unsigned long src_clk_rate;\n"
- "> ??????????????? int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;\n"
- "> ??????????????? u32 msg_timing, clk_div;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 unsigned long src_clk_rate;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 u32 msg_timing, clk_div;\n"
  "> \n"
- "> ??????????????? src_clk_rate = clk_get_rate(priv->clk);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 src_clk_rate = clk_get_rate(priv->clk);\n"
  "> \n"
- "> ??????????????? /*\n"
- "> ???????????????? * PECI bus freq? = (source clk rate) / (4 *\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * PECI bus freq\302\240 = (source clk rate) / (4 *\n"
  "> (PECI04[15:8]*4+1) * (1 << PECI00[10:8]))\n"
- "> ???????????????? * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk\n"
  "> rate) / (4 * PECI bus freq )\n"
- "> ???????????????? */\n"
- "> ??????????????? clk_divisor = src_clk_rate / (4 * priv->bus_freq);\n"
- "> ??????????????? delta_value = clk_divisor;\n"
- "> ??????????????? /* Find the closest divisor for bus-frequency */\n"
- "> ??????????????? for (msg_timing = 1; msg_timing <= 255; msg_timing++)\n"
- "> ??????????????????????? for (clk_div = 0; clk_div < 7;\n"
- "> ??????????????????????????????? clk_div++) {\n"
- "> ??????????????????????????????? clk_divisor_tmp = (1 << clk_div) *\n"
- "> ??????????????????????????????????????????????? (msg_timing * 4 + 1);\n"
- "> ??????????????????????????????? delta_tmp = abs(clk_divisor -\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_divisor = src_clk_rate / (4 * priv->bus_freq);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_value = clk_divisor;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /* Find the closest divisor for bus-frequency */\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 for (msg_timing = 1; msg_timing <= 255; msg_timing++)\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 for (clk_div = 0; clk_div < 7;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_div++) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_divisor_tmp = (1 << clk_div) *\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (msg_timing * 4 + 1);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_tmp = abs(clk_divisor -\n"
  "> clk_divisor_tmp);\n"
- "> ??????????????????????????????? if (delta_tmp < delta_value) {\n"
- "> ??????????????????????????????????????? delta_value = delta_tmp;\n"
- "> ??????????????????????????????????????? priv->msg_timing = msg_timing;\n"
- "> ??????????????????????????????????????? priv->addr_timing = priv->msg_timing;\n"
- "> ??????????????????????????????????????? priv->clk_div = clk_div;\n"
- "> ??????????????????????????????? }\n"
- "> ??????????????????????? }\n"
- "> ??????? }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (delta_tmp < delta_value) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_value = delta_tmp;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->msg_timing = msg_timing;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->addr_timing = priv->msg_timing;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->clk_div = clk_div;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
  "> \n"
- "> ??? >?? +\n"
- "> ??? >?? +static struct peci_controller_ops aspeed_ops = {\n"
- "> ??? >?? +???????.xfer = aspeed_peci_xfer,\n"
- "> ??? >?? +};\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_reset_control_release(void *data)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????reset_control_assert(data);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int devm_aspeed_peci_reset_control_deassert(struct device\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static struct peci_controller_ops aspeed_ops = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.xfer = aspeed_peci_xfer,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_reset_control_release(void *data)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240reset_control_assert(data);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int devm_aspeed_peci_reset_control_deassert(struct device\n"
  "> *dev, struct reset_control *rst)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = reset_control_deassert(rst);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return devm_add_action_or_reset(dev,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = reset_control_deassert(rst);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return devm_add_action_or_reset(dev,\n"
  "> aspeed_peci_reset_control_release, rst);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_clk_release(void *data)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????clk_disable_unprepare(data);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_clk_release(void *data)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240clk_disable_unprepare(data);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk\n"
  "> *clk)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = clk_prepare_enable(clk);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return devm_add_action_or_reset(dev, aspeed_peci_clk_release,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = clk_prepare_enable(clk);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return devm_add_action_or_reset(dev, aspeed_peci_clk_release,\n"
  "> clk);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int aspeed_peci_probe(struct platform_device *pdev)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????struct peci_controller *controller;\n"
- "> ??? >?? +???????struct aspeed_peci *priv;\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);\n"
- "> ??? >?? +???????if (!priv)\n"
- "> ??? >?? +???????????????return -ENOMEM;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->dev = &pdev->dev;\n"
- "> ??? >?? +???????dev_set_drvdata(priv->dev, priv);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->base = devm_platform_ioremap_resource(pdev, 0);\n"
- "> ??? >?? +???????if (IS_ERR(priv->base))\n"
- "> ??? >?? +???????????????return PTR_ERR(priv->base);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->irq = platform_get_irq(pdev, 0);\n"
- "> ??? >?? +???????if (!priv->irq)\n"
- "> ??? >?? +???????????????return priv->irq;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_request_irq(&pdev->dev, priv->irq,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int aspeed_peci_probe(struct platform_device *pdev)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct peci_controller *controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct aspeed_peci *priv;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return -ENOMEM;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->dev = &pdev->dev;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240dev_set_drvdata(priv->dev, priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->base = devm_platform_ioremap_resource(pdev, 0);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->base))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return PTR_ERR(priv->base);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->irq = platform_get_irq(pdev, 0);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!priv->irq)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return priv->irq;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_request_irq(&pdev->dev, priv->irq,\n"
  "> aspeed_peci_irq_handler,\n"
- "> ??? >?? +????????????????????????????? 0, \"peci-aspeed\", priv);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????init_completion(&priv->xfer_complete);\n"
- "> ??? >?? +???????spin_lock_init(&priv->lock);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->rst = devm_reset_control_get(&pdev->dev, NULL);\n"
- "> ??? >?? +???????if (IS_ERR(priv->rst))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->rst),\n"
- "> ??? >?? +??????????????????????????????????? \"failed to get reset control\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, \"peci-aspeed\", priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240init_completion(&priv->xfer_complete);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240spin_lock_init(&priv->lock);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->rst = devm_reset_control_get(&pdev->dev, NULL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->rst))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(priv->rst),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 \"failed to get reset control\\n\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-\n"
  "> >rst);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, \"cannot deassert\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, ret, \"cannot deassert\n"
  "> reset control\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->clk = devm_clk_get(priv->dev, NULL);\n"
- "> ??? >?? +???????if (IS_ERR(priv->clk))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->clk),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->clk = devm_clk_get(priv->dev, NULL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->clk))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(priv->clk),\n"
  "> \"failed to get clk\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, \"failed to enable\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, ret, \"failed to enable\n"
  "> clock\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????aspeed_peci_property_setup(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_setup(priv);\n"
  "> \n"
- "> ??????? aspeed_peci_bus_freq_setup(priv);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_bus_freq_setup(priv);\n"
  "> \n"
- "> ??? >?? +\n"
- "> ??? >?? +???????aspeed_peci_init_regs(priv);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????controller = devm_peci_controller_add(priv->dev, &aspeed_ops);\n"
- "> ??? >?? +???????if (IS_ERR(controller))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(controller),\n"
- "> ??? >?? +??????????????????????????????????? \"failed to add aspeed peci\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240controller = devm_peci_controller_add(priv->dev, &aspeed_ops);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(controller))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(controller),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 \"failed to add aspeed peci\n"
  "> controller\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->controller = controller;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return 0;\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static const struct of_device_id aspeed_peci_of_table[] = {\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2400-peci\", },\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2500-peci\", },\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2600-peci\", },\n"
- "> ??? >?? +???????{ }\n"
- "> ??? >?? +};\n"
- "> ??? >?? +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);\n"
- "> ??? >?? +\n"
- "> ??? >?? +static struct platform_driver aspeed_peci_driver = {\n"
- "> ??? >?? +???????.probe? = aspeed_peci_probe,\n"
- "> ??? >?? +???????.driver = {\n"
- "> ??? >?? +???????????????.name?????????? = \"peci-aspeed\",\n"
- "> ??? >?? +???????????????.of_match_table = aspeed_peci_of_table,\n"
- "> ??? >?? +???????},\n"
- "> ??? >?? +};\n"
- "> ??? >?? +module_platform_driver(aspeed_peci_driver);\n"
- "> ??? >?? +\n"
- "> ??? >?? +MODULE_AUTHOR(\"Ryan Chen <ryan_chen@aspeedtech.com>\");\n"
- "> ??? >?? +MODULE_AUTHOR(\"Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\");\n"
- "> ??? >?? +MODULE_DESCRIPTION(\"ASPEED PECI driver\");\n"
- "> ??? >?? +MODULE_LICENSE(\"GPL\");\n"
- "> ??? >?? +MODULE_IMPORT_NS(PECI);\n"
- "> ??? >?? -- \n"
- "> ??? >?? 2.31.1\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->controller = controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return 0;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static const struct of_device_id aspeed_peci_of_table[] = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2400-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2500-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2600-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ }\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static struct platform_driver aspeed_peci_driver = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.probe\302\240 = aspeed_peci_probe,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.driver = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240.name\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 = \"peci-aspeed\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240.of_match_table = aspeed_peci_of_table,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240},\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +module_platform_driver(aspeed_peci_driver);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_AUTHOR(\"Ryan Chen <ryan_chen@aspeedtech.com>\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_AUTHOR(\"Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_DESCRIPTION(\"ASPEED PECI driver\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_LICENSE(\"GPL\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_IMPORT_NS(PECI);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 -- \n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 2.31.1\n"
  "> \n"
  "> \n"
  >
 
-d65c4b1428335a9cbd34f7be1f98049e617e1d21269286d21aa723f17ca92215
+ae141a1b30cb1a62ea809d46fb6f9ce6500e8bc181236c4b4b999b5b19efbffa

diff --git a/a/1.txt b/N3/1.txt
index e66cdfe..0cd9652 100644
--- a/a/1.txt
+++ b/N3/1.txt
@@ -5,82 +5,82 @@ On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:
 > reply inline.
 > 
 > On 2021/11/23, 10:11 PM, "openbmc on behalf of Iwona Winiarska"
-> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org?on behalf of
-> iwona.winiarska at intel.com> wrote:
+> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org on behalf of
+> iwona.winiarska@intel.com> wrote:
 > 
-> ??? >?? From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
+>     >   From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
 > Add the define for the bus frequency
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MIN???????????2000
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT???????2000
-> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MAX???????????1000000
+>         #define ASPEED_PECI_BUS_FREQUENCY_MIN           2000
+>         #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT       2000
+>         #define ASPEED_PECI_BUS_FREQUENCY_MAX           1000000
 > 
-> ?? >?? +struct aspeed_peci {
-> ??? >?? +???????struct peci_controller *controller;
-> ??? >?? +???????struct device *dev;
-> ??? >?? +???????void __iomem *base;
-> ??? >?? +???????struct clk *clk;
-> ??? >?? +???????struct reset_control *rst;
-> ??? >?? +???????int irq;
-> ??? >?? +???????spinlock_t lock; /* to sync completion status handling */
-> ??? >?? +???????struct completion xfer_complete;
-> ??? >?? +???????u32 status;
-> ??? >?? +???????u32 cmd_timeout_ms;
-> ??? >?? +???????u32 msg_timing;
-> ??? >?? +???????u32 addr_timing;
-> ??? >?? +???????u32 rd_sampling_point;
-> ??? >?? +???????u32 clk_div;
+>    >   +struct aspeed_peci {
+>     >   +       struct peci_controller *controller;
+>     >   +       struct device *dev;
+>     >   +       void __iomem *base;
+>     >   +       struct clk *clk;
+>     >   +       struct reset_control *rst;
+>     >   +       int irq;
+>     >   +       spinlock_t lock; /* to sync completion status handling */
+>     >   +       struct completion xfer_complete;
+>     >   +       u32 status;
+>     >   +       u32 cmd_timeout_ms;
+>     >   +       u32 msg_timing;
+>     >   +       u32 addr_timing;
+>     >   +       u32 rd_sampling_point;
+>     >   +       u32 clk_div;
 > 
 > Add the paremeter to store the bus_freq from the dts property
-> ??????? u32 bus_freq;
+>         u32 bus_freq;
 > 
-> ??? >?? +};
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_init_regs(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????u32 val;
-> ??? >?? +
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,
+>     >   +};
+>     >   +
+>     >   +static void aspeed_peci_init_regs(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       u32 val;
+>     >   +
+>     >   +       val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,
 > ASPEED_PECI_CLK_DIV_DEFAULT);
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);
-> ??? >?? +???????/*
-> ??? >?? +??????? * Timing negotiation period setting.
-> ??? >?? +??????? * The unit of the programmed value is 4 times of PECI clock
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
+>     >   +       writel(val, priv->base + ASPEED_PECI_CTRL);
+>     >   +       /*
+>     >   +        * Timing negotiation period setting.
+>     >   +        * The unit of the programmed value is 4 times of PECI clock
 > period.
-> ??? >?? +??????? */
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-
+>     >   +        */
+>     >   +       val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-
 > >msg_timing);
-> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-
+>     >   +       val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-
 > >addr_timing);
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);
-> ??? >?? +
-> ??? >?? +???????/* Clear interrupts */
-> ??? >?? +???????val = readl(priv->base + ASPEED_PECI_INT_STS) |
+>     >   +       writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);
+>     >   +
+>     >   +       /* Clear interrupts */
+>     >   +       val = readl(priv->base + ASPEED_PECI_INT_STS) |
 > ASPEED_PECI_INT_MASK;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_STS);
-> ??? >?? +
-> ??? >?? +???????/* Set timing negotiation mode and enable interrupts */
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,
+>     >   +       writel(val, priv->base + ASPEED_PECI_INT_STS);
+>     >   +
+>     >   +       /* Set timing negotiation mode and enable interrupts */
+>     >   +       val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,
 > ASPEED_PECI_1ST_BIT_OF_ADDR_NEGO);
-> ??? >?? +???????val |= ASPEED_PECI_INT_MASK;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_CTRL);
-> ??? >?? +
-> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-
+>     >   +       val |= ASPEED_PECI_INT_MASK;
+>     >   +       writel(val, priv->base + ASPEED_PECI_INT_CTRL);
+>     >   +
+>     >   +       val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-
 > >rd_sampling_point);
-> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-
+>     >   +       val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-
 > >clk_div);
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_EN;
-> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
-> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);
-> ??? >?? +
-> ??? >?? +???????if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_EN;
+>     >   +       val |= ASPEED_PECI_CTRL_PECI_CLK_EN;
+>     >   +       writel(val, priv->base + ASPEED_PECI_CTRL);
+>     >   +}
+>     >   +
+>     >   +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);
+>     >   +
+>     >   +       if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==
 > ASPEED_PECI_CMD_STS_ADDR_T_NEGO)
-> ??? >?? +???????????????aspeed_peci_init_regs(priv);
+>     >   +               aspeed_peci_init_regs(priv);
 > 
 > As long as the state is not idle, the controller need to reinitialize the PECI
 > register for solving the PECI controller hang.
@@ -88,11 +88,11 @@ On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:
 > the hang issue.
 > For backward compatible, I suggest to add the reset assert/de-assert in this
 > place.
-> ??????? if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {
-> ??????????????????????? reset_control_assert(priv->rst);
-> ??????????????????????? reset_control_deassert(priv->rst);
-> ??????????????????????? aspeed_peci_init_regs(priv);
-> ??????? }
+>         if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {
+>                         reset_control_assert(priv->rst);
+>                         reset_control_deassert(priv->rst);
+>                         aspeed_peci_init_regs(priv);
+>         }
 
 Ack.
 
@@ -100,42 +100,42 @@ Ack.
 
 (...)
 
-> ??? >?? +static void aspeed_peci_property_setup(struct aspeed_peci *priv)
-> ??? >?? +{
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,clock-
+>     >   +static void aspeed_peci_property_setup(struct aspeed_peci *priv)
+>     >   +{
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,clock-
 > divider",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_CLK_DIV_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_CLK_DIV_DEFAULT,
+>     >   +                                     0, ASPEED_PECI_CLK_DIV_MAX,
+>     >   +                                     ASPEED_PECI_CLK_DIV_DEFAULT,
 > &priv->clk_div);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,msg-timing",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_MSG_TIMING_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_MSG_TIMING_DEFAULT,
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,msg-timing",
+>     >   +                                     0, ASPEED_PECI_MSG_TIMING_MAX,
+>     >   +                                     ASPEED_PECI_MSG_TIMING_DEFAULT,
 > &priv->msg_timing);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,addr-timing",
-> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_ADDR_TIMING_MAX,
-> ??? >?? +???????????????????????????????????? ASPEED_PECI_ADDR_TIMING_DEFAULT,
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,addr-timing",
+>     >   +                                     0, ASPEED_PECI_ADDR_TIMING_MAX,
+>     >   +                                     ASPEED_PECI_ADDR_TIMING_DEFAULT,
 > &priv->addr_timing);
 > 
 > Use the bus-frequency to replace the property above:
-> ??????? aspeed_peci_property_sanitize(priv->dev, "bus-frequency",
-> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_MIN,
+>         aspeed_peci_property_sanitize(priv->dev, "bus-frequency",
+>                                 ASPEED_PECI_BUS_FREQUENCY_MIN,
 > ASPEED_PECI_BUS_FREQUENCY_MAX,
-> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-
+>                                 ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-
 > >bus_freq);
 > 
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "aspeed,rd-sampling-
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "aspeed,rd-sampling-
 > point",
-> ??? >?? +???????????????????????????????????? 0,
+>     >   +                                     0,
 > ASPEED_PECI_RD_SAMPLING_POINT_MAX,
-> ??? >?? +????????????????????????????????????
+>     >   +                                    
 > ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT,
-> ??? >?? +???????????????????????????????????? &priv->rd_sampling_point);
-> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, "cmd-timeout-ms",
-> ??? >?? +???????????????????????????????????? 1,
+>     >   +                                     &priv->rd_sampling_point);
+>     >   +       aspeed_peci_property_sanitize(priv->dev, "cmd-timeout-ms",
+>     >   +                                     1,
 > ASPEED_PECI_CMD_TIMEOUT_MS_MAX,
-> ??? >?? +????????????????????????????????????
+>     >   +                                    
 > ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT, &priv->cmd_timeout_ms);
-> ??? >?? +}
+>     >   +}
 > Add the function of automatically calculating the settings to adapt to the bus
 > frequency.
 
@@ -149,173 +149,178 @@ presenting this as what it actually is (a "custom" clock divider).
 Thanks
 -Iwona
 
-> ??????? static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)
-> ??????? {
-> ??????????????? unsigned long src_clk_rate;
-> ??????????????? int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;
-> ??????????????? u32 msg_timing, clk_div;
+>         static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)
+>         {
+>                 unsigned long src_clk_rate;
+>                 int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;
+>                 u32 msg_timing, clk_div;
 > 
-> ??????????????? src_clk_rate = clk_get_rate(priv->clk);
+>                 src_clk_rate = clk_get_rate(priv->clk);
 > 
-> ??????????????? /*
-> ???????????????? * PECI bus freq? = (source clk rate) / (4 *
+>                 /*
+>                  * PECI bus freq  = (source clk rate) / (4 *
 > (PECI04[15:8]*4+1) * (1 << PECI00[10:8]))
-> ???????????????? * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk
+>                  * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk
 > rate) / (4 * PECI bus freq )
-> ???????????????? */
-> ??????????????? clk_divisor = src_clk_rate / (4 * priv->bus_freq);
-> ??????????????? delta_value = clk_divisor;
-> ??????????????? /* Find the closest divisor for bus-frequency */
-> ??????????????? for (msg_timing = 1; msg_timing <= 255; msg_timing++)
-> ??????????????????????? for (clk_div = 0; clk_div < 7;
-> ??????????????????????????????? clk_div++) {
-> ??????????????????????????????? clk_divisor_tmp = (1 << clk_div) *
-> ??????????????????????????????????????????????? (msg_timing * 4 + 1);
-> ??????????????????????????????? delta_tmp = abs(clk_divisor -
+>                  */
+>                 clk_divisor = src_clk_rate / (4 * priv->bus_freq);
+>                 delta_value = clk_divisor;
+>                 /* Find the closest divisor for bus-frequency */
+>                 for (msg_timing = 1; msg_timing <= 255; msg_timing++)
+>                         for (clk_div = 0; clk_div < 7;
+>                                 clk_div++) {
+>                                 clk_divisor_tmp = (1 << clk_div) *
+>                                                 (msg_timing * 4 + 1);
+>                                 delta_tmp = abs(clk_divisor -
 > clk_divisor_tmp);
-> ??????????????????????????????? if (delta_tmp < delta_value) {
-> ??????????????????????????????????????? delta_value = delta_tmp;
-> ??????????????????????????????????????? priv->msg_timing = msg_timing;
-> ??????????????????????????????????????? priv->addr_timing = priv->msg_timing;
-> ??????????????????????????????????????? priv->clk_div = clk_div;
-> ??????????????????????????????? }
-> ??????????????????????? }
-> ??????? }
+>                                 if (delta_tmp < delta_value) {
+>                                         delta_value = delta_tmp;
+>                                         priv->msg_timing = msg_timing;
+>                                         priv->addr_timing = priv->msg_timing;
+>                                         priv->clk_div = clk_div;
+>                                 }
+>                         }
+>         }
 > 
-> ??? >?? +
-> ??? >?? +static struct peci_controller_ops aspeed_ops = {
-> ??? >?? +???????.xfer = aspeed_peci_xfer,
-> ??? >?? +};
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_reset_control_release(void *data)
-> ??? >?? +{
-> ??? >?? +???????reset_control_assert(data);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int devm_aspeed_peci_reset_control_deassert(struct device
+>     >   +
+>     >   +static struct peci_controller_ops aspeed_ops = {
+>     >   +       .xfer = aspeed_peci_xfer,
+>     >   +};
+>     >   +
+>     >   +static void aspeed_peci_reset_control_release(void *data)
+>     >   +{
+>     >   +       reset_control_assert(data);
+>     >   +}
+>     >   +
+>     >   +static int devm_aspeed_peci_reset_control_deassert(struct device
 > *dev, struct reset_control *rst)
-> ??? >?? +{
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????ret = reset_control_deassert(rst);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????return devm_add_action_or_reset(dev,
+>     >   +{
+>     >   +       int ret;
+>     >   +
+>     >   +       ret = reset_control_deassert(rst);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       return devm_add_action_or_reset(dev,
 > aspeed_peci_reset_control_release, rst);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static void aspeed_peci_clk_release(void *data)
-> ??? >?? +{
-> ??? >?? +???????clk_disable_unprepare(data);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk
+>     >   +}
+>     >   +
+>     >   +static void aspeed_peci_clk_release(void *data)
+>     >   +{
+>     >   +       clk_disable_unprepare(data);
+>     >   +}
+>     >   +
+>     >   +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk
 > *clk)
-> ??? >?? +{
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????ret = clk_prepare_enable(clk);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????return devm_add_action_or_reset(dev, aspeed_peci_clk_release,
+>     >   +{
+>     >   +       int ret;
+>     >   +
+>     >   +       ret = clk_prepare_enable(clk);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       return devm_add_action_or_reset(dev, aspeed_peci_clk_release,
 > clk);
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static int aspeed_peci_probe(struct platform_device *pdev)
-> ??? >?? +{
-> ??? >?? +???????struct peci_controller *controller;
-> ??? >?? +???????struct aspeed_peci *priv;
-> ??? >?? +???????int ret;
-> ??? >?? +
-> ??? >?? +???????priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
-> ??? >?? +???????if (!priv)
-> ??? >?? +???????????????return -ENOMEM;
-> ??? >?? +
-> ??? >?? +???????priv->dev = &pdev->dev;
-> ??? >?? +???????dev_set_drvdata(priv->dev, priv);
-> ??? >?? +
-> ??? >?? +???????priv->base = devm_platform_ioremap_resource(pdev, 0);
-> ??? >?? +???????if (IS_ERR(priv->base))
-> ??? >?? +???????????????return PTR_ERR(priv->base);
-> ??? >?? +
-> ??? >?? +???????priv->irq = platform_get_irq(pdev, 0);
-> ??? >?? +???????if (!priv->irq)
-> ??? >?? +???????????????return priv->irq;
-> ??? >?? +
-> ??? >?? +???????ret = devm_request_irq(&pdev->dev, priv->irq,
+>     >   +}
+>     >   +
+>     >   +static int aspeed_peci_probe(struct platform_device *pdev)
+>     >   +{
+>     >   +       struct peci_controller *controller;
+>     >   +       struct aspeed_peci *priv;
+>     >   +       int ret;
+>     >   +
+>     >   +       priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+>     >   +       if (!priv)
+>     >   +               return -ENOMEM;
+>     >   +
+>     >   +       priv->dev = &pdev->dev;
+>     >   +       dev_set_drvdata(priv->dev, priv);
+>     >   +
+>     >   +       priv->base = devm_platform_ioremap_resource(pdev, 0);
+>     >   +       if (IS_ERR(priv->base))
+>     >   +               return PTR_ERR(priv->base);
+>     >   +
+>     >   +       priv->irq = platform_get_irq(pdev, 0);
+>     >   +       if (!priv->irq)
+>     >   +               return priv->irq;
+>     >   +
+>     >   +       ret = devm_request_irq(&pdev->dev, priv->irq,
 > aspeed_peci_irq_handler,
-> ??? >?? +????????????????????????????? 0, "peci-aspeed", priv);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return ret;
-> ??? >?? +
-> ??? >?? +???????init_completion(&priv->xfer_complete);
-> ??? >?? +???????spin_lock_init(&priv->lock);
-> ??? >?? +
-> ??? >?? +???????priv->rst = devm_reset_control_get(&pdev->dev, NULL);
-> ??? >?? +???????if (IS_ERR(priv->rst))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->rst),
-> ??? >?? +??????????????????????????????????? "failed to get reset control\n");
-> ??? >?? +
-> ??? >?? +???????ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-
+>     >   +                              0, "peci-aspeed", priv);
+>     >   +       if (ret)
+>     >   +               return ret;
+>     >   +
+>     >   +       init_completion(&priv->xfer_complete);
+>     >   +       spin_lock_init(&priv->lock);
+>     >   +
+>     >   +       priv->rst = devm_reset_control_get(&pdev->dev, NULL);
+>     >   +       if (IS_ERR(priv->rst))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(priv->rst),
+>     >   +                                    "failed to get reset control\n");
+>     >   +
+>     >   +       ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-
 > >rst);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, "cannot deassert
+>     >   +       if (ret)
+>     >   +               return dev_err_probe(priv->dev, ret, "cannot deassert
 > reset control\n");
-> ??? >?? +
-> ??? >?? +???????priv->clk = devm_clk_get(priv->dev, NULL);
-> ??? >?? +???????if (IS_ERR(priv->clk))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->clk),
+>     >   +
+>     >   +       priv->clk = devm_clk_get(priv->dev, NULL);
+>     >   +       if (IS_ERR(priv->clk))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(priv->clk),
 > "failed to get clk\n");
-> ??? >?? +
-> ??? >?? +???????ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);
-> ??? >?? +???????if (ret)
-> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, "failed to enable
+>     >   +
+>     >   +       ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);
+>     >   +       if (ret)
+>     >   +               return dev_err_probe(priv->dev, ret, "failed to enable
 > clock\n");
-> ??? >?? +
-> ??? >?? +???????aspeed_peci_property_setup(priv);
+>     >   +
+>     >   +       aspeed_peci_property_setup(priv);
 > 
-> ??????? aspeed_peci_bus_freq_setup(priv);
+>         aspeed_peci_bus_freq_setup(priv);
 > 
-> ??? >?? +
-> ??? >?? +???????aspeed_peci_init_regs(priv);
-> ??? >?? +
-> ??? >?? +???????controller = devm_peci_controller_add(priv->dev, &aspeed_ops);
-> ??? >?? +???????if (IS_ERR(controller))
-> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(controller),
-> ??? >?? +??????????????????????????????????? "failed to add aspeed peci
+>     >   +
+>     >   +       aspeed_peci_init_regs(priv);
+>     >   +
+>     >   +       controller = devm_peci_controller_add(priv->dev, &aspeed_ops);
+>     >   +       if (IS_ERR(controller))
+>     >   +               return dev_err_probe(priv->dev, PTR_ERR(controller),
+>     >   +                                    "failed to add aspeed peci
 > controller\n");
-> ??? >?? +
-> ??? >?? +???????priv->controller = controller;
-> ??? >?? +
-> ??? >?? +???????return 0;
-> ??? >?? +}
-> ??? >?? +
-> ??? >?? +static const struct of_device_id aspeed_peci_of_table[] = {
-> ??? >?? +???????{ .compatible = "aspeed,ast2400-peci", },
-> ??? >?? +???????{ .compatible = "aspeed,ast2500-peci", },
-> ??? >?? +???????{ .compatible = "aspeed,ast2600-peci", },
-> ??? >?? +???????{ }
-> ??? >?? +};
-> ??? >?? +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);
-> ??? >?? +
-> ??? >?? +static struct platform_driver aspeed_peci_driver = {
-> ??? >?? +???????.probe? = aspeed_peci_probe,
-> ??? >?? +???????.driver = {
-> ??? >?? +???????????????.name?????????? = "peci-aspeed",
-> ??? >?? +???????????????.of_match_table = aspeed_peci_of_table,
-> ??? >?? +???????},
-> ??? >?? +};
-> ??? >?? +module_platform_driver(aspeed_peci_driver);
-> ??? >?? +
-> ??? >?? +MODULE_AUTHOR("Ryan Chen <ryan_chen@aspeedtech.com>");
-> ??? >?? +MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
-> ??? >?? +MODULE_DESCRIPTION("ASPEED PECI driver");
-> ??? >?? +MODULE_LICENSE("GPL");
-> ??? >?? +MODULE_IMPORT_NS(PECI);
-> ??? >?? -- 
-> ??? >?? 2.31.1
+>     >   +
+>     >   +       priv->controller = controller;
+>     >   +
+>     >   +       return 0;
+>     >   +}
+>     >   +
+>     >   +static const struct of_device_id aspeed_peci_of_table[] = {
+>     >   +       { .compatible = "aspeed,ast2400-peci", },
+>     >   +       { .compatible = "aspeed,ast2500-peci", },
+>     >   +       { .compatible = "aspeed,ast2600-peci", },
+>     >   +       { }
+>     >   +};
+>     >   +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);
+>     >   +
+>     >   +static struct platform_driver aspeed_peci_driver = {
+>     >   +       .probe  = aspeed_peci_probe,
+>     >   +       .driver = {
+>     >   +               .name           = "peci-aspeed",
+>     >   +               .of_match_table = aspeed_peci_of_table,
+>     >   +       },
+>     >   +};
+>     >   +module_platform_driver(aspeed_peci_driver);
+>     >   +
+>     >   +MODULE_AUTHOR("Ryan Chen <ryan_chen@aspeedtech.com>");
+>     >   +MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
+>     >   +MODULE_DESCRIPTION("ASPEED PECI driver");
+>     >   +MODULE_LICENSE("GPL");
+>     >   +MODULE_IMPORT_NS(PECI);
+>     >   -- 
+>     >   2.31.1
 > 
 > 
->
+> 
+
+_______________________________________________
+linux-arm-kernel mailing list
+linux-arm-kernel@lists.infradead.org
+http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/a/content_digest b/N3/content_digest
index c3e1dab..87ff150 100644
--- a/a/content_digest
+++ b/N3/content_digest
@@ -2,9 +2,36 @@
  "ref\020211123140706.2945700-6-iwona.winiarska@intel.com\0"
  "ref\071D27F36-8BB7-4C30-99C5-CCA4F9A30945@aspeedtech.com\0"
  "From\0Winiarska, Iwona <iwona.winiarska@intel.com>\0"
- "Subject\0[PATCH v4 05/13] peci: Add peci-aspeed controller driver\0"
+ "Subject\0Re: [PATCH v4 05/13] peci: Add peci-aspeed controller driver\0"
  "Date\0Tue, 7 Dec 2021 18:09:36 +0000\0"
- "To\0linux-aspeed@lists.ozlabs.org\0"
+ "To\0billy_tsai@aspeedtech.com <billy_tsai@aspeedtech.com>"
+  gregkh@linuxfoundation.org <gregkh@linuxfoundation.org>
+  linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>
+ " openbmc@lists.ozlabs.org <openbmc@lists.ozlabs.org>\0"
+ "Cc\0corbet@lwn.net <corbet@lwn.net>"
+  jae.hyun.yoo@linux.intel.com <jae.hyun.yoo@linux.intel.com>
+  linux-hwmon@vger.kernel.org <linux-hwmon@vger.kernel.org>
+  andrew@aj.id.au <andrew@aj.id.au>
+  Hansen
+  Dave <dave.hansen@intel.com>
+  Luck
+  Tony <tony.luck@intel.com>
+  jdelvare@suse.com <jdelvare@suse.com>
+  olof@lixom.net <olof@lixom.net>
+  rdunlap@infradead.org <rdunlap@infradead.org>
+  devicetree@vger.kernel.org <devicetree@vger.kernel.org>
+  linux-aspeed@lists.ozlabs.org <linux-aspeed@lists.ozlabs.org>
+  linux@roeck-us.net <linux@roeck-us.net>
+  arnd@arndb.de <arnd@arndb.de>
+  linux-doc@vger.kernel.org <linux-doc@vger.kernel.org>
+  robh+dt@kernel.org <robh+dt@kernel.org>
+  zweiss@equinix.com <zweiss@equinix.com>
+  bp@alien8.de <bp@alien8.de>
+  linux-arm-kernel@lists.infradead.org <linux-arm-kernel@lists.infradead.org>
+  pierre-louis.bossart@linux.intel.com <pierre-louis.bossart@linux.intel.com>
+  andriy.shevchenko@linux.intel.com <andriy.shevchenko@linux.intel.com>
+  Williams
+ " Dan J <dan.j.williams@intel.com>\0"
  "\00:1\0"
  "b\0"
  "On Mon, 2021-12-06 at 05:27 +0000, Billy Tsai wrote:\n"
@@ -14,82 +41,82 @@
  "> reply inline.\n"
  "> \n"
  "> On 2021/11/23, 10:11 PM, \"openbmc on behalf of Iwona Winiarska\"\n"
- "> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org?on behalf of\n"
- "> iwona.winiarska at intel.com> wrote:\n"
+ "> <openbmc-bounces+billy_tsai=aspeedtech.com@lists.ozlabs.org\302\240on behalf of\n"
+ "> iwona.winiarska@intel.com> wrote:\n"
  "> \n"
- "> ??? >?? From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\n"
  "> Add the define for the bus frequency\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MIN???????????2000\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT???????2000\n"
- "> ??????? #define ASPEED_PECI_BUS_FREQUENCY_MAX???????????1000000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_MIN\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\2402000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_DEFAULT\302\240\302\240\302\240\302\240\302\240\302\240\302\2402000\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 #define ASPEED_PECI_BUS_FREQUENCY_MAX\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\2401000000\n"
  "> \n"
- "> ?? >?? +struct aspeed_peci {\n"
- "> ??? >?? +???????struct peci_controller *controller;\n"
- "> ??? >?? +???????struct device *dev;\n"
- "> ??? >?? +???????void __iomem *base;\n"
- "> ??? >?? +???????struct clk *clk;\n"
- "> ??? >?? +???????struct reset_control *rst;\n"
- "> ??? >?? +???????int irq;\n"
- "> ??? >?? +???????spinlock_t lock; /* to sync completion status handling */\n"
- "> ??? >?? +???????struct completion xfer_complete;\n"
- "> ??? >?? +???????u32 status;\n"
- "> ??? >?? +???????u32 cmd_timeout_ms;\n"
- "> ??? >?? +???????u32 msg_timing;\n"
- "> ??? >?? +???????u32 addr_timing;\n"
- "> ??? >?? +???????u32 rd_sampling_point;\n"
- "> ??? >?? +???????u32 clk_div;\n"
+ "> \302\240\302\240 >\302\240\302\240 +struct aspeed_peci {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct peci_controller *controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct device *dev;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240void __iomem *base;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct clk *clk;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct reset_control *rst;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int irq;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240spinlock_t lock; /* to sync completion status handling */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct completion xfer_complete;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 status;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 cmd_timeout_ms;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 msg_timing;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 addr_timing;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 rd_sampling_point;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 clk_div;\n"
  "> \n"
  "> Add the paremeter to store the bus_freq from the dts property\n"
- "> ??????? u32 bus_freq;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 u32 bus_freq;\n"
  "> \n"
- "> ??? >?? +};\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_init_regs(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????u32 val;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_init_regs(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 val;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,\n"
  "> ASPEED_PECI_CLK_DIV_DEFAULT);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);\n"
- "> ??? >?? +???????/*\n"
- "> ??? >?? +??????? * Timing negotiation period setting.\n"
- "> ??? >?? +??????? * The unit of the programmed value is 4 times of PECI clock\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/*\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * Timing negotiation period setting.\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * The unit of the programmed value is 4 times of PECI clock\n"
  "> period.\n"
- "> ??? >?? +??????? */\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_T_NEGO_MSG_MASK, priv-\n"
  "> >msg_timing);\n"
- "> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= FIELD_PREP(ASPEED_PECI_T_NEGO_ADDR_MASK, priv-\n"
  "> >addr_timing);\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????/* Clear interrupts */\n"
- "> ??? >?? +???????val = readl(priv->base + ASPEED_PECI_INT_STS) |\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_TIMING_NEGOTIATION);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* Clear interrupts */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = readl(priv->base + ASPEED_PECI_INT_STS) |\n"
  "> ASPEED_PECI_INT_MASK;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_STS);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????/* Set timing negotiation mode and enable interrupts */\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_INT_STS);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* Set timing negotiation mode and enable interrupts */\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,\n"
  "> ASPEED_PECI_1ST_BIT_OF_ADDR_NEGO);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_INT_MASK;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_INT_CTRL);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_INT_MASK;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_INT_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val = FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, priv-\n"
  "> >rd_sampling_point);\n"
- "> ??? >?? +???????val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, priv-\n"
  "> >clk_div);\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_EN;\n"
- "> ??? >?? +???????val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
- "> ??? >?? +???????writel(val, priv->base + ASPEED_PECI_CTRL);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240val |= ASPEED_PECI_CTRL_PECI_CLK_EN;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240writel(val, priv->base + ASPEED_PECI_CTRL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static inline int aspeed_peci_check_idle(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240u32 cmd_sts = readl(priv->base + ASPEED_PECI_CMD);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts) ==\n"
  "> ASPEED_PECI_CMD_STS_ADDR_T_NEGO)\n"
- "> ??? >?? +???????????????aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_init_regs(priv);\n"
  "> \n"
  "> As long as the state is not idle, the controller need to reinitialize the PECI\n"
  "> register for solving the PECI controller hang.\n"
@@ -97,11 +124,11 @@
  "> the hang issue.\n"
  "> For backward compatible, I suggest to add the reset assert/de-assert in this\n"
  "> place.\n"
- "> ??????? if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {\n"
- "> ??????????????????????? reset_control_assert(priv->rst);\n"
- "> ??????????????????????? reset_control_deassert(priv->rst);\n"
- "> ??????????????????????? aspeed_peci_init_regs(priv);\n"
- "> ??????? }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (FIELD_GET(ASPEED_PECI_CMD_STS_MASK, cmd_sts)) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 reset_control_assert(priv->rst);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 reset_control_deassert(priv->rst);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
  "\n"
  "Ack.\n"
  "\n"
@@ -109,42 +136,42 @@
  "\n"
  "(...)\n"
  "\n"
- "> ??? >?? +static void aspeed_peci_property_setup(struct aspeed_peci *priv)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,clock-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_property_setup(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,clock-\n"
  "> divider\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_CLK_DIV_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_CLK_DIV_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_CLK_DIV_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_CLK_DIV_DEFAULT,\n"
  "> &priv->clk_div);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,msg-timing\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_MSG_TIMING_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_MSG_TIMING_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,msg-timing\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_MSG_TIMING_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_MSG_TIMING_DEFAULT,\n"
  "> &priv->msg_timing);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,addr-timing\",\n"
- "> ??? >?? +???????????????????????????????????? 0, ASPEED_PECI_ADDR_TIMING_MAX,\n"
- "> ??? >?? +???????????????????????????????????? ASPEED_PECI_ADDR_TIMING_DEFAULT,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,addr-timing\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, ASPEED_PECI_ADDR_TIMING_MAX,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 ASPEED_PECI_ADDR_TIMING_DEFAULT,\n"
  "> &priv->addr_timing);\n"
  "> \n"
  "> Use the bus-frequency to replace the property above:\n"
- "> ??????? aspeed_peci_property_sanitize(priv->dev, \"bus-frequency\",\n"
- "> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_MIN,\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_property_sanitize(priv->dev, \"bus-frequency\",\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240ASPEED_PECI_BUS_FREQUENCY_MIN,\n"
  "> ASPEED_PECI_BUS_FREQUENCY_MAX,\n"
- "> ????????????????????????????????ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240ASPEED_PECI_BUS_FREQUENCY_DEFAULT, &priv-\n"
  "> >bus_freq);\n"
  "> \n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"aspeed,rd-sampling-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"aspeed,rd-sampling-\n"
  "> point\",\n"
- "> ??? >?? +???????????????????????????????????? 0,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0,\n"
  "> ASPEED_PECI_RD_SAMPLING_POINT_MAX,\n"
- "> ??? >?? +????????????????????????????????????\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\n"
  "> ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT,\n"
- "> ??? >?? +???????????????????????????????????? &priv->rd_sampling_point);\n"
- "> ??? >?? +???????aspeed_peci_property_sanitize(priv->dev, \"cmd-timeout-ms\",\n"
- "> ??? >?? +???????????????????????????????????? 1,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 &priv->rd_sampling_point);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_sanitize(priv->dev, \"cmd-timeout-ms\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 1,\n"
  "> ASPEED_PECI_CMD_TIMEOUT_MS_MAX,\n"
- "> ??? >?? +????????????????????????????????????\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\n"
  "> ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT, &priv->cmd_timeout_ms);\n"
- "> ??? >?? +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
  "> Add the function of automatically calculating the settings to adapt to the bus\n"
  "> frequency.\n"
  "\n"
@@ -158,175 +185,180 @@
  "Thanks\n"
  "-Iwona\n"
  "\n"
- "> ??????? static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)\n"
- "> ??????? {\n"
- "> ??????????????? unsigned long src_clk_rate;\n"
- "> ??????????????? int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;\n"
- "> ??????????????? u32 msg_timing, clk_div;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 static void aspeed_peci_bus_freq_setup(struct aspeed_peci *priv)\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 unsigned long src_clk_rate;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 int delta_value, delta_tmp, clk_divisor, clk_divisor_tmp;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 u32 msg_timing, clk_div;\n"
  "> \n"
- "> ??????????????? src_clk_rate = clk_get_rate(priv->clk);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 src_clk_rate = clk_get_rate(priv->clk);\n"
  "> \n"
- "> ??????????????? /*\n"
- "> ???????????????? * PECI bus freq? = (source clk rate) / (4 *\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /*\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * PECI bus freq\302\240 = (source clk rate) / (4 *\n"
  "> (PECI04[15:8]*4+1) * (1 << PECI00[10:8]))\n"
- "> ???????????????? * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 * (1 << PECI00[10:8]) * (PECI04[15:8]*4+1) = (source clk\n"
  "> rate) / (4 * PECI bus freq )\n"
- "> ???????????????? */\n"
- "> ??????????????? clk_divisor = src_clk_rate / (4 * priv->bus_freq);\n"
- "> ??????????????? delta_value = clk_divisor;\n"
- "> ??????????????? /* Find the closest divisor for bus-frequency */\n"
- "> ??????????????? for (msg_timing = 1; msg_timing <= 255; msg_timing++)\n"
- "> ??????????????????????? for (clk_div = 0; clk_div < 7;\n"
- "> ??????????????????????????????? clk_div++) {\n"
- "> ??????????????????????????????? clk_divisor_tmp = (1 << clk_div) *\n"
- "> ??????????????????????????????????????????????? (msg_timing * 4 + 1);\n"
- "> ??????????????????????????????? delta_tmp = abs(clk_divisor -\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 */\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_divisor = src_clk_rate / (4 * priv->bus_freq);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_value = clk_divisor;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /* Find the closest divisor for bus-frequency */\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 for (msg_timing = 1; msg_timing <= 255; msg_timing++)\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 for (clk_div = 0; clk_div < 7;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_div++) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 clk_divisor_tmp = (1 << clk_div) *\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 (msg_timing * 4 + 1);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_tmp = abs(clk_divisor -\n"
  "> clk_divisor_tmp);\n"
- "> ??????????????????????????????? if (delta_tmp < delta_value) {\n"
- "> ??????????????????????????????????????? delta_value = delta_tmp;\n"
- "> ??????????????????????????????????????? priv->msg_timing = msg_timing;\n"
- "> ??????????????????????????????????????? priv->addr_timing = priv->msg_timing;\n"
- "> ??????????????????????????????????????? priv->clk_div = clk_div;\n"
- "> ??????????????????????????????? }\n"
- "> ??????????????????????? }\n"
- "> ??????? }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (delta_tmp < delta_value) {\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 delta_value = delta_tmp;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->msg_timing = msg_timing;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->addr_timing = priv->msg_timing;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 priv->clk_div = clk_div;\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 }\n"
  "> \n"
- "> ??? >?? +\n"
- "> ??? >?? +static struct peci_controller_ops aspeed_ops = {\n"
- "> ??? >?? +???????.xfer = aspeed_peci_xfer,\n"
- "> ??? >?? +};\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_reset_control_release(void *data)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????reset_control_assert(data);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int devm_aspeed_peci_reset_control_deassert(struct device\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static struct peci_controller_ops aspeed_ops = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.xfer = aspeed_peci_xfer,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_reset_control_release(void *data)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240reset_control_assert(data);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int devm_aspeed_peci_reset_control_deassert(struct device\n"
  "> *dev, struct reset_control *rst)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = reset_control_deassert(rst);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return devm_add_action_or_reset(dev,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = reset_control_deassert(rst);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return devm_add_action_or_reset(dev,\n"
  "> aspeed_peci_reset_control_release, rst);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static void aspeed_peci_clk_release(void *data)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????clk_disable_unprepare(data);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static void aspeed_peci_clk_release(void *data)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240clk_disable_unprepare(data);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int devm_aspeed_peci_clk_enable(struct device *dev, struct clk\n"
  "> *clk)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = clk_prepare_enable(clk);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return devm_add_action_or_reset(dev, aspeed_peci_clk_release,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = clk_prepare_enable(clk);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return devm_add_action_or_reset(dev, aspeed_peci_clk_release,\n"
  "> clk);\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static int aspeed_peci_probe(struct platform_device *pdev)\n"
- "> ??? >?? +{\n"
- "> ??? >?? +???????struct peci_controller *controller;\n"
- "> ??? >?? +???????struct aspeed_peci *priv;\n"
- "> ??? >?? +???????int ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);\n"
- "> ??? >?? +???????if (!priv)\n"
- "> ??? >?? +???????????????return -ENOMEM;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->dev = &pdev->dev;\n"
- "> ??? >?? +???????dev_set_drvdata(priv->dev, priv);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->base = devm_platform_ioremap_resource(pdev, 0);\n"
- "> ??? >?? +???????if (IS_ERR(priv->base))\n"
- "> ??? >?? +???????????????return PTR_ERR(priv->base);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->irq = platform_get_irq(pdev, 0);\n"
- "> ??? >?? +???????if (!priv->irq)\n"
- "> ??? >?? +???????????????return priv->irq;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_request_irq(&pdev->dev, priv->irq,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static int aspeed_peci_probe(struct platform_device *pdev)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +{\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct peci_controller *controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct aspeed_peci *priv;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!priv)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return -ENOMEM;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->dev = &pdev->dev;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240dev_set_drvdata(priv->dev, priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->base = devm_platform_ioremap_resource(pdev, 0);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->base))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return PTR_ERR(priv->base);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->irq = platform_get_irq(pdev, 0);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!priv->irq)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return priv->irq;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_request_irq(&pdev->dev, priv->irq,\n"
  "> aspeed_peci_irq_handler,\n"
- "> ??? >?? +????????????????????????????? 0, \"peci-aspeed\", priv);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return ret;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????init_completion(&priv->xfer_complete);\n"
- "> ??? >?? +???????spin_lock_init(&priv->lock);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->rst = devm_reset_control_get(&pdev->dev, NULL);\n"
- "> ??? >?? +???????if (IS_ERR(priv->rst))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->rst),\n"
- "> ??? >?? +??????????????????????????????????? \"failed to get reset control\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 0, \"peci-aspeed\", priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240init_completion(&priv->xfer_complete);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240spin_lock_init(&priv->lock);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->rst = devm_reset_control_get(&pdev->dev, NULL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->rst))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(priv->rst),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 \"failed to get reset control\\n\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_aspeed_peci_reset_control_deassert(priv->dev, priv-\n"
  "> >rst);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, \"cannot deassert\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, ret, \"cannot deassert\n"
  "> reset control\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->clk = devm_clk_get(priv->dev, NULL);\n"
- "> ??? >?? +???????if (IS_ERR(priv->clk))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(priv->clk),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->clk = devm_clk_get(priv->dev, NULL);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(priv->clk))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(priv->clk),\n"
  "> \"failed to get clk\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);\n"
- "> ??? >?? +???????if (ret)\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, ret, \"failed to enable\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = devm_aspeed_peci_clk_enable(priv->dev, priv->clk);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (ret)\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, ret, \"failed to enable\n"
  "> clock\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????aspeed_peci_property_setup(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_property_setup(priv);\n"
  "> \n"
- "> ??????? aspeed_peci_bus_freq_setup(priv);\n"
+ "> \302\240\302\240\302\240\302\240\302\240\302\240\302\240 aspeed_peci_bus_freq_setup(priv);\n"
  "> \n"
- "> ??? >?? +\n"
- "> ??? >?? +???????aspeed_peci_init_regs(priv);\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????controller = devm_peci_controller_add(priv->dev, &aspeed_ops);\n"
- "> ??? >?? +???????if (IS_ERR(controller))\n"
- "> ??? >?? +???????????????return dev_err_probe(priv->dev, PTR_ERR(controller),\n"
- "> ??? >?? +??????????????????????????????????? \"failed to add aspeed peci\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240aspeed_peci_init_regs(priv);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240controller = devm_peci_controller_add(priv->dev, &aspeed_ops);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (IS_ERR(controller))\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return dev_err_probe(priv->dev, PTR_ERR(controller),\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 \"failed to add aspeed peci\n"
  "> controller\\n\");\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????priv->controller = controller;\n"
- "> ??? >?? +\n"
- "> ??? >?? +???????return 0;\n"
- "> ??? >?? +}\n"
- "> ??? >?? +\n"
- "> ??? >?? +static const struct of_device_id aspeed_peci_of_table[] = {\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2400-peci\", },\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2500-peci\", },\n"
- "> ??? >?? +???????{ .compatible = \"aspeed,ast2600-peci\", },\n"
- "> ??? >?? +???????{ }\n"
- "> ??? >?? +};\n"
- "> ??? >?? +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);\n"
- "> ??? >?? +\n"
- "> ??? >?? +static struct platform_driver aspeed_peci_driver = {\n"
- "> ??? >?? +???????.probe? = aspeed_peci_probe,\n"
- "> ??? >?? +???????.driver = {\n"
- "> ??? >?? +???????????????.name?????????? = \"peci-aspeed\",\n"
- "> ??? >?? +???????????????.of_match_table = aspeed_peci_of_table,\n"
- "> ??? >?? +???????},\n"
- "> ??? >?? +};\n"
- "> ??? >?? +module_platform_driver(aspeed_peci_driver);\n"
- "> ??? >?? +\n"
- "> ??? >?? +MODULE_AUTHOR(\"Ryan Chen <ryan_chen@aspeedtech.com>\");\n"
- "> ??? >?? +MODULE_AUTHOR(\"Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\");\n"
- "> ??? >?? +MODULE_DESCRIPTION(\"ASPEED PECI driver\");\n"
- "> ??? >?? +MODULE_LICENSE(\"GPL\");\n"
- "> ??? >?? +MODULE_IMPORT_NS(PECI);\n"
- "> ??? >?? -- \n"
- "> ??? >?? 2.31.1\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240priv->controller = controller;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return 0;\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +}\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static const struct of_device_id aspeed_peci_of_table[] = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2400-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2500-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ .compatible = \"aspeed,ast2600-peci\", },\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240{ }\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +static struct platform_driver aspeed_peci_driver = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.probe\302\240 = aspeed_peci_probe,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240.driver = {\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240.name\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 = \"peci-aspeed\",\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240.of_match_table = aspeed_peci_of_table,\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\302\240\302\240\302\240\302\240\302\240\302\240\302\240},\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +};\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +module_platform_driver(aspeed_peci_driver);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_AUTHOR(\"Ryan Chen <ryan_chen@aspeedtech.com>\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_AUTHOR(\"Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_DESCRIPTION(\"ASPEED PECI driver\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_LICENSE(\"GPL\");\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 +MODULE_IMPORT_NS(PECI);\n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 -- \n"
+ "> \302\240\302\240\302\240 >\302\240\302\240 2.31.1\n"
  "> \n"
  "> \n"
- >
+ "> \n"
+ "\n"
+ "_______________________________________________\n"
+ "linux-arm-kernel mailing list\n"
+ "linux-arm-kernel@lists.infradead.org\n"
+ http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
 
-d65c4b1428335a9cbd34f7be1f98049e617e1d21269286d21aa723f17ca92215
+9ca6ede4260b2839eea82e3f375f606bd4bc8fc1d062679f1cef639768e0ab92

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.