lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20140722075808.GD28529@lee--X1> Date: Tue, 22 Jul 2014 08:58:08 +0100 From: Lee Jones <lee.jones@...aro.org> To: Wei-Chun Pan <weichun.pan@...antech.com.tw> Cc: Samuel Ortiz <sameo@...ux.intel.com>, Jean Delvare <jdelvare@...e.de>, Guenter Roeck <linux@...ck-us.net>, "Louis.Lu" <Louis.Lu@...antech.com.tw>, "Neo.Lo" <neo.lo@...antech.com.tw>, "Hank.Peng" <Hank.Peng@...antech.com.tw>, "Kevin.Ong" <Kevin.Ong@...antech.com.tw>, linux-kernel@...r.kernel.org Subject: Re: [PATCH 1/4] mfd: imanager2: Add defines support for IT8516/18/28 This patch needs a commit log. In fact, it can be squashed into the first commit which uses these defines. > Signed-off-by: Wei-Chun Pan <weichun.pan@...antech.com.tw> > --- > include/linux/mfd/imanager2_ec.h | 358 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 358 insertions(+) > create mode 100644 include/linux/mfd/imanager2_ec.h > > diff --git a/include/linux/mfd/imanager2_ec.h b/include/linux/mfd/imanager2_ec.h > new file mode 100644 > index 0000000..bf7d70e > --- /dev/null > +++ b/include/linux/mfd/imanager2_ec.h > @@ -0,0 +1,358 @@ > +/* > + * imanager2_ec.h - MFD driver defines of Advantech EC IT8516/18/28 > + * Copyright (C) 2014 Richard Vidal-Dorsch <richard.dorsch@...antech.com> > + * > + * This program is free software: you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation, either version 3 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. This is the looooong version of the licence. Can you find the shorter one. > + */ > + > +#ifndef __IMANAGER2_EC_H__ > +#define __IMANAGER2_EC_H__ > + > +#include <linux/mutex.h> > + > +#define EC_FLAG_IO 0 > +#define EC_FLAG_IO_MAILBOX (1 << 0) > +#define EC_FLAG_MAILBOX (1 << 1) Use BIT(0), BIT(1) instead. > +#define EC_MAX_DEVICE_ID_NUM 0xFF > +#define EC_MAX_ITEM_NUM 32 > + > +struct ec_table { > + u8 devid2itemnum[EC_MAX_DEVICE_ID_NUM]; > + u8 pinnum[EC_MAX_ITEM_NUM]; > + u8 devid[EC_MAX_ITEM_NUM]; > +}; > + > +struct ec_version { > + u16 kernel_ver, > + chip_code, > + prj_id, > + prj_ver; Declare these separately. > +}; > + > +#define EC_MAX_LEN_PROJECT_NAME 8 Find a way to do this dynamically, or use 'const char *' instead. > +struct imanager2 { > + u16 id; > + u32 flag; > + struct mutex lock; /* protects io */ We know what locks do. > + char prj_name[EC_MAX_LEN_PROJECT_NAME + 1]; /* strlen + '\0' */ We know how strings work. > + struct ec_version version; > + struct ec_table table; 'table' is awfully generic. > +}; Use KernelDoc to document the main container. > +/* > + * Definition > + */ This comment is not adding anything to the code here. > +#define EC_TABLE_ITEM_UNUSED 0xFF > +#define EC_TABLE_DID_NODEV 0x00 > +#define EC_TABLE_HWP_NODEV 0xFF > +#define EC_TABLE_NOITEM 0xFF > + > +#define EC_ERROR 0xFF > + > +#define EC_RAM_BANK_SIZE 32 /* 32 bytes size for each bank. */ > +#define EC_RAM_BUFFER_SIZE 256 /* 32 bytes * 8 banks = 256 bytes */ > + > +#define EC_SIO_CMD 0x29C > +#define EC_SIO_DATA 0x29D 12bit commands? Or are these 16bit and should have a leading 0? > +/* Access Mailbox */ > +#define EC_IO_PORT_CMD 0x29A > +#define EC_IO_PORT_DATA 0x299 > + > +#define EC_IO_CMD_READ_OFFSET 0xA0 > +#define EC_IO_CMD_WRITE_OFFSET 0x50 Should these have leading 0's too? > +#define EC_ITE_PORT_OFS 0x29E > +#define EC_ITE_PORT_DATA 0x29F > + > +/* > + * CMD - IO > + */ Drop this. > +/* ADC */ > +#define EC_CMD_ADC_INDEX 0x15 > +#define EC_CMD_ADC_READ_LSB 0x16 > +#define EC_CMD_ADC_READ_MSB 0x1F > +/* HW Control Table */ > +#define EC_CMD_HWCTRLTABLE_INDEX 0x20 > +#define EC_CMD_HWCTRLTABLE_GET_PIN_NUM 0x21 > +#define EC_CMD_HWCTRLTABLE_GET_DEVICE_ID 0x22 > +#define EC_CMD_HWCTRLTABLE_GET_PIN_ACTIVE_POLARITY 0x23 > +/* ACPI RAM */ > +#define EC_CMD_ACPIRAM_READ 0x80 > +#define EC_CMD_ACPIRAM_WRITE 0x81 > +/* Extend RAM */ > +#define EC_CMD_EXTRAM_READ 0x86 > +#define EC_CMD_EXTRAM_WRITE 0x87 > +/* HW RAM */ > +#define EC_CMD_HWRAM_READ 0x88 > +#define EC_CMD_HWRAM_WRITE 0x89 > + > +/* > + * ACPI RAM Address Table > + */ > +/* n = 1 ~ 2 */ Please accompany with words. Random math is seldom helpful. I'm guessing that you mean valid values of 'n' can be 1 or 2, but this is unclear. > +#define EC_ACPIRAM_ADDR_TEMPERATURE_BASE(n) (0x60 + 3 * ((n) - 1)) What is 0x60? Why 3? Please use #defines for these numbers. > +#define EC_ACPIRAM_ADDR_LOCAL_TEMPERATURE(n) \ > + EC_ACPIRAM_ADDR_TEMPERATURE_BASE(n) > +#define EC_ACPIRAM_ADDR_REMOTE_TEMPERATURE(n) \ > + (EC_ACPIRAM_ADDR_TEMPERATURE_BASE(n) + 1) > +#define EC_ACPIRAM_ADDR_WARNING_TEMPERATURE(n)\ > + (EC_ACPIRAM_ADDR_TEMPERATURE_BASE(n) + 2) > + > +/* N = 0 ~ 2 */ Please accompany with words. Random math is seldom helpful. > +#define EC_ACPIRAM_ADDR_FAN_SPEED_BASE(N) (0x70 + 2 * (N)) No magic numbers. Why are you using 'N' here and 'n' before? > +#define EC_ACPIRAM_ADDR_KERNEL_MAJOR_VERSION 0xF8 > +#define EC_ACPIRAM_ADDR_CHIP_VENDOR_CODE 0xFA > +#define EC_ACPIRAM_ADDR_PROJECT_NAME_CODE 0xFC > +#define EC_ACPIRAM_ADDR_FIRMWARE_MAJOR_VERSION 0xFE > + > +/* > + * HW RAM Address Table > + */ > +/* Thermal Source Control RAM 0xB0-0xC7 (N: 0 ~ 3) */ > +#define EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) (0xB0 + 6 * (N)) Same comments as above. > +#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_CHANNEL(N) \ > + EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) > +#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_ADDR(N) \ > + (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 1) > +#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_CMD(N) \ > + (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 2) > +#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_STATUS(N) \ > + (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 3) > +#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_FAN_CODE(N) \ > + (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 4) > +#define EC_HWRAM_ADDR_THERMAL_SOURCE_SMB_TEMPERATURE(N) \ > + (EC_HWRAM_ADDR_THERMAL_SOURCE_BASE_ADDR(N) + 5) Place more '\n' spacers in - these are difficult to read. > +/* Fan Control 0xD0-0xEF (N: 0 ~ 3) */ > +#define EC_HWRAM_ADDR_FAN_BASE_ADDR(N) (0xD0 + 0x10 * (N)) > +#define EC_HWRAM_ADDR_FAN_CODE(N) EC_HWRAM_ADDR_FAN_BASE_ADDR(N) > +#define EC_HWRAM_ADDR_FAN_STATUS(N) (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 1) > +#define EC_HWRAM_ADDR_FAN_CONTROL(N) (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 2) > +#define EC_HWRAM_ADDR_FAN_TEMP_HI(N) (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 3) > +#define EC_HWRAM_ADDR_FAN_TEMP_LO(N) (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 4) > +#define EC_HWRAM_ADDR_FAN_TEMP_LOSTOP(N) \ > + (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 5) > +#define EC_HWRAM_ADDR_FAN_PWM_HI(N) (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 6) > +#define EC_HWRAM_ADDR_FAN_PWM_LO(N) (EC_HWRAM_ADDR_FAN_BASE_ADDR(N) + 7) > + > +/* > + * OFS - Mailbox > + */ > +/* Mailbox Structure */ > +#define EC_MAILBOX_OFFSET_CMD 0x00 > +#define EC_MAILBOX_OFFSET_STATUS 0x01 > +#define EC_MAILBOX_OFFSET_PARA 0x02 > +#define EC_MAILBOX_OFFSET_DAT(N) (0x03 + (N)) /* N = 0x00 ~ 0x2C */ > + > +/* > + * CMD - Mailbox > + */ > +/* GPIO */ > +#define EC_CMD_MAILBOX_READ_HW_PIN 0x11 > +#define EC_CMD_MAILBOX_WRITE_HW_PIN 0x12 > +/* Storage */ > +#define EC_CMD_MAILBOX_READ_EC_RAM 0x1E > +#define EC_CMD_MAILBOX_WRITE_EC_RAM 0x1F > +/* OTHERS */ > +#define EC_CMD_MAILBOX_READ_DYNAMIC_TABLE 0x20 > +/* Thermal Protect */ > +#define EC_CMD_MAILBOX_READ_THERMAL_SOURCE 0x42 > +#define EC_CMD_MAILBOX_WRITE_THERMAL_SOURCE 0x43 > +/* Storage */ > +#define EC_CMD_MALLBOX_CLEAR_256_BYTES_BUFFER 0xC0 > +#define EC_CMD_MALLBOX_READ_256_BYTES_BUFFER 0xC1 > +#define EC_CMD_MALLBOX_WRITE_256_BYTES_BUFFER 0xC2 > +#define EC_CMD_MALLBOX_READ_EEPROM_DATA_FROM_256_BYTES_BUFFER 0xC3 > +#define EC_CMD_MALLBOX_WRITE_256_BYTES_BUFFER_INTO_EEPROM_DATA 0xC4 > +/* General Mailbox Command */ > +#define EC_CMD_MAILBOX_GET_FIRMWARE_VERSION_AND_PROJECT_NAME 0xF0 > +#define EC_CMD_MAILBOX_CLEAR_ALL 0xFF > + > +/* > + * Status - Mailbox > + */ > +#define EC_MAILBOX_STATUS_FAIL 0x00 > +#define EC_MAILBOX_STATUS_SUCCESS 0x01 > + > +/* > + * PARA - Mailbox > + */ > +/* RAM Type */ > +#define EC_RAM_BANK_ACPI 0x01 > +#define EC_RAM_BANK_HW 0x02 > +#define EC_RAM_BANK_EXT 0x03 > +#define EC_RAM_BANK_BUFFER 0x06 > +/* Dynamic Type */ > +#define EC_DYNAMIC_DEVICE_ID 0x00 > +#define EC_DYNAMIC_HW_PIN 0x01 > +#define EC_DYNAMIC_POLARITY 0x02 > + > +/* > + * Functions - Mailbox > + */ > +/* command = 0x20 */ > +int imanager2_mbox_get_dynamic_table(u32 ecflag, u8 type, u8 *table); > +/* command = 0x42 */ > +int imanager2_mbox_read_thermalzone(u32 ecflag, u8 zone, u8 *smbid, u8 *fanid, > + u8 *buf, int *len); > +/* command = 0xC0 */ > +int imanager2_mbox_clear_ram(u32 ecflag); > +/* command = 0xC1 */ > +int imanager2_mbox_read_ram_across_banks(u32 ecflag, u8 *data, int len); > +/* command = 0x1E */ > +int imanager2_mbox_read_ram(u32 ecflag, u8 bank, u8 offset, u8 *buf, u8 len); > +/* command = 0x1F */ > +int imanager2_mbox_write_ram(u32 ecflag, u8 bank, u8 offset, u8 *buf, u8 len); > +/* command = 0xF0 */ > +int imanager2_mbox_get_project_information(u32 ecflag, u8 *prj_name, > + u16 *kernel_ver, u16 *chip_code, > + u16 *prj_id, u16 *prj_ver); > + > +/* > + * Functions - basic > + */ > +#define IO_FLAG_OBF (1 << 0) /* output buffer full */ > +#define IO_FLAG_IBF (1 << 1) /* input buffer full */ use BIT() > +int ec_inb_after_obf1(u8 *data); > +int ec_outb_after_ibc0(u16 port, u8 data); > +/* ITE mailbox access */ > +int imanager2_mbox_read_data(u32 ecflag, u8 cmd, u8 para, u8 *data, int len); > +int imanager2_mbox_write_data(u32 ecflag, u8 cmd, u8 para, u8 *data, int len); > +/* only IO access */ > +int imanager2_mbox_io_read(u8 command, u8 offset, u8 *buf, u8 len); > +int imanager2_mbox_io_write(u8 command, u8 offset, u8 *buf, u8 len); > +int imanager2_mbox_io_simple_read(u8 command, u8 *value); > +/* ITE Mailbox & IO access */ > +int imanager2_mbox_read_ram_support_io(u32 ecflag, u8 bank, u8 addr, u8 *buf, > + u8 len); > + > +/* > + * Device ID > + */ Comments with the same information is as the type/variable name are not helpful. Please remove. > +enum ec_device_id { > + /* GPIO */ > + altgpio0 = 0x10, /* 0x10 */ You're joking right? > + altgpio1, > + altgpio2, > + altgpio3, > + altgpio4, > + altgpio5, > + altgpio6, > + altgpio7, > + /* GPIO - Button */ > + btn0, > + btn1, > + btn2, > + btn3, > + btn4, > + btn5, > + btn6, > + btn7, > + /* PWM - Fan */ > + cpufan_2p, /* 0x20 */ Remove these comments. > + cpufan_4p, > + sysfan1_2p, > + sysfan1_4p, > + sysfan2_2p, > + sysfan2_4p, > + /* PWM - Brightness Control */ > + pwmbrightness, > + /* PWM - System Speaker */ > + pwmbeep, > + /* SMBus */ > + smboem0, > + smboem1, > + smboem2, > + smbeeprom, > + smbthermal0, > + smbthermal1, > + smbsecurityeep, > + i2coem, > + /* DAC - Speaker */ > + dacspeaker, /* 0x30 */ > + /* SMBus */ > + smbeep2k = 0x38, > + oemeep, > + oemeep2k, > + peci, > + smboem3, > + smblink, > + smbslv, > + /* GPIO - LED */ > + powerled = 0x40, /* 0x40 */ > + batledg, > + oemled0, > + oemled1, > + oemled2, > + batledr, > + /* SMBus - Smart Battery */ > + smartbat1 = 0x48, > + smartbat2, > + /* ADC */ > + adcmosbat = 0x50, /* 0x50 */ > + adcmosbatx2, > + adcmosbatx10, > + adcbat, > + adcbatx2, > + adcbatx10, > + adc5vs0, > + adc5vs0x2, > + adc5vs0x10, > + adv5vs5, > + adv5vs5x2, > + adv5vs5x10, > + adc33vs0, > + adc33vs0x2, > + adc33vs0x10, > + adc33vs5, > + adc33vs5x2, /* 0x60 */ > + adc33vs5x10, > + adv12vs0, > + adv12vs0x2, > + adv12vs0x10, > + adcvcorea, > + adcvcoreax2, > + adcvcoreax10, > + adcvcoreb, > + adcvcorebx2, > + adcvcorebx10, > + adcdc, > + adcdcx2, > + adcdcx10, > + adcdcstby, > + adcdcstbyx2, > + adcdcstbyx10, /* 0x70 */ > + adcdcother, > + adcdcotherx2, > + adcdcotherx10, > + adccurrent, > + /* IRQ - Watchdog */ > + wdirq = 0x78, > + /* GPIO - Watchdog */ > + wdnmi, > + /* Tacho - Fan */ > + tacho0 = 0x80, /* 0x80 */ > + tacho1, > + tacho2, > + /* PWM - Brightness Control */ > + pwmbrightness2 = 0x88, > + /* GPIO - Backlight Control */ > + brionoff1, > + brionoff2, > +}; > + > +#endif /* __IMANAGER2_EC_H__ */ -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists