@@ -636,19 +636,22 @@ static int rsi_sdio_master_reg_read(struct rsi_hw *adapter, u32 addr,
636
636
u32 * read_buf , u16 size )
637
637
{
638
638
u32 addr_on_bus , * data ;
639
- u32 align [2 ] = {};
640
639
u16 ms_addr ;
641
640
int status ;
642
641
643
- data = PTR_ALIGN (& align [0 ], 8 );
642
+ data = kzalloc (RSI_MASTER_REG_BUF_SIZE , GFP_KERNEL );
643
+ if (!data )
644
+ return - ENOMEM ;
645
+
646
+ data = PTR_ALIGN (data , 8 );
644
647
645
648
ms_addr = (addr >> 16 );
646
649
status = rsi_sdio_master_access_msword (adapter , ms_addr );
647
650
if (status < 0 ) {
648
651
rsi_dbg (ERR_ZONE ,
649
652
"%s: Unable to set ms word to common reg\n" ,
650
653
__func__ );
651
- return status ;
654
+ goto err ;
652
655
}
653
656
addr &= 0xFFFF ;
654
657
@@ -666,7 +669,7 @@ static int rsi_sdio_master_reg_read(struct rsi_hw *adapter, u32 addr,
666
669
(u8 * )data , 4 );
667
670
if (status < 0 ) {
668
671
rsi_dbg (ERR_ZONE , "%s: AHB register read failed\n" , __func__ );
669
- return status ;
672
+ goto err ;
670
673
}
671
674
if (size == 2 ) {
672
675
if ((addr & 0x3 ) == 0 )
@@ -688,17 +691,23 @@ static int rsi_sdio_master_reg_read(struct rsi_hw *adapter, u32 addr,
688
691
* read_buf = * data ;
689
692
}
690
693
691
- return 0 ;
694
+ err :
695
+ kfree (data );
696
+ return status ;
692
697
}
693
698
694
699
static int rsi_sdio_master_reg_write (struct rsi_hw * adapter ,
695
700
unsigned long addr ,
696
701
unsigned long data , u16 size )
697
702
{
698
- unsigned long data1 [ 2 ], * data_aligned ;
703
+ unsigned long * data_aligned ;
699
704
int status ;
700
705
701
- data_aligned = PTR_ALIGN (& data1 [0 ], 8 );
706
+ data_aligned = kzalloc (RSI_MASTER_REG_BUF_SIZE , GFP_KERNEL );
707
+ if (!data_aligned )
708
+ return - ENOMEM ;
709
+
710
+ data_aligned = PTR_ALIGN (data_aligned , 8 );
702
711
703
712
if (size == 2 ) {
704
713
* data_aligned = ((data << 16 ) | (data & 0xFFFF ));
@@ -717,6 +726,7 @@ static int rsi_sdio_master_reg_write(struct rsi_hw *adapter,
717
726
rsi_dbg (ERR_ZONE ,
718
727
"%s: Unable to set ms word to common reg\n" ,
719
728
__func__ );
729
+ kfree (data_aligned );
720
730
return - EIO ;
721
731
}
722
732
addr = addr & 0xFFFF ;
@@ -726,12 +736,12 @@ static int rsi_sdio_master_reg_write(struct rsi_hw *adapter,
726
736
(adapter ,
727
737
(addr | RSI_SD_REQUEST_MASTER ),
728
738
(u8 * )data_aligned , size );
729
- if (status < 0 ) {
739
+ if (status < 0 )
730
740
rsi_dbg (ERR_ZONE ,
731
741
"%s: Unable to do AHB reg write\n" , __func__ );
732
- return status ;
733
- }
734
- return 0 ;
742
+
743
+ kfree ( data_aligned );
744
+ return status ;
735
745
}
736
746
737
747
/**
0 commit comments