RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
-Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Tuesday, December 20, 2016 9:20 AM To: Sasikumar PC; j...@kernel.org; h...@infradead.org Cc: linux-s...@vger.kernel.org; Sathya Prakash Veerichetty; linux-kernel@vger.kernel.org; Christopher Owens; Kiran Kumar Kasturi Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 20.12.2016 02:51, Sasikumar PC wrote: > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Sasikumar PC [mailto:sasikumar...@broadcom.com] > Sent: Wednesday, December 14, 2016 4:49 PM > To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' > Cc: 'linux-s...@vger.kernel.org'; Sathya Prakash Veerichetty; > 'linux-kernel@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi > Subject: RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Tomas Henzl [mailto:the...@redhat.com] > Sent: Friday, December 09, 2016 7:55 AM > To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org > Cc: linux-s...@vger.kernel.org; sathya.prak...@broadcom.com; > linux-kernel@vger.kernel.org; christopher.ow...@broadcom.com; > kiran-kumar.kast...@broadcom.com > Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: >> SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap > to have different >> sizes for different number of supported VDs. >> >> This patch is depending on patch 5 >> >> Signed-off-by: Sasikumar Chandrasekaran <sasikumar...@broadcom.com> >> --- >> drivers/scsi/megaraid/megaraid_sas.h| 7 + >> drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- >> drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > >> drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 >> drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 > ++ >> 5 files changed, 699 insertions(+), 135 deletions(-) >> >> diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h >> index f4d6a94..3e087ab 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas.h >> +++ b/drivers/scsi/megaraid/megaraid_sas.h >> @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { >> #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 >> #define MR_MAX_MSIX_REG_ARRAY 16 >> #define MR_RDPQ_MODE_OFFSET 0X0080 >> + >> +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT 16 >> +#define MR_MAX_RAID_MAP_SIZE_MASK 0x1FF >> +#define MR_MIN_MAP_SIZE 0x1 >> +/* 64k */ >> + >> #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 >> >> /* >> @@ -2152,6 +2158,7 @@ struct megasas_instance { >> bool fw_sync_cache_support; >> bool is_ventura; >> bool msix_combined; >> +u16 max_raid_mapsize; >> }; >> struct MR_LD_VF_MAP { >> u32 size; >> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c >> index c52f7be..3f06b57 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas_base.c >> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c >> @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance > *instance) >> static void megasas_update_ext_vd_details(struct megasas_instance > *instance) >> { >> struct fusion_context *fusion; >> -u32 old_map_sz; >> -u32 new_map_sz; >> +u32 ventura_map_sz = 0; >> >> fusion = instance->ctrl_context; >> /* For MFI based controllers return dummy success */ >> @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct > megasas_instance *instance) >> instance->supportmax256vd ? "Extended VD(240 VD)firmware" > : >> "Legacy(64 VD) firmware"); >> >> -old_map_sz = sizeof(struct MR_FW_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -(instance->fw_supported_vd_count - 1)); >> -new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); >> -fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -
RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
-Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Tuesday, December 20, 2016 9:20 AM To: Sasikumar PC; j...@kernel.org; h...@infradead.org Cc: linux-s...@vger.kernel.org; Sathya Prakash Veerichetty; linux-kernel@vger.kernel.org; Christopher Owens; Kiran Kumar Kasturi Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 20.12.2016 02:51, Sasikumar PC wrote: > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Sasikumar PC [mailto:sasikumar...@broadcom.com] > Sent: Wednesday, December 14, 2016 4:49 PM > To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' > Cc: 'linux-s...@vger.kernel.org'; Sathya Prakash Veerichetty; > 'linux-kernel@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi > Subject: RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Tomas Henzl [mailto:the...@redhat.com] > Sent: Friday, December 09, 2016 7:55 AM > To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org > Cc: linux-s...@vger.kernel.org; sathya.prak...@broadcom.com; > linux-kernel@vger.kernel.org; christopher.ow...@broadcom.com; > kiran-kumar.kast...@broadcom.com > Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: >> SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap > to have different >> sizes for different number of supported VDs. >> >> This patch is depending on patch 5 >> >> Signed-off-by: Sasikumar Chandrasekaran >> --- >> drivers/scsi/megaraid/megaraid_sas.h| 7 + >> drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- >> drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > >> drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 >> drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 > ++ >> 5 files changed, 699 insertions(+), 135 deletions(-) >> >> diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h >> index f4d6a94..3e087ab 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas.h >> +++ b/drivers/scsi/megaraid/megaraid_sas.h >> @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { >> #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 >> #define MR_MAX_MSIX_REG_ARRAY 16 >> #define MR_RDPQ_MODE_OFFSET 0X0080 >> + >> +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT 16 >> +#define MR_MAX_RAID_MAP_SIZE_MASK 0x1FF >> +#define MR_MIN_MAP_SIZE 0x1 >> +/* 64k */ >> + >> #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 >> >> /* >> @@ -2152,6 +2158,7 @@ struct megasas_instance { >> bool fw_sync_cache_support; >> bool is_ventura; >> bool msix_combined; >> +u16 max_raid_mapsize; >> }; >> struct MR_LD_VF_MAP { >> u32 size; >> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c >> index c52f7be..3f06b57 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas_base.c >> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c >> @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance > *instance) >> static void megasas_update_ext_vd_details(struct megasas_instance > *instance) >> { >> struct fusion_context *fusion; >> -u32 old_map_sz; >> -u32 new_map_sz; >> +u32 ventura_map_sz = 0; >> >> fusion = instance->ctrl_context; >> /* For MFI based controllers return dummy success */ >> @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct > megasas_instance *instance) >> instance->supportmax256vd ? "Extended VD(240 VD)firmware" > : >> "Legacy(64 VD) firmware"); >> >> -old_map_sz = sizeof(struct MR_FW_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -(instance->fw_supported_vd_count - 1)); >> -new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); >> -fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -(instance->drv_supported_vd_count - 1)); >> - &g
Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
On 20.12.2016 02:51, Sasikumar PC wrote: > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Sasikumar PC [mailto:sasikumar...@broadcom.com] > Sent: Wednesday, December 14, 2016 4:49 PM > To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' > Cc: 'linux-s...@vger.kernel.org'; Sathya Prakash Veerichetty; > 'linux-kernel@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi > Subject: RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Tomas Henzl [mailto:the...@redhat.com] > Sent: Friday, December 09, 2016 7:55 AM > To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org > Cc: linux-s...@vger.kernel.org; sathya.prak...@broadcom.com; > linux-kernel@vger.kernel.org; christopher.ow...@broadcom.com; > kiran-kumar.kast...@broadcom.com > Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: >> SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap > to have different >> sizes for different number of supported VDs. >> >> This patch is depending on patch 5 >> >> Signed-off-by: Sasikumar Chandrasekaran <sasikumar...@broadcom.com> >> --- >> drivers/scsi/megaraid/megaraid_sas.h| 7 + >> drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- >> drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > >> drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 >> drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 > ++ >> 5 files changed, 699 insertions(+), 135 deletions(-) >> >> diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h >> index f4d6a94..3e087ab 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas.h >> +++ b/drivers/scsi/megaraid/megaraid_sas.h >> @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { >> #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 >> #define MR_MAX_MSIX_REG_ARRAY 16 >> #define MR_RDPQ_MODE_OFFSET 0X0080 >> + >> +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT 16 >> +#define MR_MAX_RAID_MAP_SIZE_MASK 0x1FF >> +#define MR_MIN_MAP_SIZE 0x1 >> +/* 64k */ >> + >> #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 >> >> /* >> @@ -2152,6 +2158,7 @@ struct megasas_instance { >> bool fw_sync_cache_support; >> bool is_ventura; >> bool msix_combined; >> +u16 max_raid_mapsize; >> }; >> struct MR_LD_VF_MAP { >> u32 size; >> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c >> index c52f7be..3f06b57 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas_base.c >> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c >> @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance > *instance) >> static void megasas_update_ext_vd_details(struct megasas_instance > *instance) >> { >> struct fusion_context *fusion; >> -u32 old_map_sz; >> -u32 new_map_sz; >> +u32 ventura_map_sz = 0; >> >> fusion = instance->ctrl_context; >> /* For MFI based controllers return dummy success */ >> @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct > megasas_instance *instance) >> instance->supportmax256vd ? "Extended VD(240 VD)firmware" > : >> "Legacy(64 VD) firmware"); >> >> -old_map_sz = sizeof(struct MR_FW_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -(instance->fw_supported_vd_count - 1)); >> -new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); >> -fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -(instance->drv_supported_vd_count - 1)); >> - >> -fusion->max_map_sz = max(old_map_sz, new_map_sz); >> +if (instance->max_raid_mapsize) { >> +ventura_map_sz = instance->max_raid_mapsize * >> +MR_MIN_MAP_SIZE; /* 64k */ >> +fusion->current_map_sz = ventura_map_sz; >> +fusion->m
Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
On 20.12.2016 02:51, Sasikumar PC wrote: > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Sasikumar PC [mailto:sasikumar...@broadcom.com] > Sent: Wednesday, December 14, 2016 4:49 PM > To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' > Cc: 'linux-s...@vger.kernel.org'; Sathya Prakash Veerichetty; > 'linux-kernel@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi > Subject: RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > Hi Tomas, > > Please see my response inline > > Thanks > sasi > > -Original Message- > From: Tomas Henzl [mailto:the...@redhat.com] > Sent: Friday, December 09, 2016 7:55 AM > To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org > Cc: linux-s...@vger.kernel.org; sathya.prak...@broadcom.com; > linux-kernel@vger.kernel.org; christopher.ow...@broadcom.com; > kiran-kumar.kast...@broadcom.com > Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for > SAS3.5 Generic Megaraid Controllers > > On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: >> SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap > to have different >> sizes for different number of supported VDs. >> >> This patch is depending on patch 5 >> >> Signed-off-by: Sasikumar Chandrasekaran >> --- >> drivers/scsi/megaraid/megaraid_sas.h| 7 + >> drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- >> drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > >> drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 >> drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 > ++ >> 5 files changed, 699 insertions(+), 135 deletions(-) >> >> diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h >> index f4d6a94..3e087ab 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas.h >> +++ b/drivers/scsi/megaraid/megaraid_sas.h >> @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { >> #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 >> #define MR_MAX_MSIX_REG_ARRAY 16 >> #define MR_RDPQ_MODE_OFFSET 0X0080 >> + >> +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT 16 >> +#define MR_MAX_RAID_MAP_SIZE_MASK 0x1FF >> +#define MR_MIN_MAP_SIZE 0x1 >> +/* 64k */ >> + >> #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 >> >> /* >> @@ -2152,6 +2158,7 @@ struct megasas_instance { >> bool fw_sync_cache_support; >> bool is_ventura; >> bool msix_combined; >> +u16 max_raid_mapsize; >> }; >> struct MR_LD_VF_MAP { >> u32 size; >> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c >> index c52f7be..3f06b57 100644 >> --- a/drivers/scsi/megaraid/megaraid_sas_base.c >> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c >> @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance > *instance) >> static void megasas_update_ext_vd_details(struct megasas_instance > *instance) >> { >> struct fusion_context *fusion; >> -u32 old_map_sz; >> -u32 new_map_sz; >> +u32 ventura_map_sz = 0; >> >> fusion = instance->ctrl_context; >> /* For MFI based controllers return dummy success */ >> @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct > megasas_instance *instance) >> instance->supportmax256vd ? "Extended VD(240 VD)firmware" > : >> "Legacy(64 VD) firmware"); >> >> -old_map_sz = sizeof(struct MR_FW_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -(instance->fw_supported_vd_count - 1)); >> -new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); >> -fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + >> -(sizeof(struct MR_LD_SPAN_MAP) * >> -(instance->drv_supported_vd_count - 1)); >> - >> -fusion->max_map_sz = max(old_map_sz, new_map_sz); >> +if (instance->max_raid_mapsize) { >> +ventura_map_sz = instance->max_raid_mapsize * >> +MR_MIN_MAP_SIZE; /* 64k */ >> +fusion->current_map_sz = ventura_map_sz; >> +fusion->max_map_sz = ventura_map_sz; >>
RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Sasikumar PC [mailto:sasikumar...@broadcom.com] Sent: Wednesday, December 14, 2016 4:49 PM To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' Cc: 'linux-s...@vger.kernel.org'; Sathya Prakash Veerichetty; 'linux-kernel@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi Subject: RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Friday, December 09, 2016 7:55 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-s...@vger.kernel.org; sathya.prak...@broadcom.com; linux-kernel@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to have different > sizes for different number of supported VDs. > > This patch is depending on patch 5 > > Signed-off-by: Sasikumar Chandrasekaran <sasikumar...@broadcom.com> > --- > drivers/scsi/megaraid/megaraid_sas.h| 7 + > drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- > drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 > drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++ > 5 files changed, 699 insertions(+), 135 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h > index f4d6a94..3e087ab 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > #define MR_MAX_MSIX_REG_ARRAY 16 > #define MR_RDPQ_MODE_OFFSET 0X0080 > + > +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT16 > +#define MR_MAX_RAID_MAP_SIZE_MASK0x1FF > +#define MR_MIN_MAP_SIZE 0x1 > +/* 64k */ > + > #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 > > /* > @@ -2152,6 +2158,7 @@ struct megasas_instance { > bool fw_sync_cache_support; > bool is_ventura; > bool msix_combined; > + u16 max_raid_mapsize; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c > index c52f7be..3f06b57 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance *instance) > static void megasas_update_ext_vd_details(struct megasas_instance *instance) > { > struct fusion_context *fusion; > - u32 old_map_sz; > - u32 new_map_sz; > + u32 ventura_map_sz = 0; > > fusion = instance->ctrl_context; > /* For MFI based controllers return dummy success */ > @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct megasas_instance *instance) > instance->supportmax256vd ? "Extended VD(240 VD)firmware" : > "Legacy(64 VD) firmware"); > > - old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->fw_supported_vd_count - 1)); > - new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > - fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->drv_supported_vd_count - 1)); > - > - fusion->max_map_sz = max(old_map_sz, new_map_sz); > + if (instance->max_raid_mapsize) { > + ventura_map_sz = instance->max_raid_mapsize * > + MR_MIN_MAP_SIZE; /* 64k */ > + fusion->current_map_sz = ventura_map_sz; > + fusion->max_map_sz = ventura_map_sz; > + } else { > + fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > + (sizeof(struct MR_LD_SPAN_MAP) * > + (instance->fw_supported_vd_count - 1)); > + fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > > + fusion->max_map_sz = > + max(fusion->old_map_sz, fusion->new_map_sz); > > -
RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Sasikumar PC [mailto:sasikumar...@broadcom.com] Sent: Wednesday, December 14, 2016 4:49 PM To: 'Tomas Henzl'; 'j...@kernel.org'; 'h...@infradead.org' Cc: 'linux-s...@vger.kernel.org'; Sathya Prakash Veerichetty; 'linux-kernel@vger.kernel.org'; Christopher Owens; Kiran Kumar Kasturi Subject: RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Friday, December 09, 2016 7:55 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-s...@vger.kernel.org; sathya.prak...@broadcom.com; linux-kernel@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to have different > sizes for different number of supported VDs. > > This patch is depending on patch 5 > > Signed-off-by: Sasikumar Chandrasekaran > --- > drivers/scsi/megaraid/megaraid_sas.h| 7 + > drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- > drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 > drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++ > 5 files changed, 699 insertions(+), 135 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h > index f4d6a94..3e087ab 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > #define MR_MAX_MSIX_REG_ARRAY 16 > #define MR_RDPQ_MODE_OFFSET 0X0080 > + > +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT16 > +#define MR_MAX_RAID_MAP_SIZE_MASK0x1FF > +#define MR_MIN_MAP_SIZE 0x1 > +/* 64k */ > + > #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 > > /* > @@ -2152,6 +2158,7 @@ struct megasas_instance { > bool fw_sync_cache_support; > bool is_ventura; > bool msix_combined; > + u16 max_raid_mapsize; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c > index c52f7be..3f06b57 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance *instance) > static void megasas_update_ext_vd_details(struct megasas_instance *instance) > { > struct fusion_context *fusion; > - u32 old_map_sz; > - u32 new_map_sz; > + u32 ventura_map_sz = 0; > > fusion = instance->ctrl_context; > /* For MFI based controllers return dummy success */ > @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct megasas_instance *instance) > instance->supportmax256vd ? "Extended VD(240 VD)firmware" : > "Legacy(64 VD) firmware"); > > - old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->fw_supported_vd_count - 1)); > - new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > - fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->drv_supported_vd_count - 1)); > - > - fusion->max_map_sz = max(old_map_sz, new_map_sz); > + if (instance->max_raid_mapsize) { > + ventura_map_sz = instance->max_raid_mapsize * > + MR_MIN_MAP_SIZE; /* 64k */ > + fusion->current_map_sz = ventura_map_sz; > + fusion->max_map_sz = ventura_map_sz; > + } else { > + fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > + (sizeof(struct MR_LD_SPAN_MAP) * > + (instance->fw_supported_vd_count - 1)); > + fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > > + fusion->max_map_sz = > + max(fusion->old_map_sz, fusion->new_map_sz); > > - if (instance->supportmax256v
RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Friday, December 09, 2016 7:55 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-s...@vger.kernel.org; sathya.prak...@broadcom.com; linux-kernel@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to have different > sizes for different number of supported VDs. > > This patch is depending on patch 5 > > Signed-off-by: Sasikumar Chandrasekaran <sasikumar...@broadcom.com> > --- > drivers/scsi/megaraid/megaraid_sas.h| 7 + > drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- > drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 > drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++ > 5 files changed, 699 insertions(+), 135 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h > index f4d6a94..3e087ab 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > #define MR_MAX_MSIX_REG_ARRAY 16 > #define MR_RDPQ_MODE_OFFSET 0X0080 > + > +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT16 > +#define MR_MAX_RAID_MAP_SIZE_MASK0x1FF > +#define MR_MIN_MAP_SIZE 0x1 > +/* 64k */ > + > #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 > > /* > @@ -2152,6 +2158,7 @@ struct megasas_instance { > bool fw_sync_cache_support; > bool is_ventura; > bool msix_combined; > + u16 max_raid_mapsize; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c > index c52f7be..3f06b57 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance *instance) > static void megasas_update_ext_vd_details(struct megasas_instance *instance) > { > struct fusion_context *fusion; > - u32 old_map_sz; > - u32 new_map_sz; > + u32 ventura_map_sz = 0; > > fusion = instance->ctrl_context; > /* For MFI based controllers return dummy success */ > @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct megasas_instance *instance) > instance->supportmax256vd ? "Extended VD(240 VD)firmware" : > "Legacy(64 VD) firmware"); > > - old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->fw_supported_vd_count - 1)); > - new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > - fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->drv_supported_vd_count - 1)); > - > - fusion->max_map_sz = max(old_map_sz, new_map_sz); > + if (instance->max_raid_mapsize) { > + ventura_map_sz = instance->max_raid_mapsize * > + MR_MIN_MAP_SIZE; /* 64k */ > + fusion->current_map_sz = ventura_map_sz; > + fusion->max_map_sz = ventura_map_sz; > + } else { > + fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > + (sizeof(struct MR_LD_SPAN_MAP) * > + (instance->fw_supported_vd_count - 1)); > + fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > > + fusion->max_map_sz = > + max(fusion->old_map_sz, fusion->new_map_sz); > > - if (instance->supportmax256vd) > - fusion->current_map_sz = new_map_sz; > - else > - fusion->current_map_sz = old_map_sz; > + if (instance->supportmax256vd) > + fusion->current_map_sz = fusion->new_map_sz; > + else > + fusion->current_map_sz = fusion->old_map_sz; > + } > + /* irrespective of FW raid maps, driver raid map is
RE: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
Hi Tomas, Please see my response inline Thanks sasi -Original Message- From: Tomas Henzl [mailto:the...@redhat.com] Sent: Friday, December 09, 2016 7:55 AM To: Sasikumar Chandrasekaran; j...@kernel.org; h...@infradead.org Cc: linux-s...@vger.kernel.org; sathya.prak...@broadcom.com; linux-kernel@vger.kernel.org; christopher.ow...@broadcom.com; kiran-kumar.kast...@broadcom.com Subject: Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to have different > sizes for different number of supported VDs. > > This patch is depending on patch 5 > > Signed-off-by: Sasikumar Chandrasekaran > --- > drivers/scsi/megaraid/megaraid_sas.h| 7 + > drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- > drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 > drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++ > 5 files changed, 699 insertions(+), 135 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h > index f4d6a94..3e087ab 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > #define MR_MAX_MSIX_REG_ARRAY 16 > #define MR_RDPQ_MODE_OFFSET 0X0080 > + > +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT16 > +#define MR_MAX_RAID_MAP_SIZE_MASK0x1FF > +#define MR_MIN_MAP_SIZE 0x1 > +/* 64k */ > + > #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 > > /* > @@ -2152,6 +2158,7 @@ struct megasas_instance { > bool fw_sync_cache_support; > bool is_ventura; > bool msix_combined; > + u16 max_raid_mapsize; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c > index c52f7be..3f06b57 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance *instance) > static void megasas_update_ext_vd_details(struct megasas_instance *instance) > { > struct fusion_context *fusion; > - u32 old_map_sz; > - u32 new_map_sz; > + u32 ventura_map_sz = 0; > > fusion = instance->ctrl_context; > /* For MFI based controllers return dummy success */ > @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct megasas_instance *instance) > instance->supportmax256vd ? "Extended VD(240 VD)firmware" : > "Legacy(64 VD) firmware"); > > - old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->fw_supported_vd_count - 1)); > - new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > - fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->drv_supported_vd_count - 1)); > - > - fusion->max_map_sz = max(old_map_sz, new_map_sz); > + if (instance->max_raid_mapsize) { > + ventura_map_sz = instance->max_raid_mapsize * > + MR_MIN_MAP_SIZE; /* 64k */ > + fusion->current_map_sz = ventura_map_sz; > + fusion->max_map_sz = ventura_map_sz; > + } else { > + fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > + (sizeof(struct MR_LD_SPAN_MAP) * > + (instance->fw_supported_vd_count - 1)); > + fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > > + fusion->max_map_sz = > + max(fusion->old_map_sz, fusion->new_map_sz); > > - if (instance->supportmax256vd) > - fusion->current_map_sz = new_map_sz; > - else > - fusion->current_map_sz = old_map_sz; > + if (instance->supportmax256vd) > + fusion->current_map_sz = fusion->new_map_sz; > + else > + fusion->current_map_sz = fusion->old_map_sz; > + } > + /* irrespective of FW raid maps, driver raid map is constant */ > + fusion->drv_m
Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to > have different > sizes for different number of supported VDs. > > This patch is depending on patch 5 > > Signed-off-by: Sasikumar Chandrasekaran> --- > drivers/scsi/megaraid/megaraid_sas.h| 7 + > drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- > drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > > drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 > drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++ > 5 files changed, 699 insertions(+), 135 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h > index f4d6a94..3e087ab 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > #define MR_MAX_MSIX_REG_ARRAY 16 > #define MR_RDPQ_MODE_OFFSET 0X0080 > + > +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT16 > +#define MR_MAX_RAID_MAP_SIZE_MASK0x1FF > +#define MR_MIN_MAP_SIZE 0x1 > +/* 64k */ > + > #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 > > /* > @@ -2152,6 +2158,7 @@ struct megasas_instance { > bool fw_sync_cache_support; > bool is_ventura; > bool msix_combined; > + u16 max_raid_mapsize; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c > index c52f7be..3f06b57 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance > *instance) > static void megasas_update_ext_vd_details(struct megasas_instance *instance) > { > struct fusion_context *fusion; > - u32 old_map_sz; > - u32 new_map_sz; > + u32 ventura_map_sz = 0; > > fusion = instance->ctrl_context; > /* For MFI based controllers return dummy success */ > @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct > megasas_instance *instance) > instance->supportmax256vd ? "Extended VD(240 VD)firmware" : > "Legacy(64 VD) firmware"); > > - old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->fw_supported_vd_count - 1)); > - new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > - fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->drv_supported_vd_count - 1)); > - > - fusion->max_map_sz = max(old_map_sz, new_map_sz); > + if (instance->max_raid_mapsize) { > + ventura_map_sz = instance->max_raid_mapsize * > + MR_MIN_MAP_SIZE; /* 64k */ > + fusion->current_map_sz = ventura_map_sz; > + fusion->max_map_sz = ventura_map_sz; > + } else { > + fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > + (sizeof(struct MR_LD_SPAN_MAP) * > + (instance->fw_supported_vd_count - 1)); > + fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > > + fusion->max_map_sz = > + max(fusion->old_map_sz, fusion->new_map_sz); > > - if (instance->supportmax256vd) > - fusion->current_map_sz = new_map_sz; > - else > - fusion->current_map_sz = old_map_sz; > + if (instance->supportmax256vd) > + fusion->current_map_sz = fusion->new_map_sz; > + else > + fusion->current_map_sz = fusion->old_map_sz; > + } > + /* irrespective of FW raid maps, driver raid map is constant */ > + fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP_ALL); > +#if VD_EXT_DEBUG > + dev_info(>pdev->dev, "instance->max_raid_mapsize 0x%x \n ", > + instance->max_raid_mapsize); > + dev_info(>pdev->dev, > + "new_map_sz = 0x%x, old_map_sz = 0x%x, " > + "ventura_map_sz = 0x%x, current_map_sz = 0x%x " > + "fusion->drv_map_sz =0x%x, size of driver raid map 0x%lx\n", > + fusion->new_map_sz, fusion->old_map_sz, > + ventura_map_sz, fusion->current_map_sz, > + fusion->drv_map_sz, > + sizeof(struct MR_DRV_RAID_MAP_ALL)); > +#endif > } > > /** > @@ -5010,7 +5027,7 @@ static int megasas_init_fw(struct megasas_instance > *instance) > { > u32 max_sectors_1; > u32 max_sectors_2; > - u32 tmp_sectors, msix_enable, scratch_pad_2; > + u32 tmp_sectors,
Re: [PATCH V4 06/11] megaraid_sas: Dynamic Raid Map Changes for SAS3.5 Generic Megaraid Controllers
On 7.12.2016 00:00, Sasikumar Chandrasekaran wrote: > SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to > have different > sizes for different number of supported VDs. > > This patch is depending on patch 5 > > Signed-off-by: Sasikumar Chandrasekaran > --- > drivers/scsi/megaraid/megaraid_sas.h| 7 + > drivers/scsi/megaraid/megaraid_sas_base.c | 61 -- > drivers/scsi/megaraid/megaraid_sas_fp.c | 303 > > drivers/scsi/megaraid/megaraid_sas_fusion.c | 223 > drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++ > 5 files changed, 699 insertions(+), 135 deletions(-) > > diff --git a/drivers/scsi/megaraid/megaraid_sas.h > b/drivers/scsi/megaraid/megaraid_sas.h > index f4d6a94..3e087ab 100644 > --- a/drivers/scsi/megaraid/megaraid_sas.h > +++ b/drivers/scsi/megaraid/megaraid_sas.h > @@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { > #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT14 > #define MR_MAX_MSIX_REG_ARRAY 16 > #define MR_RDPQ_MODE_OFFSET 0X0080 > + > +#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT16 > +#define MR_MAX_RAID_MAP_SIZE_MASK0x1FF > +#define MR_MIN_MAP_SIZE 0x1 > +/* 64k */ > + > #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X0100 > > /* > @@ -2152,6 +2158,7 @@ struct megasas_instance { > bool fw_sync_cache_support; > bool is_ventura; > bool msix_combined; > + u16 max_raid_mapsize; > }; > struct MR_LD_VF_MAP { > u32 size; > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c > b/drivers/scsi/megaraid/megaraid_sas_base.c > index c52f7be..3f06b57 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -4424,8 +4424,7 @@ int megasas_alloc_cmds(struct megasas_instance > *instance) > static void megasas_update_ext_vd_details(struct megasas_instance *instance) > { > struct fusion_context *fusion; > - u32 old_map_sz; > - u32 new_map_sz; > + u32 ventura_map_sz = 0; > > fusion = instance->ctrl_context; > /* For MFI based controllers return dummy success */ > @@ -4455,21 +4454,39 @@ static void megasas_update_ext_vd_details(struct > megasas_instance *instance) > instance->supportmax256vd ? "Extended VD(240 VD)firmware" : > "Legacy(64 VD) firmware"); > > - old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->fw_supported_vd_count - 1)); > - new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > - fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + > - (sizeof(struct MR_LD_SPAN_MAP) * > - (instance->drv_supported_vd_count - 1)); > - > - fusion->max_map_sz = max(old_map_sz, new_map_sz); > + if (instance->max_raid_mapsize) { > + ventura_map_sz = instance->max_raid_mapsize * > + MR_MIN_MAP_SIZE; /* 64k */ > + fusion->current_map_sz = ventura_map_sz; > + fusion->max_map_sz = ventura_map_sz; > + } else { > + fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + > + (sizeof(struct MR_LD_SPAN_MAP) * > + (instance->fw_supported_vd_count - 1)); > + fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); > > + fusion->max_map_sz = > + max(fusion->old_map_sz, fusion->new_map_sz); > > - if (instance->supportmax256vd) > - fusion->current_map_sz = new_map_sz; > - else > - fusion->current_map_sz = old_map_sz; > + if (instance->supportmax256vd) > + fusion->current_map_sz = fusion->new_map_sz; > + else > + fusion->current_map_sz = fusion->old_map_sz; > + } > + /* irrespective of FW raid maps, driver raid map is constant */ > + fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP_ALL); > +#if VD_EXT_DEBUG > + dev_info(>pdev->dev, "instance->max_raid_mapsize 0x%x \n ", > + instance->max_raid_mapsize); > + dev_info(>pdev->dev, > + "new_map_sz = 0x%x, old_map_sz = 0x%x, " > + "ventura_map_sz = 0x%x, current_map_sz = 0x%x " > + "fusion->drv_map_sz =0x%x, size of driver raid map 0x%lx\n", > + fusion->new_map_sz, fusion->old_map_sz, > + ventura_map_sz, fusion->current_map_sz, > + fusion->drv_map_sz, > + sizeof(struct MR_DRV_RAID_MAP_ALL)); > +#endif > } > > /** > @@ -5010,7 +5027,7 @@ static int megasas_init_fw(struct megasas_instance > *instance) > { > u32 max_sectors_1; > u32 max_sectors_2; > - u32 tmp_sectors, msix_enable, scratch_pad_2; > + u32 tmp_sectors, msix_enable, scratch_pad_2,