From 3407c258bd5636705431c237132cede666087120 Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Wed, 4 Jul 2018 09:34:02 +0200 Subject: [PATCH] Remove deprecated patch --- ...ression_hangs_the_board_possible_fix.patch | 450 ------------------ 1 file changed, 450 deletions(-) delete mode 100644 patch/kernel/meson64-next/scpi_regression_hangs_the_board_possible_fix.patch diff --git a/patch/kernel/meson64-next/scpi_regression_hangs_the_board_possible_fix.patch b/patch/kernel/meson64-next/scpi_regression_hangs_the_board_possible_fix.patch deleted file mode 100644 index 483705df5..000000000 --- a/patch/kernel/meson64-next/scpi_regression_hangs_the_board_possible_fix.patch +++ /dev/null @@ -1,450 +0,0 @@ -diff --git a/drivers/firmware/arm_scpi.c b/drivers/firmware/arm_scpi.c -index 6d7a6c0a5..7da9f1b83 100644 ---- a/drivers/firmware/arm_scpi.c -+++ b/drivers/firmware/arm_scpi.c -@@ -28,7 +28,6 @@ - #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - - #include --#include - #include - #include - #include -@@ -46,32 +45,48 @@ - #include - #include - --#define CMD_ID_MASK GENMASK(6, 0) --#define CMD_TOKEN_ID_MASK GENMASK(15, 8) --#define CMD_DATA_SIZE_MASK GENMASK(24, 16) --#define CMD_LEGACY_DATA_SIZE_MASK GENMASK(28, 20) --#define PACK_SCPI_CMD(cmd_id, tx_sz) \ -- (FIELD_PREP(CMD_ID_MASK, cmd_id) | \ -- FIELD_PREP(CMD_DATA_SIZE_MASK, tx_sz)) --#define PACK_LEGACY_SCPI_CMD(cmd_id, tx_sz) \ -- (FIELD_PREP(CMD_ID_MASK, cmd_id) | \ -- FIELD_PREP(CMD_LEGACY_DATA_SIZE_MASK, tx_sz)) -- --#define CMD_SIZE(cmd) FIELD_GET(CMD_DATA_SIZE_MASK, cmd) --#define CMD_UNIQ_MASK (CMD_TOKEN_ID_MASK | CMD_ID_MASK) -+#define CMD_ID_SHIFT 0 -+#define CMD_ID_MASK 0x7f -+#define CMD_TOKEN_ID_SHIFT 8 -+#define CMD_TOKEN_ID_MASK 0xff -+#define CMD_DATA_SIZE_SHIFT 16 -+#define CMD_DATA_SIZE_MASK 0x1ff -+#define CMD_LEGACY_DATA_SIZE_SHIFT 20 -+#define CMD_LEGACY_DATA_SIZE_MASK 0x1ff -+#define PACK_SCPI_CMD(cmd_id, tx_sz) \ -+ ((((cmd_id) & CMD_ID_MASK) << CMD_ID_SHIFT) | \ -+ (((tx_sz) & CMD_DATA_SIZE_MASK) << CMD_DATA_SIZE_SHIFT)) -+#define ADD_SCPI_TOKEN(cmd, token) \ -+ ((cmd) |= (((token) & CMD_TOKEN_ID_MASK) << CMD_TOKEN_ID_SHIFT)) -+#define PACK_LEGACY_SCPI_CMD(cmd_id, tx_sz) \ -+ ((((cmd_id) & CMD_ID_MASK) << CMD_ID_SHIFT) | \ -+ (((tx_sz) & CMD_LEGACY_DATA_SIZE_MASK) << CMD_LEGACY_DATA_SIZE_SHIFT)) -+ -+#define CMD_SIZE(cmd) (((cmd) >> CMD_DATA_SIZE_SHIFT) & CMD_DATA_SIZE_MASK) -+#define CMD_LEGACY_SIZE(cmd) (((cmd) >> CMD_LEGACY_DATA_SIZE_SHIFT) & \ -+ CMD_LEGACY_DATA_SIZE_MASK) -+#define CMD_UNIQ_MASK (CMD_TOKEN_ID_MASK << CMD_TOKEN_ID_SHIFT | CMD_ID_MASK) - #define CMD_XTRACT_UNIQ(cmd) ((cmd) & CMD_UNIQ_MASK) - - #define SCPI_SLOT 0 - - #define MAX_DVFS_DOMAINS 8 - #define MAX_DVFS_OPPS 16 -- --#define PROTO_REV_MAJOR_MASK GENMASK(31, 16) --#define PROTO_REV_MINOR_MASK GENMASK(15, 0) -- --#define FW_REV_MAJOR_MASK GENMASK(31, 24) --#define FW_REV_MINOR_MASK GENMASK(23, 16) --#define FW_REV_PATCH_MASK GENMASK(15, 0) -+#define DVFS_LATENCY(hdr) (le32_to_cpu(hdr) >> 16) -+#define DVFS_OPP_COUNT(hdr) ((le32_to_cpu(hdr) >> 8) & 0xff) -+ -+#define PROTOCOL_REV_MINOR_BITS 16 -+#define PROTOCOL_REV_MINOR_MASK ((1U << PROTOCOL_REV_MINOR_BITS) - 1) -+#define PROTOCOL_REV_MAJOR(x) ((x) >> PROTOCOL_REV_MINOR_BITS) -+#define PROTOCOL_REV_MINOR(x) ((x) & PROTOCOL_REV_MINOR_MASK) -+ -+#define FW_REV_MAJOR_BITS 24 -+#define FW_REV_MINOR_BITS 16 -+#define FW_REV_PATCH_MASK ((1U << FW_REV_MINOR_BITS) - 1) -+#define FW_REV_MINOR_MASK ((1U << FW_REV_MAJOR_BITS) - 1) -+#define FW_REV_MAJOR(x) ((x) >> FW_REV_MAJOR_BITS) -+#define FW_REV_MINOR(x) (((x) & FW_REV_MINOR_MASK) >> FW_REV_MINOR_BITS) -+#define FW_REV_PATCH(x) ((x) & FW_REV_PATCH_MASK) - - #define MAX_RX_TIMEOUT (msecs_to_jiffies(30)) - -@@ -296,6 +311,10 @@ struct clk_get_info { - u8 name[20]; - } __packed; - -+struct clk_get_value { -+ __le32 rate; -+} __packed; -+ - struct clk_set_value { - __le16 id; - __le16 reserved; -@@ -309,9 +328,7 @@ struct legacy_clk_set_value { - } __packed; - - struct dvfs_info { -- u8 domain; -- u8 opp_count; -- __le16 latency; -+ __le32 header; - struct { - __le32 freq; - __le32 m_volt; -@@ -323,6 +340,10 @@ struct dvfs_set { - u8 index; - } __packed; - -+struct sensor_capabilities { -+ __le16 sensors; -+} __packed; -+ - struct _scpi_sensor_info { - __le16 sensor_id; - u8 class; -@@ -330,6 +351,11 @@ struct _scpi_sensor_info { - char name[20]; - }; - -+struct sensor_value { -+ __le32 lo_val; -+ __le32 hi_val; -+} __packed; -+ - struct dev_pstate_set { - __le16 dev_id; - u8 pstate; -@@ -393,20 +419,19 @@ static void scpi_process_cmd(struct scpi_chan *ch, u32 cmd) - unsigned int len; - - if (scpi_info->is_legacy) { -- struct legacy_scpi_shared_mem __iomem *mem = -- ch->rx_payload; -+ struct legacy_scpi_shared_mem *mem = ch->rx_payload; - - /* RX Length is not replied by the legacy Firmware */ - len = match->rx_len; - -- match->status = ioread32(&mem->status); -+ match->status = le32_to_cpu(mem->status); - memcpy_fromio(match->rx_buf, mem->payload, len); - } else { -- struct scpi_shared_mem __iomem *mem = ch->rx_payload; -+ struct scpi_shared_mem *mem = ch->rx_payload; - -- len = min_t(unsigned int, match->rx_len, CMD_SIZE(cmd)); -+ len = min(match->rx_len, CMD_SIZE(cmd)); - -- match->status = ioread32(&mem->status); -+ match->status = le32_to_cpu(mem->status); - memcpy_fromio(match->rx_buf, mem->payload, len); - } - -@@ -420,11 +445,11 @@ static void scpi_process_cmd(struct scpi_chan *ch, u32 cmd) - static void scpi_handle_remote_msg(struct mbox_client *c, void *msg) - { - struct scpi_chan *ch = container_of(c, struct scpi_chan, cl); -- struct scpi_shared_mem __iomem *mem = ch->rx_payload; -+ struct scpi_shared_mem *mem = ch->rx_payload; - u32 cmd = 0; - - if (!scpi_info->is_legacy) -- cmd = ioread32(&mem->command); -+ cmd = le32_to_cpu(mem->command); - - scpi_process_cmd(ch, cmd); - } -@@ -434,7 +459,7 @@ static void scpi_tx_prepare(struct mbox_client *c, void *msg) - unsigned long flags; - struct scpi_xfer *t = msg; - struct scpi_chan *ch = container_of(c, struct scpi_chan, cl); -- struct scpi_shared_mem __iomem *mem = ch->tx_payload; -+ struct scpi_shared_mem *mem = (struct scpi_shared_mem *)ch->tx_payload; - - if (t->tx_buf) { - if (scpi_info->is_legacy) -@@ -446,14 +471,14 @@ static void scpi_tx_prepare(struct mbox_client *c, void *msg) - if (t->rx_buf) { - if (!(++ch->token)) - ++ch->token; -- t->cmd |= FIELD_PREP(CMD_TOKEN_ID_MASK, ch->token); -+ ADD_SCPI_TOKEN(t->cmd, ch->token); - spin_lock_irqsave(&ch->rx_lock, flags); - list_add_tail(&t->node, &ch->rx_pending); - spin_unlock_irqrestore(&ch->rx_lock, flags); - } - - if (!scpi_info->is_legacy) -- iowrite32(t->cmd, &mem->command); -+ mem->command = cpu_to_le32(t->cmd); - } - - static struct scpi_xfer *get_scpi_xfer(struct scpi_chan *ch) -@@ -558,13 +583,13 @@ scpi_clk_get_range(u16 clk_id, unsigned long *min, unsigned long *max) - static unsigned long scpi_clk_get_val(u16 clk_id) - { - int ret; -- __le32 rate; -+ struct clk_get_value clk; - __le16 le_clk_id = cpu_to_le16(clk_id); - - ret = scpi_send_message(CMD_GET_CLOCK_VALUE, &le_clk_id, -- sizeof(le_clk_id), &rate, sizeof(rate)); -+ sizeof(le_clk_id), &clk, sizeof(clk)); - -- return ret ? ret : le32_to_cpu(rate); -+ return ret ? ret : le32_to_cpu(clk.rate); - } - - static int scpi_clk_set_val(u16 clk_id, unsigned long rate) -@@ -640,8 +665,8 @@ static struct scpi_dvfs_info *scpi_dvfs_get_info(u8 domain) - if (!info) - return ERR_PTR(-ENOMEM); - -- info->count = buf.opp_count; -- info->latency = le16_to_cpu(buf.latency) * 1000; /* uS to nS */ -+ info->count = DVFS_OPP_COUNT(buf.header); -+ info->latency = DVFS_LATENCY(buf.header) * 1000; /* uS to nS */ - - info->opps = kcalloc(info->count, sizeof(*opp), GFP_KERNEL); - if (!info->opps) { -@@ -688,6 +713,9 @@ static int scpi_dvfs_get_transition_latency(struct device *dev) - if (IS_ERR(info)) - return PTR_ERR(info); - -+ if (!info->latency) -+ return 0; -+ - return info->latency; - } - -@@ -718,13 +746,13 @@ static int scpi_dvfs_add_opps_to_device(struct device *dev) - - static int scpi_sensor_get_capability(u16 *sensors) - { -- __le16 cap; -+ struct sensor_capabilities cap_buf; - int ret; - -- ret = scpi_send_message(CMD_SENSOR_CAPABILITIES, NULL, 0, &cap, -- sizeof(cap)); -+ ret = scpi_send_message(CMD_SENSOR_CAPABILITIES, NULL, 0, &cap_buf, -+ sizeof(cap_buf)); - if (!ret) -- *sensors = le16_to_cpu(cap); -+ *sensors = le16_to_cpu(cap_buf.sensors); - - return ret; - } -@@ -748,19 +776,20 @@ static int scpi_sensor_get_info(u16 sensor_id, struct scpi_sensor_info *info) - static int scpi_sensor_get_value(u16 sensor, u64 *val) - { - __le16 id = cpu_to_le16(sensor); -- __le64 value; -+ struct sensor_value buf; - int ret; - - ret = scpi_send_message(CMD_SENSOR_VALUE, &id, sizeof(id), -- &value, sizeof(value)); -+ &buf, sizeof(buf)); - if (ret) - return ret; - - if (scpi_info->is_legacy) -- /* only 32-bits supported, upper 32 bits can be junk */ -- *val = le32_to_cpup((__le32 *)&value); -+ /* only 32-bits supported, hi_val can be junk */ -+ *val = le32_to_cpu(buf.lo_val); - else -- *val = le64_to_cpu(value); -+ *val = (u64)le32_to_cpu(buf.hi_val) << 32 | -+ le32_to_cpu(buf.lo_val); - - return 0; - } -@@ -835,9 +864,9 @@ static ssize_t protocol_version_show(struct device *dev, - { - struct scpi_drvinfo *scpi_info = dev_get_drvdata(dev); - -- return sprintf(buf, "%lu.%lu\n", -- FIELD_GET(PROTO_REV_MAJOR_MASK, scpi_info->protocol_version), -- FIELD_GET(PROTO_REV_MINOR_MASK, scpi_info->protocol_version)); -+ return sprintf(buf, "%d.%d\n", -+ PROTOCOL_REV_MAJOR(scpi_info->protocol_version), -+ PROTOCOL_REV_MINOR(scpi_info->protocol_version)); - } - static DEVICE_ATTR_RO(protocol_version); - -@@ -846,10 +875,10 @@ static ssize_t firmware_version_show(struct device *dev, - { - struct scpi_drvinfo *scpi_info = dev_get_drvdata(dev); - -- return sprintf(buf, "%lu.%lu.%lu\n", -- FIELD_GET(FW_REV_MAJOR_MASK, scpi_info->firmware_version), -- FIELD_GET(FW_REV_MINOR_MASK, scpi_info->firmware_version), -- FIELD_GET(FW_REV_PATCH_MASK, scpi_info->firmware_version)); -+ return sprintf(buf, "%d.%d.%d\n", -+ FW_REV_MAJOR(scpi_info->firmware_version), -+ FW_REV_MINOR(scpi_info->firmware_version), -+ FW_REV_PATCH(scpi_info->firmware_version)); - } - static DEVICE_ATTR_RO(firmware_version); - -@@ -860,26 +889,37 @@ static struct attribute *versions_attrs[] = { - }; - ATTRIBUTE_GROUPS(versions); - --static void scpi_free_channels(void *data) -+static void -+scpi_free_channels(struct device *dev, struct scpi_chan *pchan, int count) - { -- struct scpi_drvinfo *info = data; - int i; - -- for (i = 0; i < info->num_chans; i++) -- mbox_free_channel(info->channels[i].chan); -+ for (i = 0; i < count && pchan->chan; i++, pchan++) { -+ mbox_free_channel(pchan->chan); -+ devm_kfree(dev, pchan->xfers); -+ devm_iounmap(dev, pchan->rx_payload); -+ } - } - - static int scpi_remove(struct platform_device *pdev) - { - int i; -+ struct device *dev = &pdev->dev; - struct scpi_drvinfo *info = platform_get_drvdata(pdev); - - scpi_info = NULL; /* stop exporting SCPI ops through get_scpi_ops */ - -+ of_platform_depopulate(dev); -+ sysfs_remove_groups(&dev->kobj, versions_groups); -+ scpi_free_channels(dev, info->channels, info->num_chans); -+ platform_set_drvdata(pdev, NULL); -+ - for (i = 0; i < MAX_DVFS_DOMAINS && info->dvfs[i]; i++) { - kfree(info->dvfs[i]->opps); - kfree(info->dvfs[i]); - } -+ devm_kfree(dev, info->channels); -+ devm_kfree(dev, info); - - return 0; - } -@@ -912,6 +952,7 @@ static int scpi_probe(struct platform_device *pdev) - { - int count, idx, ret; - struct resource res; -+ struct scpi_chan *scpi_chan; - struct device *dev = &pdev->dev; - struct device_node *np = dev->of_node; - -@@ -928,19 +969,13 @@ static int scpi_probe(struct platform_device *pdev) - return -ENODEV; - } - -- scpi_info->channels = devm_kcalloc(dev, count, sizeof(struct scpi_chan), -- GFP_KERNEL); -- if (!scpi_info->channels) -+ scpi_chan = devm_kcalloc(dev, count, sizeof(*scpi_chan), GFP_KERNEL); -+ if (!scpi_chan) - return -ENOMEM; - -- ret = devm_add_action(dev, scpi_free_channels, scpi_info); -- if (ret) -- return ret; -- -- for (; scpi_info->num_chans < count; scpi_info->num_chans++) { -+ for (idx = 0; idx < count; idx++) { - resource_size_t size; -- int idx = scpi_info->num_chans; -- struct scpi_chan *pchan = scpi_info->channels + idx; -+ struct scpi_chan *pchan = scpi_chan + idx; - struct mbox_client *cl = &pchan->cl; - struct device_node *shmem = of_parse_phandle(np, "shmem", idx); - -@@ -948,14 +983,15 @@ static int scpi_probe(struct platform_device *pdev) - of_node_put(shmem); - if (ret) { - dev_err(dev, "failed to get SCPI payload mem resource\n"); -- return ret; -+ goto err; - } - - size = resource_size(&res); - pchan->rx_payload = devm_ioremap(dev, res.start, size); - if (!pchan->rx_payload) { - dev_err(dev, "failed to ioremap SCPI payload\n"); -- return -EADDRNOTAVAIL; -+ ret = -EADDRNOTAVAIL; -+ goto err; - } - pchan->tx_payload = pchan->rx_payload + (size >> 1); - -@@ -981,9 +1017,14 @@ static int scpi_probe(struct platform_device *pdev) - dev_err(dev, "failed to get channel%d err %d\n", - idx, ret); - } -+err: -+ scpi_free_channels(dev, scpi_chan, idx); -+ scpi_info = NULL; - return ret; - } - -+ scpi_info->channels = scpi_chan; -+ scpi_info->num_chans = count; - scpi_info->commands = scpi_std_commands; - - platform_set_drvdata(pdev, scpi_info); -@@ -1002,31 +1043,23 @@ static int scpi_probe(struct platform_device *pdev) - ret = scpi_init_versions(scpi_info); - if (ret) { - dev_err(dev, "incorrect or no SCP firmware found\n"); -+ scpi_remove(pdev); - return ret; - } - -- if (scpi_info->is_legacy && !scpi_info->protocol_version && -- !scpi_info->firmware_version) -- dev_info(dev, "SCP Protocol legacy pre-1.0 firmware\n"); -- else -- dev_info(dev, "SCP Protocol %lu.%lu Firmware %lu.%lu.%lu version\n", -- FIELD_GET(PROTO_REV_MAJOR_MASK, -- scpi_info->protocol_version), -- FIELD_GET(PROTO_REV_MINOR_MASK, -- scpi_info->protocol_version), -- FIELD_GET(FW_REV_MAJOR_MASK, -- scpi_info->firmware_version), -- FIELD_GET(FW_REV_MINOR_MASK, -- scpi_info->firmware_version), -- FIELD_GET(FW_REV_PATCH_MASK, -- scpi_info->firmware_version)); -+ _dev_info(dev, "SCP Protocol %d.%d Firmware %d.%d.%d version\n", -+ PROTOCOL_REV_MAJOR(scpi_info->protocol_version), -+ PROTOCOL_REV_MINOR(scpi_info->protocol_version), -+ FW_REV_MAJOR(scpi_info->firmware_version), -+ FW_REV_MINOR(scpi_info->firmware_version), -+ FW_REV_PATCH(scpi_info->firmware_version)); - scpi_info->scpi_ops = &scpi_ops; - -- ret = devm_device_add_groups(dev, versions_groups); -+ ret = sysfs_create_groups(&dev->kobj, versions_groups); - if (ret) - dev_err(dev, "unable to create sysfs version group\n"); - -- return devm_of_platform_populate(dev); -+ return of_platform_populate(dev->of_node, NULL, NULL, dev); - } - - static const struct of_device_id scpi_of_match[] = {