ssb: fix core CC and REV reading
Subsystems (3)
PATCH 1/1 ssb: fix core CC and REV reading
Hi John,
Please apply this to wireless-dev.
This is the correct fix for the ChipCommon issue.
--
Fix CoreCode and CoreRev extraction from coreidhi. And yes, it's ugly. But that's how the device works.
Signed-off-by Michael Buesch <[email protected]>
drivers/misc/ssb.c +7 -5
@@ -643,8 +643,9 @@ int ssb_probe_cores(struct ssb *ssb, goto error; idhi =ssb_read32 (ssb,SSB_IDHIGH ); - cc = (idhi &SSB_IDHIGH_CC_MASK ) >>SSB_IDHIGH_CC_SHIFT ; - rev = (idhi &SSB_IDHIGH_RC_MASK ); + cc = (idhi &SSB_IDHIGH_CC ) >>SSB_IDHIGH_CC_SHIFT ; + rev = (idhi &SSB_IDHIGH_RCLO ); + rev |= (idhi &SSB_IDHIGH_RCHI ) >>SSB_IDHIGH_RCHI_SHIFT ; ssb->chipcommon_capabilities =0 ; ssb->nr_cores =0 ;
@@ -716,9 +717,10 @@ int ssb_probe_cores(struct ssb *ssb, core = &(ssb->cores[i]); idhi =ssb_read32 (ssb,SSB_IDHIGH ); - core->cc = (idhi &SSB_IDHIGH_CC_MASK ) >>SSB_IDHIGH_CC_SHIFT ; - core->rev = (idhi &SSB_IDHIGH_RC_MASK ); - core->vendor = (idhi &SSB_IDHIGH_VC_MASK ) >>SSB_IDHIGH_VC_SHIFT ; + core->cc = (idhi &SSB_IDHIGH_CC ) >>SSB_IDHIGH_CC_SHIFT ; + core->rev = (idhi &SSB_IDHIGH_RCLO ); + core->rev |= (idhi &SSB_IDHIGH_RCHI ) >>SSB_IDHIGH_RCHI_SHIFT ; + core->vendor = (idhi &SSB_IDHIGH_VC ) >>SSB_IDHIGH_VC_SHIFT ; core->index = i; dprintk(KERN_DEBUG PFX "Core %d found: "
include/linux/ssb.h +5 -3
@@ -100,10 +100,12 @@#define SSB_IDLOW_SSBREV_22 0x00000000/* <= 2.2 */ #define SSB_IDLOW_SSBREV_23 0x10000000/* 2.3 */ #define SSB_IDHIGH 0x0FFC/* SB Identification High */ -#define SSB_IDHIGH_RC_MASK 0x0000000f/* Revision Code */ -#define SSB_IDHIGH_CC_MASK 0x0000fff0/* Core Code */ +#define SSB_IDHIGH_RCLO 0x0000000F/* Revision Code (low part) */ +#define SSB_IDHIGH_CC 0x00008FF0/* Core Code */ #define SSB_IDHIGH_CC_SHIFT 4 -#define SSB_IDHIGH_VC_MASK 0xffff0000/* Vendor Code */ +#define SSB_IDHIGH_RCHI 0x00007000/* Revision Code (high part) */ +#define SSB_IDHIGH_RCHI_SHIFT 8/* yes, shift 8 is right */ +#define SSB_IDHIGH_VC 0xFFFF0000/* Vendor Code */ #define SSB_IDHIGH_VC_SHIFT 16/* SPROM shadow area. If not otherwise noted, fields are
Signature · 1 line
Greetings Michael.