* [PATCH 0/2] Add support for newer macs in applesmc
@ 2025-03-12 12:30 Subu Dwevedi
2025-03-12 12:30 ` [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs Subu Dwevedi
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Subu Dwevedi @ 2025-03-12 12:30 UTC (permalink / raw)
Cc: Subu Dwevedi, Henrik Rydberg, Jean Delvare, Guenter Roeck,
linux-hwmon, linux-kernel
This patch series adds MMIO support for newer Macs in the AppleSMC driver
and enables fan control for these models.
Patch 1 introduces MMIO-based access for AppleSMC on modern Macs, replacing
the older I/O port-based access where applicable.
Patch 2 builds on this by implementing fan control using the new MMIO method.
Subu Dwevedi (2):
hwmon/applesmc: add MMIO for newer macs
hwmon/applesmc: add fan support for newer macs
drivers/hwmon/applesmc.c | 347 +++++++++++++++++++++++++++++++++++----
1 file changed, 314 insertions(+), 33 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs
2025-03-12 12:30 [PATCH 0/2] Add support for newer macs in applesmc Subu Dwevedi
@ 2025-03-12 12:30 ` Subu Dwevedi
2025-03-13 18:32 ` kernel test robot
` (2 more replies)
2025-03-12 12:30 ` [PATCH 2/2] hwmon/applesmc: add fan support " Subu Dwevedi
2025-03-12 12:55 ` [PATCH 0/2] Add support for newer macs in applesmc Guenter Roeck
2 siblings, 3 replies; 9+ messages in thread
From: Subu Dwevedi @ 2025-03-12 12:30 UTC (permalink / raw)
Cc: Subu Dwevedi, Henrik Rydberg, Jean Delvare, Guenter Roeck,
linux-hwmon, linux-kernel
Add basic MMIO support to AppleSMC for T2 Macs,
enabling it only when supported.
This replaces the legacy port-based method for
key reading, writing, and metadata operations
(retrieving keys by index and obtaining key information)
Signed-off-by: Subu Dwevedi <messigoatcr7nop@gmail.com>
---
drivers/hwmon/applesmc.c | 223 +++++++++++++++++++++++++++++++++++++--
1 file changed, 213 insertions(+), 10 deletions(-)
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
index fc6d6a9053ce..1be4a4026a6e 100644
--- a/drivers/hwmon/applesmc.c
+++ b/drivers/hwmon/applesmc.c
@@ -17,6 +17,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/acpi.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/input.h>
@@ -142,7 +143,9 @@ static struct platform_device *pdev;
static s16 rest_x;
static s16 rest_y;
static u8 backlight_state[2];
-
+static u8 *__iomem mmio_base;
+static bool is_mmio;
+static u32 mmio_base_addr, mmio_base_size;
static struct device *hwmon_dev;
static struct input_dev *applesmc_idev;
@@ -245,7 +248,108 @@ static int send_argument(const char *key)
return 0;
}
-static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
+/*
+ * MMIO Impliementation
+ */
+
+static void clearArbitration(void)
+{
+ if (ioread8(mmio_base + 0x4005))
+ return iowrite8(0, mmio_base + 0x4005);
+}
+static int waitForKeyDone(void)
+{
+ int i = 1000; //millisecounds
+ u8 status;
+
+ while (i) {
+ msleep(1);
+ i--;
+
+ status = ioread8(mmio_base + 0x4005);
+ if (status & 0x20)
+ return 0;
+ }
+
+ return -EIO;
+}
+static int mmio_read_smc(u8 cmd, const char *key, u8 *buffer, u64 len)
+{
+ u8 i, u = 0;
+
+ clearArbitration();
+ iowrite32(*((u32 *)key), mmio_base + 0x78);
+ iowrite8(0x15, mmio_base + 0x7E);
+ iowrite8(cmd, mmio_base + 0x7F);
+
+ if (waitForKeyDone())
+ return -EIO;
+
+ i = ioread8(mmio_base + 0x7F);
+ if (i)
+ return -EIO;
+ if (cmd == APPLESMC_READ_CMD) {
+ i = ioread8(mmio_base + 0x7D);
+ if (i > len || !i)
+ return -EIO;
+
+ while (u < i) {
+ if ((i - u) < 4) {
+ if ((i - u) < 2) {
+ buffer[u] = ioread8(mmio_base + u);
+ u += 1;
+ } else {
+ *(u16 *)&buffer[u] = ioread16(mmio_base + u);
+ u += 2;
+ }
+ } else {
+ *(u32 *)&buffer[u] = ioread32(mmio_base + u);
+ u += 4;
+ }
+ }
+ } else
+ memcpy_fromio(buffer, mmio_base + 0x0, len);
+
+ return 0;
+}
+static int mmio_write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len)
+{
+ u8 i = 0;
+
+ clearArbitration();
+ iowrite32(*((u32 *)key), mmio_base + 0x78);
+ while (i < len) {
+ if (len - i < 4) {
+ if (len - i < 2) {
+ iowrite8(buffer[i], mmio_base + i);
+ i += 1;
+ } else {
+ iowrite16(*(u16 *)&buffer[i], mmio_base + i);
+ i += 2;
+ }
+ } else {
+ iowrite32(*(u32 *)&buffer[i], mmio_base + i);
+ i += 4;
+ }
+ }
+ iowrite8(len, mmio_base + 0x7D);
+ iowrite8(0x15, mmio_base + 0x7E);
+ iowrite8(cmd, mmio_base + 0x7F);
+ if (waitForKeyDone())
+ return -EIO;
+
+ i = ioread8(mmio_base + 0x7F);
+ if (i)
+ return -EIO;
+
+ return 0;
+}
+
+/*
+ * Port Based IO implementation
+ *
+ */
+static int port_read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
{
u8 status, data = 0;
int i;
@@ -289,7 +393,7 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
return wait_status(0, SMC_STATUS_BUSY);
}
-static int write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len)
+static int port_write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len)
{
int i;
int ret;
@@ -317,7 +421,23 @@ static int write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len)
return wait_status(0, SMC_STATUS_BUSY);
}
+static int write_smc(u8 cmd, const char *key, const u8 *buffer,
+ u8 len)
+{
+ if (is_mmio)
+ return mmio_write_smc(cmd, key, buffer, len);
+
+ return port_write_smc(cmd, key, buffer, len);
+}
+static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
+{
+ if (is_mmio)
+ return mmio_read_smc(cmd, key, buffer, len);
+
+
+ return port_read_smc(cmd, key, buffer, len);
+}
static int read_register_count(unsigned int *count)
{
__be32 be;
@@ -379,18 +499,39 @@ static const struct applesmc_entry *applesmc_get_entry_by_index(int index)
if (cache->valid)
goto out;
+
be = cpu_to_be32(index);
- ret = read_smc(APPLESMC_GET_KEY_BY_INDEX_CMD, (u8 *)&be, key, 4);
- if (ret)
- goto out;
- ret = read_smc(APPLESMC_GET_KEY_TYPE_CMD, key, info, 6);
+ ret = read_smc(APPLESMC_GET_KEY_BY_INDEX_CMD, (const char *) &be, (u8 *) key, 4);
if (ret)
goto out;
+ if (is_mmio) {
+ clearArbitration();
+ iowrite32(*((u32 *)key), mmio_base + 0x78);
+ iowrite8(0, mmio_base + 0x7E);
+ iowrite8(APPLESMC_GET_KEY_TYPE_CMD, mmio_base + 0x7F);
+ ret = waitForKeyDone();
+ if (ret)
+ goto out;
+
+ ret = ioread8(mmio_base + 0x7F);
+ if (ret)
+ goto out;
+
+ *(u32 *)cache->type = ioread32(mmio_base + 0x7F);
+ cache->len = ioread8(mmio_base + 5);
+ cache->flags = ioread8(mmio_base + 6);
+
+ } else {
+ ret = read_smc(APPLESMC_GET_KEY_TYPE_CMD, key, info, 6);
+ if (ret)
+ goto out;
+
+ cache->len = info[0];
+ memcpy(cache->type, &info[1], 4);
+ cache->flags = info[5];
+ }
memcpy(cache->key, key, 4);
- cache->len = info[0];
- memcpy(cache->type, &info[1], 4);
- cache->flags = info[5];
cache->valid = true;
out:
@@ -558,7 +699,64 @@ static int applesmc_init_index(struct applesmc_registers *s)
return 0;
}
+/*
+ * applesmc_init_mmio_try - Try to initialize MMIO
+ */
+static int applesmc_init_mmio_try(void)
+{
+ u8 ldkn_version;
+ acpi_status status;
+ struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+ struct acpi_device *adev;
+ struct acpi_resource *res;
+
+ adev = acpi_dev_get_first_match_dev("APP0001", NULL, -1);
+ if (!adev)
+ return -ENXIO;
+
+ status = acpi_get_current_resources(adev->handle, &buffer);
+ if (ACPI_FAILURE(status))
+ return -ENXIO;
+
+ res = buffer.pointer;
+ while (res->type != ACPI_RESOURCE_TYPE_END_TAG) {
+ if (res->type == ACPI_RESOURCE_TYPE_FIXED_MEMORY32) {
+ if (res->data.fixed_memory32.address_length < 0x4006)
+ return -ENXIO;
+
+ mmio_base_addr = res->data.fixed_memory32.address;
+ mmio_base_size = res->data.fixed_memory32.address_length;
+ is_mmio = true;
+ break;
+ }
+ res = ACPI_NEXT_RESOURCE(res);
+ }
+ kfree(buffer.pointer);
+ acpi_dev_put(adev);
+
+ if (!is_mmio)
+ return -ENXIO;
+
+ mmio_base = ioremap(mmio_base_addr, mmio_base_size);
+
+ if (!mmio_base)
+ return -ENXIO;
+ if (ioread8(mmio_base + 0x4005) == 0xFF)
+ goto out;
+
+ if (read_smc(APPLESMC_READ_CMD, "LDKN", &ldkn_version, 1))
+ goto out;
+
+ if (ldkn_version < 2)
+ goto out;
+
+ return 0;
+out:
+ pr_warn("cannot enable MMIO will use PMIO\n");
+ iounmap(mmio_base);
+ return -ENXIO;
+}
/*
* applesmc_init_smcreg_try - Try to initialize register cache. Idempotent.
*/
@@ -1321,6 +1519,8 @@ static int __init applesmc_init(void)
ret = -ENXIO;
goto out;
}
+ if (applesmc_init_mmio_try())
+ is_mmio = false;
ret = platform_driver_register(&applesmc_driver);
if (ret)
@@ -1407,6 +1607,9 @@ static void __exit applesmc_exit(void)
applesmc_destroy_smcreg();
platform_device_unregister(pdev);
platform_driver_unregister(&applesmc_driver);
+ if (is_mmio)
+ iounmap(mmio_base);
+
release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] hwmon/applesmc: add fan support for newer macs
2025-03-12 12:30 [PATCH 0/2] Add support for newer macs in applesmc Subu Dwevedi
2025-03-12 12:30 ` [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs Subu Dwevedi
@ 2025-03-12 12:30 ` Subu Dwevedi
2025-03-13 14:53 ` kernel test robot
2025-03-12 12:55 ` [PATCH 0/2] Add support for newer macs in applesmc Guenter Roeck
2 siblings, 1 reply; 9+ messages in thread
From: Subu Dwevedi @ 2025-03-12 12:30 UTC (permalink / raw)
Cc: Subu Dwevedi, Henrik Rydberg, Jean Delvare, Guenter Roeck,
linux-hwmon, linux-kernel
Newer Mac models have transitioned
the fan speed values from short to float.
Additionally, the fan manual
control mechanism (fan_manual) have changed from u16 to u8
Signed-off-by: Subu Dwevedi <messigoatcr7nop@gmail.com>
---
drivers/hwmon/applesmc.c | 124 +++++++++++++++++++++++++++++++--------
1 file changed, 101 insertions(+), 23 deletions(-)
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
index 1be4a4026a6e..9157f5978ee7 100644
--- a/drivers/hwmon/applesmc.c
+++ b/drivers/hwmon/applesmc.c
@@ -71,10 +71,12 @@
#define MOTION_SENSOR_KEY "MOCN" /* r/w ui16 */
#define FANS_COUNT "FNum" /* r-o ui8 */
+#define FANS_MANUAL_FMT "F%dMd" /* r-w ui8*/
#define FANS_MANUAL "FS! " /* r-w ui16 */
#define FAN_ID_FMT "F%dID" /* r-o char[16] */
#define TEMP_SENSOR_TYPE "sp78"
+#define FLOAT_TYPE "flt "
/* List of keys used to read/write fan speeds */
static const char *const fan_speed_fmt[] = {
@@ -145,6 +147,8 @@ static s16 rest_y;
static u8 backlight_state[2];
static u8 *__iomem mmio_base;
static bool is_mmio;
+static bool is_fan_manual_fmt;
+static bool is_fan_speed_float;
static u32 mmio_base_addr, mmio_base_size;
static struct device *hwmon_dev;
static struct input_dev *applesmc_idev;
@@ -652,6 +656,50 @@ static int applesmc_read_s16(const char *key, s16 *value)
return 0;
}
+/*
+ * applesmc_float_to_u32 - Retrieve the integral part of a float.
+ * This is needed because Apple made fans use float values in the T2.
+ * The fractional point is not significantly useful though, and the integral
+ */
+static inline u32 applesmc_float_to_u32(u32 from)
+{
+ u8 sign = from >> 31;
+ s32 exp = ((from >> 23) & 0xFF) - 0x7F;
+ u32 fr = from & GENMASK(22, 0);
+ u32 round_up = 0;
+
+ if (sign || exp < 0)
+ return 0;
+
+ u32 int_part = BIT(exp);
+ u32 frac_part = fr >> (23 - exp);
+
+ if (fr & BIT(22 - exp))
+ round_up = 1;
+
+ return int_part + frac_part + round_up;
+}
+
+/*
+ * applesmc_u32_to_float - Convert an u32 into a float.
+ * See applesmc_float_to_u32 for a rationale.
+ */
+static inline u32 applesmc_u32_to_float(u32 from)
+{
+ if (!from)
+ return 0;
+
+ u32 bc = fls(from) - 1;
+ u32 exp = 0x7F + bc;
+ u32 frac_part = (from << (23 - bc)) & GENMASK(22, 0);
+ u32 round_up = 0;
+
+ if (from & BIT(bc - 1))
+ round_up = 1;
+
+ return (exp << 23) | (frac_part + round_up);
+}
+
/*
* applesmc_device_init - initialize the accelerometer. Can sleep.
*/
@@ -763,6 +811,8 @@ static int applesmc_init_mmio_try(void)
static int applesmc_init_smcreg_try(void)
{
struct applesmc_registers *s = &smcreg;
+ const struct applesmc_entry *e;
+ char newkey[5];
bool left_light_sensor = false, right_light_sensor = false;
unsigned int count;
u8 tmp[1];
@@ -788,6 +838,15 @@ static int applesmc_init_smcreg_try(void)
if (!s->cache)
return -ENOMEM;
+ scnprintf(newkey, sizeof(newkey), fan_speed_fmt[1], 1); //example value
+
+ e = applesmc_get_entry_by_key(newkey);
+ if (IS_ERR(e))
+ return PTR_ERR(e);
+
+ if (!strcmp(e->type, FLOAT_TYPE))
+ is_fan_speed_float = true;
+
ret = applesmc_read_key(FANS_COUNT, tmp, 1);
if (ret)
return ret;
@@ -820,6 +879,10 @@ static int applesmc_init_smcreg_try(void)
if (ret)
return ret;
+ ret = applesmc_has_key(FANS_MANUAL_FMT, &is_fan_manual_fmt);
+ if (ret)
+ return ret;
+
s->num_light_sensors = left_light_sensor + right_light_sensor;
s->init_complete = true;
@@ -1044,11 +1107,16 @@ static ssize_t applesmc_show_fan_speed(struct device *dev,
scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
to_index(attr));
- ret = applesmc_read_key(newkey, buffer, 2);
+ if (is_fan_speed_float) {
+ ret = applesmc_read_key(newkey, (u8 *) &speed, 4);
+ speed = applesmc_float_to_u32(speed);
+ } else {
+ ret = applesmc_read_key(newkey, buffer, 2);
+ speed = ((buffer[0] << 8 | buffer[1]) >> 2);
+ }
if (ret)
return ret;
- speed = ((buffer[0] << 8 | buffer[1]) >> 2);
return sysfs_emit(sysfsbuf, "%u\n", speed);
}
@@ -1067,10 +1135,14 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
to_index(attr));
- buffer[0] = (speed >> 6) & 0xff;
- buffer[1] = (speed << 2) & 0xff;
- ret = applesmc_write_key(newkey, buffer, 2);
-
+ if (is_fan_speed_float) {
+ speed = applesmc_u32_to_float(speed);
+ ret = applesmc_write_key(newkey, (u8 *) &speed, 4);
+ } else {
+ buffer[0] = (speed >> 6) & 0xff;
+ buffer[1] = (speed << 2) & 0xff;
+ ret = applesmc_write_key(newkey, buffer, 2);
+ }
if (ret)
return ret;
else
@@ -1084,11 +1156,13 @@ static ssize_t applesmc_show_fan_manual(struct device *dev,
u16 manual = 0;
u8 buffer[2];
- ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
- if (ret)
- return ret;
-
- manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
+ if (is_fan_manual_fmt) {
+ ret = applesmc_read_key(FANS_MANUAL_FMT, buffer, 1);
+ manual = buffer[0];
+ } else {
+ ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
+ manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
+ }
return sysfs_emit(sysfsbuf, "%d\n", manual);
}
@@ -1104,22 +1178,26 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
if (kstrtoul(sysfsbuf, 10, &input) < 0)
return -EINVAL;
- ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
- if (ret)
- goto out;
-
- val = (buffer[0] << 8 | buffer[1]);
+ if (is_fan_manual_fmt) {
+ buffer[0] = input & 0x01;
+ ret = applesmc_write_key(FANS_MANUAL_FMT, buffer, 1);
+ } else {
+ ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
+ if (ret)
+ goto out;
- if (input)
- val = val | (0x01 << to_index(attr));
- else
- val = val & ~(0x01 << to_index(attr));
+ val = (buffer[0] << 8 | buffer[1]);
- buffer[0] = (val >> 8) & 0xFF;
- buffer[1] = val & 0xFF;
+ if (input)
+ val = val | (0x01 << to_index(attr));
+ else
+ val = val & ~(0x01 << to_index(attr));
- ret = applesmc_write_key(FANS_MANUAL, buffer, 2);
+ buffer[0] = (val >> 8) & 0xFF;
+ buffer[1] = val & 0xFF;
+ ret = applesmc_write_key(FANS_MANUAL, buffer, 2);
+ }
out:
if (ret)
return ret;
--
2.43.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] Add support for newer macs in applesmc
2025-03-12 12:30 [PATCH 0/2] Add support for newer macs in applesmc Subu Dwevedi
2025-03-12 12:30 ` [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs Subu Dwevedi
2025-03-12 12:30 ` [PATCH 2/2] hwmon/applesmc: add fan support " Subu Dwevedi
@ 2025-03-12 12:55 ` Guenter Roeck
2025-03-12 13:05 ` Subu Dwevedi
2 siblings, 1 reply; 9+ messages in thread
From: Guenter Roeck @ 2025-03-12 12:55 UTC (permalink / raw)
To: Subu Dwevedi; +Cc: Henrik Rydberg, Jean Delvare, linux-hwmon, linux-kernel
On 3/12/25 05:30, Subu Dwevedi wrote:
> This patch series adds MMIO support for newer Macs in the AppleSMC driver
> and enables fan control for these models.
>
> Patch 1 introduces MMIO-based access for AppleSMC on modern Macs, replacing
> the older I/O port-based access where applicable.
>
> Patch 2 builds on this by implementing fan control using the new MMIO method.
>
> Subu Dwevedi (2):
> hwmon/applesmc: add MMIO for newer macs
> hwmon/applesmc: add fan support for newer macs
>
> drivers/hwmon/applesmc.c | 347 +++++++++++++++++++++++++++++++++++----
> 1 file changed, 314 insertions(+), 33 deletions(-)
>
Isn't this the same series that I have seen before, pulled from some other repository,
incomplete, and without acknowledging the original authors ?
Guenter
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] Add support for newer macs in applesmc
2025-03-12 12:55 ` [PATCH 0/2] Add support for newer macs in applesmc Guenter Roeck
@ 2025-03-12 13:05 ` Subu Dwevedi
0 siblings, 0 replies; 9+ messages in thread
From: Subu Dwevedi @ 2025-03-12 13:05 UTC (permalink / raw)
To: linux; +Cc: jdelvare, linux-hwmon, linux-kernel, messigoatcr7nop, rydberg
I Think you mean the t2linux group, so my code is completly different
from them and i decided to send my patches upstream
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] hwmon/applesmc: add fan support for newer macs
2025-03-12 12:30 ` [PATCH 2/2] hwmon/applesmc: add fan support " Subu Dwevedi
@ 2025-03-13 14:53 ` kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2025-03-13 14:53 UTC (permalink / raw)
To: Subu Dwevedi
Cc: llvm, oe-kbuild-all, Subu Dwevedi, Henrik Rydberg, Jean Delvare,
Guenter Roeck, linux-hwmon, linux-kernel
Hi Subu,
kernel test robot noticed the following build warnings:
[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on linus/master v6.14-rc6 next-20250313]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Subu-Dwevedi/hwmon-applesmc-add-MMIO-for-newer-macs/20250312-203248
base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link: https://lore.kernel.org/r/20250312123055.1735-3-messigoatcr7nop%40gmail.com
patch subject: [PATCH 2/2] hwmon/applesmc: add fan support for newer macs
config: i386-randconfig-002-20250313 (https://download.01.org/0day-ci/archive/20250313/202503132205.Vf8imlWS-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250313/202503132205.Vf8imlWS-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503132205.Vf8imlWS-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/hwmon/applesmc.c: In function 'applesmc_show_fan_manual':
>> drivers/hwmon/applesmc.c:1155:13: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
1155 | int ret;
| ^~~
vim +/ret +1155 drivers/hwmon/applesmc.c
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1151
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1152 static ssize_t applesmc_show_fan_manual(struct device *dev,
3eba2bf7c5fb786 Henrik Rydberg 2010-11-09 1153 struct device_attribute *attr, char *sysfsbuf)
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1154 {
6f2fad748ccced5 Nicolas Boichat 2007-05-08 @1155 int ret;
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1156 u16 manual = 0;
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1157 u8 buffer[2];
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1158
beab9ce267efe06 Subu Dwevedi 2025-03-12 1159 if (is_fan_manual_fmt) {
beab9ce267efe06 Subu Dwevedi 2025-03-12 1160 ret = applesmc_read_key(FANS_MANUAL_FMT, buffer, 1);
beab9ce267efe06 Subu Dwevedi 2025-03-12 1161 manual = buffer[0];
beab9ce267efe06 Subu Dwevedi 2025-03-12 1162 } else {
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1163 ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
cecf7560f00a841 Tom Rix 2020-08-20 1164 manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
beab9ce267efe06 Subu Dwevedi 2025-03-12 1165 }
1f4d4af4d7a1c79 Guenter Roeck 2021-03-21 1166 return sysfs_emit(sysfsbuf, "%d\n", manual);
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1167 }
6f2fad748ccced5 Nicolas Boichat 2007-05-08 1168
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs
2025-03-12 12:30 ` [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs Subu Dwevedi
@ 2025-03-13 18:32 ` kernel test robot
2025-03-14 3:19 ` kernel test robot
2025-03-17 18:28 ` Guenter Roeck
2 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2025-03-13 18:32 UTC (permalink / raw)
To: Subu Dwevedi
Cc: llvm, oe-kbuild-all, Subu Dwevedi, Henrik Rydberg, Jean Delvare,
Guenter Roeck, linux-hwmon, linux-kernel
Hi Subu,
kernel test robot noticed the following build errors:
[auto build test ERROR on groeck-staging/hwmon-next]
[also build test ERROR on linus/master v6.14-rc6 next-20250313]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Subu-Dwevedi/hwmon-applesmc-add-MMIO-for-newer-macs/20250312-203248
base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link: https://lore.kernel.org/r/20250312123055.1735-2-messigoatcr7nop%40gmail.com
patch subject: [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs
config: x86_64-buildonly-randconfig-002-20250313 (https://download.01.org/0day-ci/archive/20250314/202503140229.R49CaAYj-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250314/202503140229.R49CaAYj-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503140229.R49CaAYj-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/hwmon/applesmc.c:717:42: error: incomplete definition of type 'struct acpi_device'
717 | status = acpi_get_current_resources(adev->handle, &buffer);
| ~~~~^
include/linux/acpi.h:801:8: note: forward declaration of 'struct acpi_device'
801 | struct acpi_device;
| ^
1 error generated.
vim +717 drivers/hwmon/applesmc.c
678
679 static int applesmc_init_index(struct applesmc_registers *s)
680 {
681 const struct applesmc_entry *entry;
682 unsigned int i;
683
684 if (s->index)
685 return 0;
686
687 s->index = kcalloc(s->temp_count, sizeof(s->index[0]), GFP_KERNEL);
688 if (!s->index)
689 return -ENOMEM;
690
691 for (i = s->temp_begin; i < s->temp_end; i++) {
692 entry = applesmc_get_entry_by_index(i);
693 if (IS_ERR(entry))
694 continue;
695 if (strcmp(entry->type, TEMP_SENSOR_TYPE))
696 continue;
697 s->index[s->index_count++] = entry->key;
698 }
699
700 return 0;
701 }
702 /*
703 * applesmc_init_mmio_try - Try to initialize MMIO
704 */
705 static int applesmc_init_mmio_try(void)
706 {
707 u8 ldkn_version;
708 acpi_status status;
709 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
710 struct acpi_device *adev;
711 struct acpi_resource *res;
712
713 adev = acpi_dev_get_first_match_dev("APP0001", NULL, -1);
714 if (!adev)
715 return -ENXIO;
716
> 717 status = acpi_get_current_resources(adev->handle, &buffer);
718 if (ACPI_FAILURE(status))
719 return -ENXIO;
720
721 res = buffer.pointer;
722 while (res->type != ACPI_RESOURCE_TYPE_END_TAG) {
723 if (res->type == ACPI_RESOURCE_TYPE_FIXED_MEMORY32) {
724 if (res->data.fixed_memory32.address_length < 0x4006)
725 return -ENXIO;
726
727 mmio_base_addr = res->data.fixed_memory32.address;
728 mmio_base_size = res->data.fixed_memory32.address_length;
729 is_mmio = true;
730 break;
731 }
732 res = ACPI_NEXT_RESOURCE(res);
733 }
734 kfree(buffer.pointer);
735 acpi_dev_put(adev);
736
737 if (!is_mmio)
738 return -ENXIO;
739
740 mmio_base = ioremap(mmio_base_addr, mmio_base_size);
741
742 if (!mmio_base)
743 return -ENXIO;
744
745 if (ioread8(mmio_base + 0x4005) == 0xFF)
746 goto out;
747
748 if (read_smc(APPLESMC_READ_CMD, "LDKN", &ldkn_version, 1))
749 goto out;
750
751 if (ldkn_version < 2)
752 goto out;
753
754 return 0;
755 out:
756 pr_warn("cannot enable MMIO will use PMIO\n");
757 iounmap(mmio_base);
758 return -ENXIO;
759 }
760 /*
761 * applesmc_init_smcreg_try - Try to initialize register cache. Idempotent.
762 */
763 static int applesmc_init_smcreg_try(void)
764 {
765 struct applesmc_registers *s = &smcreg;
766 bool left_light_sensor = false, right_light_sensor = false;
767 unsigned int count;
768 u8 tmp[1];
769 int ret;
770
771 if (s->init_complete)
772 return 0;
773
774 ret = read_register_count(&count);
775 if (ret)
776 return ret;
777
778 if (s->cache && s->key_count != count) {
779 pr_warn("key count changed from %d to %d\n",
780 s->key_count, count);
781 kfree(s->cache);
782 s->cache = NULL;
783 }
784 s->key_count = count;
785
786 if (!s->cache)
787 s->cache = kcalloc(s->key_count, sizeof(*s->cache), GFP_KERNEL);
788 if (!s->cache)
789 return -ENOMEM;
790
791 ret = applesmc_read_key(FANS_COUNT, tmp, 1);
792 if (ret)
793 return ret;
794 s->fan_count = tmp[0];
795 if (s->fan_count > 10)
796 s->fan_count = 10;
797
798 ret = applesmc_get_lower_bound(&s->temp_begin, "T");
799 if (ret)
800 return ret;
801 ret = applesmc_get_lower_bound(&s->temp_end, "U");
802 if (ret)
803 return ret;
804 s->temp_count = s->temp_end - s->temp_begin;
805
806 ret = applesmc_init_index(s);
807 if (ret)
808 return ret;
809
810 ret = applesmc_has_key(LIGHT_SENSOR_LEFT_KEY, &left_light_sensor);
811 if (ret)
812 return ret;
813 ret = applesmc_has_key(LIGHT_SENSOR_RIGHT_KEY, &right_light_sensor);
814 if (ret)
815 return ret;
816 ret = applesmc_has_key(MOTION_SENSOR_KEY, &s->has_accelerometer);
817 if (ret)
818 return ret;
819 ret = applesmc_has_key(BACKLIGHT_KEY, &s->has_key_backlight);
820 if (ret)
821 return ret;
822
823 s->num_light_sensors = left_light_sensor + right_light_sensor;
824 s->init_complete = true;
825
826 pr_info("key=%d fan=%d temp=%d index=%d acc=%d lux=%d kbd=%d\n",
827 s->key_count, s->fan_count, s->temp_count, s->index_count,
828 s->has_accelerometer,
829 s->num_light_sensors,
830 s->has_key_backlight);
831
832 return 0;
833 }
834
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs
2025-03-12 12:30 ` [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs Subu Dwevedi
2025-03-13 18:32 ` kernel test robot
@ 2025-03-14 3:19 ` kernel test robot
2025-03-17 18:28 ` Guenter Roeck
2 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2025-03-14 3:19 UTC (permalink / raw)
To: Subu Dwevedi
Cc: oe-kbuild-all, Subu Dwevedi, Henrik Rydberg, Jean Delvare,
Guenter Roeck, linux-hwmon, linux-kernel
Hi Subu,
kernel test robot noticed the following build warnings:
[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on linus/master v6.14-rc6 next-20250313]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Subu-Dwevedi/hwmon-applesmc-add-MMIO-for-newer-macs/20250312-203248
base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link: https://lore.kernel.org/r/20250312123055.1735-2-messigoatcr7nop%40gmail.com
patch subject: [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs
config: x86_64-randconfig-122-20250313 (https://download.01.org/0day-ci/archive/20250314/202503141052.v7b9psFM-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250314/202503141052.v7b9psFM-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503141052.v7b9psFM-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> drivers/hwmon/applesmc.c:257:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:257:31: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:257:31: sparse: got unsigned char [usertype] *
>> drivers/hwmon/applesmc.c:258:46: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:258:46: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:258:46: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:269:44: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:269:44: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:269:44: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:281:44: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:281:44: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:281:44: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:282:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:282:34: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:282:34: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:283:33: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:283:33: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:283:33: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:288:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:288:31: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:288:31: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:292:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:292:39: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:292:39: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:299:71: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:299:71: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:299:71: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:302:81: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:302:81: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:302:81: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:306:73: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:306:73: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:306:73: sparse: got unsigned char [usertype] *
>> drivers/hwmon/applesmc.c:311:49: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const volatile [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:311:49: sparse: expected void const volatile [noderef] __iomem *
drivers/hwmon/applesmc.c:311:49: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:320:44: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:320:44: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:320:44: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:324:63: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:324:63: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:324:63: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:327:73: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:327:73: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:327:73: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:331:65: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:331:65: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:331:65: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:335:33: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:335:33: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:335:33: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:336:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:336:34: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:336:34: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:337:33: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:337:33: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:337:33: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:341:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:341:31: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:341:31: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:510:52: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:510:52: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:510:52: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:511:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:511:39: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:511:39: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:512:63: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:512:63: sparse: expected void [noderef] __iomem *
drivers/hwmon/applesmc.c:512:63: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:517:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:517:41: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:517:41: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:521:58: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:521:58: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:521:58: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:522:48: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:522:48: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:522:48: sparse: got unsigned char [usertype] *
drivers/hwmon/applesmc.c:523:50: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:523:50: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:523:50: sparse: got unsigned char [usertype] *
>> drivers/hwmon/applesmc.c:740:19: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected unsigned char [usertype] *static [noderef] [toplevel] __iomem mmio_base @@ got void [noderef] __iomem * @@
drivers/hwmon/applesmc.c:740:19: sparse: expected unsigned char [usertype] *static [noderef] [toplevel] __iomem mmio_base
drivers/hwmon/applesmc.c:740:19: sparse: got void [noderef] __iomem *
drivers/hwmon/applesmc.c:745:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned char [usertype] * @@
drivers/hwmon/applesmc.c:745:31: sparse: expected void const [noderef] __iomem *
drivers/hwmon/applesmc.c:745:31: sparse: got unsigned char [usertype] *
>> drivers/hwmon/applesmc.c:757:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned char [usertype] *static [noderef] [toplevel] __iomem mmio_base @@
drivers/hwmon/applesmc.c:757:17: sparse: expected void volatile [noderef] __iomem *addr
drivers/hwmon/applesmc.c:757:17: sparse: got unsigned char [usertype] *static [noderef] [toplevel] __iomem mmio_base
drivers/hwmon/applesmc.c:1611:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned char [usertype] *static [noderef] [toplevel] __iomem mmio_base @@
drivers/hwmon/applesmc.c:1611:25: sparse: expected void volatile [noderef] __iomem *addr
drivers/hwmon/applesmc.c:1611:25: sparse: got unsigned char [usertype] *static [noderef] [toplevel] __iomem mmio_base
>> drivers/hwmon/applesmc.c:257:21: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:258:36: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:269:34: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:281:34: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:282:24: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:283:23: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:288:21: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:292:29: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:299:61: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:302:71: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:306:63: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:311:39: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:320:34: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:324:53: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:327:63: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:331:55: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:335:23: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:336:24: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:337:23: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:341:21: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:510:42: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:511:29: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:512:53: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:517:31: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:521:48: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:522:38: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:523:40: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:742:14: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:745:21: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:757:17: sparse: sparse: dereference of noderef expression
drivers/hwmon/applesmc.c:1611:25: sparse: sparse: dereference of noderef expression
vim +257 drivers/hwmon/applesmc.c
250
251 /*
252 * MMIO Impliementation
253 */
254
255 static void clearArbitration(void)
256 {
> 257 if (ioread8(mmio_base + 0x4005))
> 258 return iowrite8(0, mmio_base + 0x4005);
259 }
260 static int waitForKeyDone(void)
261 {
262 int i = 1000; //millisecounds
263 u8 status;
264
265 while (i) {
266 msleep(1);
267 i--;
268
269 status = ioread8(mmio_base + 0x4005);
270 if (status & 0x20)
271 return 0;
272 }
273
274 return -EIO;
275 }
276 static int mmio_read_smc(u8 cmd, const char *key, u8 *buffer, u64 len)
277 {
278 u8 i, u = 0;
279
280 clearArbitration();
281 iowrite32(*((u32 *)key), mmio_base + 0x78);
282 iowrite8(0x15, mmio_base + 0x7E);
283 iowrite8(cmd, mmio_base + 0x7F);
284
285 if (waitForKeyDone())
286 return -EIO;
287
288 i = ioread8(mmio_base + 0x7F);
289 if (i)
290 return -EIO;
291 if (cmd == APPLESMC_READ_CMD) {
292 i = ioread8(mmio_base + 0x7D);
293 if (i > len || !i)
294 return -EIO;
295
296 while (u < i) {
297 if ((i - u) < 4) {
298 if ((i - u) < 2) {
299 buffer[u] = ioread8(mmio_base + u);
300 u += 1;
301 } else {
302 *(u16 *)&buffer[u] = ioread16(mmio_base + u);
303 u += 2;
304 }
305 } else {
306 *(u32 *)&buffer[u] = ioread32(mmio_base + u);
307 u += 4;
308 }
309 }
310 } else
> 311 memcpy_fromio(buffer, mmio_base + 0x0, len);
312
313 return 0;
314 }
315 static int mmio_write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len)
316 {
317 u8 i = 0;
318
319 clearArbitration();
320 iowrite32(*((u32 *)key), mmio_base + 0x78);
321 while (i < len) {
322 if (len - i < 4) {
323 if (len - i < 2) {
324 iowrite8(buffer[i], mmio_base + i);
325 i += 1;
326 } else {
327 iowrite16(*(u16 *)&buffer[i], mmio_base + i);
328 i += 2;
329 }
330 } else {
331 iowrite32(*(u32 *)&buffer[i], mmio_base + i);
332 i += 4;
333 }
334 }
335 iowrite8(len, mmio_base + 0x7D);
336 iowrite8(0x15, mmio_base + 0x7E);
337 iowrite8(cmd, mmio_base + 0x7F);
338 if (waitForKeyDone())
339 return -EIO;
340
341 i = ioread8(mmio_base + 0x7F);
342 if (i)
343 return -EIO;
344
345 return 0;
346 }
347
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs
2025-03-12 12:30 ` [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs Subu Dwevedi
2025-03-13 18:32 ` kernel test robot
2025-03-14 3:19 ` kernel test robot
@ 2025-03-17 18:28 ` Guenter Roeck
2 siblings, 0 replies; 9+ messages in thread
From: Guenter Roeck @ 2025-03-17 18:28 UTC (permalink / raw)
To: Subu Dwevedi; +Cc: Henrik Rydberg, Jean Delvare, linux-hwmon, linux-kernel
On Wed, Mar 12, 2025 at 06:00:22PM +0530, Subu Dwevedi wrote:
> Add basic MMIO support to AppleSMC for T2 Macs,
> enabling it only when supported.
> This replaces the legacy port-based method for
> key reading, writing, and metadata operations
> (retrieving keys by index and obtaining key information)
>
> Signed-off-by: Subu Dwevedi <messigoatcr7nop@gmail.com>
I expect the errors reported by the kernel test robot to be fixed before
I have a closer look at the patches.
Guenter
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-03-17 18:28 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-12 12:30 [PATCH 0/2] Add support for newer macs in applesmc Subu Dwevedi
2025-03-12 12:30 ` [PATCH 1/2] hwmon/applesmc: add MMIO for newer macs Subu Dwevedi
2025-03-13 18:32 ` kernel test robot
2025-03-14 3:19 ` kernel test robot
2025-03-17 18:28 ` Guenter Roeck
2025-03-12 12:30 ` [PATCH 2/2] hwmon/applesmc: add fan support " Subu Dwevedi
2025-03-13 14:53 ` kernel test robot
2025-03-12 12:55 ` [PATCH 0/2] Add support for newer macs in applesmc Guenter Roeck
2025-03-12 13:05 ` Subu Dwevedi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox