Index: sys/arch/arm/broadcom/bcm2835_bsc.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/broadcom/bcm2835_bsc.c,v retrieving revision 1.5 diff -u -p -r1.5 bcm2835_bsc.c --- sys/arch/arm/broadcom/bcm2835_bsc.c 24 Jan 2015 00:27:31 -0000 1.5 +++ sys/arch/arm/broadcom/bcm2835_bsc.c 17 Jun 2017 11:23:38 -0000 @@ -99,8 +99,10 @@ bsciic_attach(device_t parent, device_t { struct bsciic_softc * const sc = device_private(self); struct amba_attach_args * const aaa = aux; + prop_dictionary_t prop = device_properties(self); struct i2cbus_attach_args iba; u_int bscunit = ~0; + bool disable = false; static ONCE_DECL(control); switch (aaa->aaa_addr) { @@ -112,6 +114,13 @@ bsciic_attach(device_t parent, device_t break; } + prop_dictionary_get_bool(prop, "disable", &disable); + if (disable) { + aprint_naive(": disabled\n"); + aprint_normal(": disabled\n"); + return; + } + aprint_naive("\n"); aprint_normal(": BSC%u\n", bscunit); Index: sys/arch/evbarm/rpi/rpi_machdep.c =================================================================== RCS file: /cvsroot/src/sys/arch/evbarm/rpi/rpi_machdep.c,v retrieving revision 1.70 diff -u -p -r1.70 rpi_machdep.c --- sys/arch/evbarm/rpi/rpi_machdep.c 6 Jan 2017 14:55:37 -0000 1.70 +++ sys/arch/evbarm/rpi/rpi_machdep.c 17 Jun 2017 11:23:38 -0000 @@ -1201,6 +1201,20 @@ rpi_device_register(device_t dev, void * } } #endif + + /* BSC0 is used internally by RPI3 */ + if (device_is_a(dev, "bsciic") && + ((struct amba_attach_args *)aux)->aaa_addr == BCM2835_BSC0_BASE) { + const uint32_t rev = vb.vbt_boardrev.rev; + + if ((rev & VCPROP_REV_ENCFLAG) != 0) { + switch (__SHIFTOUT(rev, VCPROP_REV_MODEL)) { + case RPI_MODEL_B_PI3: + prop_dictionary_set_bool(dict, "disable", true); + break; + } + } + } } SYSCTL_SETUP(sysctl_machdep_rpi, "sysctl machdep subtree setup (rpi)") Index: sys/arch/evbarm/rpi/vcprop.h =================================================================== RCS file: /cvsroot/src/sys/arch/evbarm/rpi/vcprop.h,v retrieving revision 1.15 diff -u -p -r1.15 vcprop.h --- sys/arch/evbarm/rpi/vcprop.h 3 Apr 2016 11:02:17 -0000 1.15 +++ sys/arch/evbarm/rpi/vcprop.h 17 Jun 2017 11:23:38 -0000 @@ -137,6 +137,28 @@ struct vcprop_tag_boardrev { uint32_t rev; } ; +#define VCPROP_REV_PCBREV __BITS(3,0) +#define VCPROP_REV_MODEL __BITS(11,4) +#define RPI_MODEL_A 0 +#define RPI_MODEL_B 1 +#define RPI_MODEL_A_PLUS 2 +#define RPI_MODEL_B_PLUS 3 +#define RPI_MODEL_B_PI2 4 +#define RPI_MODEL_ALPHA 5 +#define RPI_MODEL_COMPUTE 6 +#define RPI_MODEL_ZERO 7 +#define RPI_MODEL_B_PI3 8 +#define RPI_MODEL_COMPUTE_PI3 9 +#define RPI_MODEL_ZERO_W 10 +#define VCPROP_REV_PROCESSOR __BITS(15,12) +#define RPI_PROCESSOR_BCM2835 0 +#define RPI_PROCESSOR_BCM2836 1 +#define RPI_PROCESSOR_BCM2837 2 +#define VCPROP_REV_MANUF __BITS(19,16) +#define VCPROP_REV_MEMSIZE __BITS(22,20) +#define VCPROP_REV_ENCFLAG __BIT(23) +#define VCPROP_REV_WARRANTY __BITS(25,24) + struct vcprop_tag_macaddr { struct vcprop_tag tag; uint64_t addr;