提交 7c8356d9 编写于 作者: J jack wang 提交者: James Bottomley

[SCSI] pm8001: enable read HBA SAS address from VPD

Signed-off-by: NJack Wang <jack_wang@usish.com>
Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
上级 8257ec80
...@@ -45,16 +45,6 @@ ...@@ -45,16 +45,6 @@
#define HEADER_LEN 28 #define HEADER_LEN 28
#define SIZE_OFFSET 16 #define SIZE_OFFSET 16
struct pm8001_ioctl_payload {
u32 signature;
u16 major_function;
u16 minor_function;
u16 length;
u16 status;
u16 offset;
u16 id;
u8 func_specific[1];
};
#define FLASH_OK 0x000000 #define FLASH_OK 0x000000
#define FAIL_OPEN_BIOS_FILE 0x000100 #define FAIL_OPEN_BIOS_FILE 0x000100
......
...@@ -516,19 +516,23 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) ...@@ -516,19 +516,23 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
u8 i; u8 i;
#ifdef PM8001_READ_VPD #ifdef PM8001_READ_VPD
DECLARE_COMPLETION_ONSTACK(completion); DECLARE_COMPLETION_ONSTACK(completion);
struct pm8001_ioctl_payload payload;
pm8001_ha->nvmd_completion = &completion; pm8001_ha->nvmd_completion = &completion;
PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, 0, 0); payload.minor_function = 0;
payload.length = 128;
payload.func_specific = kzalloc(128, GFP_KERNEL);
PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload);
wait_for_completion(&completion); wait_for_completion(&completion);
for (i = 0; i < pm8001_ha->chip->n_phy; i++) { for (i = 0; i < pm8001_ha->chip->n_phy; i++) {
memcpy(&pm8001_ha->phy[i].dev_sas_addr, pm8001_ha->sas_addr, memcpy(&pm8001_ha->phy[i].dev_sas_addr, pm8001_ha->sas_addr,
SAS_ADDR_SIZE); SAS_ADDR_SIZE);
PM8001_INIT_DBG(pm8001_ha, PM8001_INIT_DBG(pm8001_ha,
pm8001_printk("phy %d sas_addr = %x \n", i, pm8001_printk("phy %d sas_addr = %016llx \n", i,
(u64)pm8001_ha->phy[i].dev_sas_addr)); pm8001_ha->phy[i].dev_sas_addr));
} }
#else #else
for (i = 0; i < pm8001_ha->chip->n_phy; i++) { for (i = 0; i < pm8001_ha->chip->n_phy; i++) {
pm8001_ha->phy[i].dev_sas_addr = 0x500e004010000004ULL; pm8001_ha->phy[i].dev_sas_addr = 0x50010c600047f9d0ULL;
pm8001_ha->phy[i].dev_sas_addr = pm8001_ha->phy[i].dev_sas_addr =
cpu_to_be64((u64) cpu_to_be64((u64)
(*(u64 *)&pm8001_ha->phy[i].dev_sas_addr)); (*(u64 *)&pm8001_ha->phy[i].dev_sas_addr));
......
...@@ -100,6 +100,7 @@ do { \ ...@@ -100,6 +100,7 @@ do { \
#define PM8001_USE_TASKLET #define PM8001_USE_TASKLET
#define PM8001_USE_MSIX #define PM8001_USE_MSIX
#define PM8001_READ_VPD
#define DEV_IS_EXPANDER(type) ((type == EDGE_DEV) || (type == FANOUT_DEV)) #define DEV_IS_EXPANDER(type) ((type == EDGE_DEV) || (type == FANOUT_DEV))
...@@ -111,7 +112,22 @@ extern const struct pm8001_dispatch pm8001_8001_dispatch; ...@@ -111,7 +112,22 @@ extern const struct pm8001_dispatch pm8001_8001_dispatch;
struct pm8001_hba_info; struct pm8001_hba_info;
struct pm8001_ccb_info; struct pm8001_ccb_info;
struct pm8001_device; struct pm8001_device;
struct pm8001_tmf_task; /* define task management IU */
struct pm8001_tmf_task {
u8 tmf;
u32 tag_of_task_to_be_managed;
};
struct pm8001_ioctl_payload {
u32 signature;
u16 major_function;
u16 minor_function;
u16 length;
u16 status;
u16 offset;
u16 id;
u8 *func_specific;
};
struct pm8001_dispatch { struct pm8001_dispatch {
char *name; char *name;
int (*chip_init)(struct pm8001_hba_info *pm8001_ha); int (*chip_init)(struct pm8001_hba_info *pm8001_ha);
...@@ -390,11 +406,7 @@ struct pm8001_fw_image_header { ...@@ -390,11 +406,7 @@ struct pm8001_fw_image_header {
__be32 startup_entry; __be32 startup_entry;
} __attribute__((packed, aligned(4))); } __attribute__((packed, aligned(4)));
/* define task management IU */
struct pm8001_tmf_task {
u8 tmf;
u32 tag_of_task_to_be_managed;
};
/** /**
* FW Flash Update status values * FW Flash Update status values
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册